La ricerca testuale funzione in MongoDB (come in 2.6) non ha funzionalità integrate per la corrispondenza di stringhe fuzzy/parziale. Come hai notato, il caso d'uso attualmente si concentra sul supporto linguistico e di derivazione con operatori booleani di base e corrispondenza di parole/frasi.
Esistono diversi approcci possibili da considerare per la corrispondenza fuzzy a seconda delle tue esigenze e di come vuoi qualificarti "efficiente" (velocità, storage, tempo di sviluppo, infrastruttura richiesta, ecc.):
-
Implementare il supporto per la corrispondenza fuzzy/parziale nella logica dell'applicazione utilizzando alcuni degli algoritmi soundalike e similarità prontamente disponibili. I vantaggi di questo approccio includono la non necessità di aggiungere alcuna infrastruttura aggiuntiva e la possibilità di ottimizzare la corrispondenza in base alle proprie esigenze.
Per alcuni esempi più dettagliati, vedere:Efficiente Tecniche per la corrispondenza fuzzy e parziale in MongoDB .
-
Integrare con uno strumento di ricerca esterno che fornisce funzionalità di ricerca più avanzate. Ciò aggiunge un po' di complessità alla tua distribuzione ed è probabilmente eccessivo solo per il typeahead, ma potresti trovare altre funzionalità di ricerca che vorresti incorporare altrove nella tua applicazione (ad es. "come questo", prossimità di parole, ricerca sfaccettata, ..).
Ad esempio, vedere:Come eseguire Fuzzy-Matching con connettore Mongo e ricerca elastica . Nota:query-dsl-fuzzy-query.html" di ElasticSearch a> si basa sulla distanza di Levenshtein.
-
Utilizza una libreria di completamento automatico come l'open source di Twitter
typeahead.js
, che include un motore di suggerimenti e un'API di query/caching. Typeahead è in realtà complementare a qualsiasi altro approccio di back-end e il suo motore di suggerimenti (opzionale) Bloodhound supporta il precaricamento e la memorizzazione nella cache dei dati nella memoria locale.