mongodb approximative de la correspondance de chaîne
Je suis en train de mettre en œuvre un moteur de recherche pour mes recettes de cuisine-site web à l'aide de mongo db.
J'essaie d'afficher les suggestions de recherche dans le type-ahead widget boîte aux utilisateurs.
J'en suis encore à essayer de soutenir mal orthographié requêtes(levenshtein).
Par exemple: chaque fois que les utilisateurs de type "pza', type-ahead doit afficher "pizza" comme l'un de la suggestion.
Comment puis-je mettre en œuvre ces fonctionnalités à l'aide de mongodb?
Veuillez noter que la recherche doit être instantanée, depuis le résultat de la recherche seront récupérées par type-ahead widget. Les collections sur lesquelles je voudrais effectuer des requêtes de recherche ont à plus de 1 million d'entrées.
J'ai pensé à la mise en œuvre de levenshtein algorithme, mais ce serait de ralentir les performances, comme la collection est énorme.
J'ai lu FTS(Recherche Plein Texte) de mongo 2.6 est assez stable maintenant, mais mon exigence est Approximative match, pas de FTS. FTS ne sera pas de retour 'pza" pour "pizza".
Veuillez me recommander la façon efficace.
Je suis l'aide d'un noeud js mongodb pilote natif.
- Si vous voulez vraiment ce genre de résultats, alors vous êtes probablement mieux de la mise en œuvre d'un moteur de recherche externe, la solution qui en fait déjà il OOTB. Les fonctions de recherche de texte de MongoDB sont destinés à être un "minimum" de cas. Vous pouvez toujours garder votre dépôt principal dans MongoDB, et il y a, connecteur instructions pour les produits les plus populaires.
- Juste un lien pratique pour Levenshtein pour ceux d'entre vous qui sont nouveaux dans le concept: people.cs.pitt.edu/~kirk/cs1501/Pruhs/Spring2006/missions/...
Vous devez vous connecter pour publier un commentaire.
La recherche de texte fonctionnalité dans MongoDB (au 2.6) n'a pas de fonctionnalités intégrées floue ou partielle de la chaîne de mise en correspondance. Comme vous l'avez remarqué, le cas d'utilisation se concentre actuellement sur la langue & découlant de soutien avec des opérateurs booléens de base et le mot/la phrase correspondant.
Il y a plusieurs approches possibles à prendre en compte pour la correspondance floue selon vos besoins et la façon dont vous voulez pour se qualifier "efficace" (de vitesse, de stockage, le temps du développeur, de l'infrastructure nécessaire, etc):
Implémenter le support pour floue ou partielle correspondant dans la logique de l'application à l'aide de certaines facilement disponibles soundalike et de la similarité des algorithmes. Les avantages de cette approche sont notamment de ne pas avoir à ajouter de toute infrastructure supplémentaire et de pouvoir en étroite collaboration tune correspondant à vos exigences.
Pour certains des exemples plus détaillés, voir: Techniques efficaces de Flou et de la reconnaissance Partielle dans MongoDB.
Intégrer avec un outil de recherche qui offre plus de fonctionnalités de recherche avancée. Cela ajoute un peu de complexité à votre déploiement et est probablement exagéré, juste pour typeahead, mais vous pouvez trouver d'autres fonctionnalités de recherche que vous souhaitez intégrer ailleurs dans votre application (par exemple, "comme cela", mot de proximité, recherche à facettes, ..).
Voir, par exemple: Comment Effectuer Floue-Correspondance avec Mongo Connecteur et Elastic Search. Remarque: ElasticSearch est floue requête est basée sur la distance de Levenshtein.
Utiliser une saisie semi-automatique de la bibliothèque comme Twitter open source
typeahead.js
, qui comprend une suggestion de requête et de moteur/de la mise en cache de l'API. Typeahead est en fait complémentaire à l'un des autres backend approches, et de son (facultatif) suggestion moteur Chien de saint-hubert prend en charge le pré-chargement ainsi que la mise en cache des données dans le stockage local.Le meilleur des cas, ce serait pour utiliser elasticsearch floue requête:
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html
Il prend en charge levenshtein algorithme hors de la boîte et a des fonctionnalités supplémentaires qui peuvent être utiles pour vos exigences, à savoir:
- plus comme ça
- puissant facettes /agrégations
- la saisie semi-automatique