Recherche en texte intégral dans les bases de données NoSQL
- est-ce que quelqu'un ici a de l'expérience dans le déploiement d'un vrai système en ligne qui a fait une recherche en texte intégral dans l'une des bases de données NoSQL?
- par exemple, comment la recherche en texte intégral se compare-t-elle en MongoDB, Riak et CouchDB?
- une partie de la métrique que je recherche est la facilité de déploiement et de maintenance et bien sûr la vitesse.
- quelle maturité ont-ils? Est-ce qu'ils remplacent L'infrastructure de Lucene?
Merci.
12 réponses
aucune des bases de données "NoSQL" existantes ne fournit une implémentation raisonnable de quelque chose qui pourrait être appelé "recherche en texte intégral". MongoDB en particulier n'a à peine rien jusqu'à présent (appariement en utilisant des expressions régulières n'est pas recherche fulltext et la recherche en utilisant $in ou $tous les opérateurs sur une liste de mots clés est juste une très mauvaise mise en œuvre d'une "recherche fulltext"). L'utilisation de Solr, ElasticSearch ou Sphinx est simple - une implémentation et intégration au niveau de l'application. Votre choix largement dépend de vos besoins et de la configuration actuelle.
en Voici les détails sur Riak de Recherche http://wiki.basho.com/Riak-Search.html et un présentation tant bien
Oui. Voir CouchDB-Lucene qui est une extension de CouchDB pour prendre en charge toutes les requêtes Lucene des données.
MarkLogic a de meilleures options pour la recherche de texte, si je me souviens. Voici un discussion sur le sujet, bien que ce soit sur leur blog, de leurs écrivains.
je participe au développement d'une application en utilisant Solandra (basé sur Cassandra Apache Solr). D'après mon expérience, le système est très stable et peut traiter les données TB+. Je suis personnellement très satisfait du logiciel pour les raisons suivantes: 1. Partitionnement automatisé des données grâce à Cassandra backend. 2. Riches capacités d'interrogation (grâce à Solr et Lucene). 3. Lecture et écriture rapides (écrit beaucoup plus vite que lit).
cependant actuellement Solandra, I believe ne supporte pas les mutations par lots. C'est-à-dire, je peux insérer 100 colonnes dans une seule insertion dans Cassandra, mais Solandra ne supporte pas cela.
pour MongoDB, il n'y a pas encore de fonction d'indexation intégrale, mais il y en a peut-être une en préparation, peut-être due en v2.2.
en attendant, vous pouvez créer un simple index inversé en utilisant un champ string array, et en mettant un index dessus, comme décrit ici:Recherche Plein Texte dans Mongo
ou, vous pouvez maintenir un index texte intégral parallèle dans un index Solr ou Lucene dédié, et si vous vous sentez vraiment ambitieux répliquer directement à votre magasin de texte intégral à partir de L'oplog Mongo. Sinon, remplissez les deux et restez synchronisés avec la logique de votre application.
je viens de terminer l'achèvement de ceci en utilisant des données qui sont stockées dans MongoDB tout en ayant mon engin Fulltext dans Sphinx Search. Je sais que mongo a un problème votable pour ajouter fulltext à une future version; cependant, à ce stade, ils ne l'ont pas.
il y a plusieurs façons d'insérer votre information Mongo dans sphinx; cependant celui avec lequel j'ai trouvé le plus de chance (et qui a été extrêmement facile) est à travers xmlpipe2. Il m'a fallu un peu pour bien comprendre comment utiliser ce; cependant cet article: Sphinx xmlpipe2 in PHP a un parcours exceptionnel qui montre (au moins en PHP) comment construire le document, puis comment l'insérer dans sphinx.
essentiellement ma configuration finit par ressembler à ceci:
source my_source {
type = xmlpipe
xmlpipe_command = /usr/bin/php /www/generateSphinXml.php identifierForMyTable
}
avec mon index, puis comme ceci:
index my_index {
source = my_source
path = /usr/local/sphinx/var/data/my_index
docinfo = extern
min_word_len = 1
mlock = 0
morphology = stem_en
charset_type = utf-8 //<----- This is q requirement however.
enable_star = 1
html_strip = 0
min_prefix_len = 2
}
j'ai eu un excellent succès; j'espère que vous trouverez ce utile.
si vous utilisez PHP il y a une excellente solution pour la recherche en texte intégral dans la base de données no-SQL MongoDB nommé comme MongoLantern. http://sourceforge.net/projects/mongolantern/
auparavant J'utilisais Sphinx+MongoDB pour effectuer la recherche plein texte, la performance était grande mais la qualité du résultat était très mauvaise. Avec MongoLantern ma recherche actuelle s'est améliorée beaucoup.
MongoLantern est également répertorié dans le site de MongoDB.
s'il vous Plaît laissez-moi savoir si vous essayez de votre propre chef.
projet cLunce. Aussi xapian non mentionné ci-dessus. J'utilise Sphinx et c'est très bon, mais un peu maladroit. En fait, je préfère les données de tuyauterie de Mongo dans Sphinx via XMLPIPE2, au lieu d'utiliser Sphinx' SQL dans sphinx.fichier conf.
Solr pourrait être utilisé avec le connecteur Mongo de 10gen, qui permet d'y push des données (entre autres)
https://github.com/10gen-labs/mongo-connector/tree/master/mongo-connector
à Partir de leur exemple:
python mongo_connector.py -m localhost:27217 -t http://localhost:8080/solr
Certainement Solr. Il est NoSQL.
C'est:
- performances impressionnantes
- génial options de stockage
- conjugaison
- highligting
- facettage
- recherche distribuée (SolrCloud)
- perfect API
- Web admin
- HTML, PDF, DOC indexage
- beaucoup d'autres caractéristiques
Couchbase 5.0 propose des fonctionnalités de recherche en texte intégral basées sur le moteur Bleve open source. Vous activez l'indexation pour le texte intégral et commencez à utiliser contre les documents JSON existants dans la base de données.
quelques diapositives et vidéo de présentation sur le sujet, mentionnant Elasticsearch et Lucene... https://www.slideshare.net/Couchbase/fulltext-search-how-it-works-and-what-it-can-do