MongoDB. [Touche De Trop Grandes À L'Index]
Un peu de Contexte: je suis à la planification de l'utilisation de MongoDB comme l'édition frontend db pour quelques-uns de mes sites web. Les données seront conservées dans une db SQL Server et il y aura des tâches en arrière-plan qui remplira la MongoDB à intervalles prédéfinis pour readonly fins pour stimuler la performance de votre site web.
La Situation: j'ai une table " x " que j'ai traduit en une mongo collection, tout a bien fonctionné.
'x' a une colonne " c " était à l'origine un type NVARCHAR(MAX) dans la base de données source et possède un balcon texte.
Quand j'étais à la recherche par la colonne "c", mongo était en train de faire l'analyse complète sur la collection.
J'ai donc essayé de faire un ensureIndex({c : 1 }) qui a fonctionné, mais quand j'ai vérifié le mongodb les journaux il m'a montré que 90% des données ne pouvaient pas être indexés comme [Touche de Trop Grandes À l'Index] !!
Et est donc a répertorié 10% des données et maintenant seulement renvoie les résultats à partir de ce 10% !!
Quelles sont mes options ??
Remarque: j'ai été en utilisant cette colonne pour faire de la recherche en texte intégral dans SQL Server, maintenant je ne sais pas si je dois aller de l'avant avec Mongo ou pas 🙁
Vous devez vous connecter pour publier un commentaire.
si vous avez besoin de recherche de texte à l'intérieur d'une chaîne de grande taille, vous pouvez utiliser l'un de ces:
mot-clé le fractionnement
expression régulière
l'ancien, la baisse a que vous avez besoin de la "logique" de combiner le mot-clé pour effectuer une recherche, ce dernier fortement l'impact sur les performances.
probablement, si vous avez vraiment besoin recherche plein texte, la meilleure option est d'utiliser un externe de l'indexeur comme solr ou lucene.
Essayez d'exécuter votre mongod processus avec ce paramètre:
Et que d'essayer de nouveau.
Puisque vous pouvez le faire quelques explications, vous pourrez extraire des mots-clés et de les mettre dans un champ:
et de faire un index sur cette.
N'utilisez pas de mongo pour la recherche plein texte
ses pas conçu pour cela. Oui bien évidemment, vous obtiendrez une erreur clé trop grande sur l'indexation des pour la longue chaîne de valeurs.
Meilleure approche consisterait à l'aide de texte intégral les serveurs de recherche (solr/lucene ou sphinx) si votre principale préoccupation est la recherche.
Récente (2.4 et au-dessus de) MongoDB construit permettre à un couple d'autres options:
texte
index qui prend directement en charge que les cas d'utilisation.haché
index.