textsökning funktion i MongoDB (som vid 2.6) har inga inbyggda funktioner för fuzzy/partiell strängmatchning. Som du har noterat fokuserar användningsfallet för närvarande på språk- och härkomststöd med grundläggande booleska operatorer och ord/frasmatchning.
Det finns flera möjliga tillvägagångssätt att överväga för otydlig matchning beroende på dina krav och hur du vill kvalificera dig "effektiv" (hastighet, lagring, utvecklartid, infrastruktur krävs, etc):
-
Implementera stöd för otydlig/partiell matchning i din applikationslogik med hjälp av några av de lätt tillgängliga soundalike- och likhetsalgoritmerna. Fördelarna med detta tillvägagångssätt inkluderar att inte behöva lägga till någon extra infrastruktur och att noggrant kunna anpassa matchningen till dina krav.
För några mer detaljerade exempel, se:Efficient Tekniker för fuzzy och partiell matchning i MongoDB .
-
Integrera med ett externt sökverktyg som ger mer avancerade sökfunktioner. Detta lägger till en viss komplexitet till din implementering och är sannolikt överdriven bara för att skriva i förväg, men du kan hitta andra sökfunktioner som du skulle vilja införliva någon annanstans i din applikation (t.ex. "så här", ordnärhet, facetterad sökning, ..).
Se till exempel:Hur man presterar Fuzzy-Matching med Mongo Connector och Elastic Search . Obs! ElasticSearchs fuzzy query baseras på Levenshteins avstånd.
-
Använd ett autokompletterande bibliotek som Twitters öppen källkod
typeahead.js
, som inkluderar en förslagsmotor och query/caching API. Typeahead är faktiskt ett komplement till någon av de andra backend-metoderna, och dess (valfria) förslagsmotor Bloodhound stöder förhämtning samt cachelagring av data i lokal lagring.