database - modelar - mongodb caracteristicas
Búsqueda de texto completo en bases de datos NoSQL (12)
Acabo de completar este uso de datos que se almacenan en MongoDB teniendo mi texto completo en Sphinx Search . Sé que mongo tiene un problema de votabilidad para agregar texto completo a una versión futura; sin embargo, en este momento no lo tienen.
Hay varias maneras de insertar su información de Mongo en sphinx; sin embargo, el que he encontrado más suerte (y ha sido extremadamente fácil) es a través de xmlpipe2 . Me llevó un poco entender completamente cómo usar esto; Sin embargo, este artículo: Sphinx xmlpipe2 en PHP tiene un recorrido excepcional a través del cual se muestra (al menos en PHP) cómo construir el documento, y luego cómo insertarlo en Sphinx.
Esencialmente, mi configuración termina luciendo así:
source my_source {
type = xmlpipe
xmlpipe_command = /usr/bin/php /www/generateSphinXml.php identifierForMyTable
}
con mi índice que se ve así:
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
}
He tenido un excelente éxito con esto; con suerte, puede encontrar esto como útil.
- ¿Alguien aquí tiene alguna experiencia en la implementación de un sistema en línea real que tenga una búsqueda de texto completo en cualquiera de las bases de datos NoSQL?
- Por ejemplo, ¿cómo se compara la búsqueda de texto completo en MongoDB, Riak y CouchDB?
- Parte de la métrica que estoy buscando es la facilidad de implementación y mantenimiento y, por supuesto, la velocidad.
- ¿Cuán maduros son? ¿Son algún reemplazo para la infraestructura de Lucene?
Gracias.
Aquí están los detalles sobre Riak Search http://wiki.basho.com/Riak-Search.html y una presentation sobre él también
Couchbase 5.0 está lanzando capacidades de búsqueda de texto completo basadas en el motor de código abierto Bleve. Habilita la indexación para texto completo y comienza a usar contra documentos JSON existentes en la base de datos.
Algunas diapositivas y videos de presentación que cubren el tema, mencionando a Elasticsearch y Lucene también ... https://www.slideshare.net/Couchbase/fulltext-search-how-it-works-and-what-it-can-do
Definitivamente Solr. Es NoSQL.
Tiene:
- excelente actuación
- increíbles opciones de almacenamiento
- stemmers
- highligting
- facetas
- búsqueda distribuida (SolrCloud)
- API perfecta
- administrador web
- Indexación HTML, PDF, DOC
- muchas otras características
Estoy involucrado en el desarrollo de una aplicación que usa Solandra (Apache Solr basado en Cassandra). En mi experiencia, el sistema es bastante estable y capaz de manejar datos de TB +. Personalmente estoy bastante contento con el software por los siguientes motivos: 1. Partición automatizada de datos debido al backend de Cassandra. 2. Capacidades de consulta enriquecidas (debido a Solr y Lucene). 3. Lectura y escritura rápidas (escribe mucho más rápido que las lecturas).
Sin embargo, actualmente Solandra, creo que no admite mutaciones por lotes. Es decir, puedo insertar 100 columnas en una sola inserción en Cassandra, sin embargo, Solandra no admite esto.
MarkLogic tiene mejores opciones para la búsqueda de texto, si no recuerdo mal. Aquí hay una discusión sobre el tema , aunque está en su blog, de sus escritores.
Ninguna de las bases de datos "NoSQL" existentes proporciona una implementación razonable de algo que podría denominarse "búsqueda de texto completo". MongoDB, en particular, apenas tiene nada hasta ahora (emparejar usando expresiones regulares no es búsqueda de texto completo y la búsqueda usando operadores $ in o $ all en una lista de palabras clave es solo una implementación muy pobre de una "búsqueda de texto completo"). Al usar Solr, ElasticSearch o Sphinx es sencillo: una implementación e integración a nivel de aplicación. Su elección depende ampliamente de sus requisitos y la configuración actual.
Para MongoDB, todavía no hay una función de indexación de texto completo, sin embargo, posiblemente haya uno en proceso, quizás debido en v2.2 .
Mientras tanto, puede crear un índice invertido simple mediante el uso de un campo de matriz de cadena y poner un índice en él, como se describe aquí: Búsqueda de texto completo en Mongo
O bien, puede mantener un índice de texto completo en paralelo en un índice Solr o Lucene dedicado, y si se siente realmente ambicioso, repítalo directamente en su tienda de texto completo desde el oplog de Mongo. De lo contrario, rellene ambos y manténgase sincronizado desde la lógica de su aplicación.
Sí. Ver CouchDB-Lucene que es una extensión CouchDB para soportar consultas completas de Lucene de los datos.
Si está utilizando PHP, existe una gran solución para la búsqueda de texto completo en la base de datos No-SQL MongoDB denominada MongoLantern. http://sourceforge.net/projects/mongolantern/
Anteriormente estaba usando Sphinx + MongoDB para realizar búsquedas de texto completo, el rendimiento fue excelente pero la calidad de los resultados fue muy pobre. Con MongoLantern mi búsqueda actual mejoró mucho.
MongoLantern también aparece en el sitio MongoDB.
Por favor, avíseme si lo prueba usted mismo.
Solr podría usarse con el Conector Mongo 10gen, que permite enviar datos allí (entre otros)
https://github.com/10gen-labs/mongo-connector/tree/master/mongo-connector
De su ejemplo:
python mongo_connector.py -m localhost:27217 -t http://localhost:8080/solr
proyecto cLunce. También xapian no mencionado anteriormente. Uso Sphinx y es muy bueno pero algo torpe de configurar. En realidad, prefiero los datos de las tuberías de Mongo a Sphinx a través de XMLPIPE2, en lugar de utilizar SQL de Sphinx en el archivo sphinx.conf.