Estamos planeando para el almacenamiento de millones de documentos en MongoDB y búsqueda de texto completo es muy requeridos. He leído Elasticsearch y Solr son las mejores soluciones disponibles para la búsqueda de texto completo.

  • Es Elastic search es lo suficientemente maduro para ser utilizado para Mongodb búsqueda de texto completo? Nosotros también la fragmentación de las colecciones. ¿Elasticsearch trabaja con Sharded colecciones?

  • ¿Cuáles son las ventajas y desventajas del uso de Elasticsearch o Solr?

  • Es MongoDB capaz de hacer búsquedas de texto completo?

InformationsquelleAutor atandon | 2012-06-13

7 Comentarios

  1. 25

    Hay algunas capacidades de búsqueda en MongoDB, pero no es tan rico en características como los motores de búsqueda.

    http://www.mongodb.org/display/DOCS/Full+Texto+Búsqueda+en+Mongo

    Utilizamos Mongo con Solr para hacer que el contenido de su búsqueda. Preferimos Solr porque

    • Es fácil de configurar y personalizar
    • Tiene gran comunidad (Esto es realmente útil si usted está trabajando con herramientas opensource)

    Ya que no trabajo con ES que yo no podría decir mucho al respecto. Usted puede encontrar algunos de los debates acerca de Solr vs ES en los enlaces de abajo.

    • Gracias Parvin. tu post fue muy útil.
    • «no es tan eficaz como los motores de búsqueda» … yo diría «no como feature-rich como los motores de búsqueda.» Mongo multi clave de búsqueda de la eficiencia no es malo, pero carece de características presentes en los motores de búsqueda.
    • Gracias por la advertencia. Actualizado es tan rico en características.
    • Actualmente hay experimental de búsqueda de texto completo en la última dev mongo blog.mongodb.org/post/40513621310/…
  2. 22

    Tengo una experiencia profesional de ambos Solr/MySQL y ElasticSearch/MongoDB.

    Si usted va a la consulta de un lote de su motor de búsqueda, ya fragmento de su MongoDB (quiero decir, si quieres fragmento demasiado su motor de búsqueda): usted debe utilizar ElasticSearch, a menos que lo que quieres hacer no se puede hacer con ElasticSearch. Y se debe utilizar incluso si usted no va a fragmento.

    ElasticSearch es un nuevo proyecto en la parte superior de Lucene que trae el mecanismo de fragmentación, de alguien que se utiliza para entornos distribuidos y de búsqueda (Shay Bannon hecho Brújula y trabajó para Gigaspaces, el control datagrid editor).

    ElasticSearch es tan fácil como MongoDB a shard, creo que es incluso más sencilla y la configuración por defecto funciona muy bien para la mayoría de los casos.


    No me gusta Solr tanto.

    • La consulta de idioma no está estructurado (sino es el caso de los plugins y Lucene, y creo que se puede utilizar este no estructurado de consulta langage con ES demasiado)
    • No creo que haya un adecuado Solr cliente. Solr cliente en java una mierda, y yo hearh chicos PHP también se quejan, mientras que ElasticSearch Java cliente es muy agradable, mucho más de typesafe y ofrece async apoyo (bueno si el uso de Netty, por ejemplo). Con Solr, usted va a hacer un MONTÓN de concatenación de cadenas.
    • Menos fáciles de escala
    • No tan nuevo proyecto, me sentí el departamento técnico que tiene. ElasticSearch nace de la Brújula, así que supongo que todo el departamento técnico ha caído a tener un nuevo enfoque.

    Relativos a los datos de la importación, tengo experiencia con Solr DataImportHandler y ElasticSearch ríos (CouchDB y MongoDB). Lo que puedo decirle es:

    • Solr permite hacer más cosas, pero en una muy desestructurado XML manera, y la documentación no ayuda mucho a entender lo que es realmente el momento de tener lugar una vez que están fuera de el hola mundo y tratar de utilizar algunas características avanzadas.
    • ElasticSearch enfoque es más simple y también limitado, pero ha salido de la caja de soporte para algunas de las tecnologías, mientras que DataImportHandler parece más complejo-SQL amable
    • Con mi proyecto de Solr tuve que usar el manual de indización de algunos documentos, pero era sobre todo debido a la imposibilidad de eliminar la normalización de la cantidad de datos necesarios en un documento (el proyecto de Solr utiliza MySQL).

    También hay una nueva MongoDB conector para ambos Solr y ElasticSearch que tengo que probar asap 🙂
    http://blog.mongodb.org/post/29127828146/introducing-mongo-connector


    Así que al final, voy a elegir definitivamente ElasticSearch, porque:

    • Ahora tiene una gran comunidad
    • Muchas personas que conozco con experiencia con Solr como ElasticSearch
    • El lado del cliente es más seguro y estructurado, y proporciona async con Java Futuros
    • Tanto, probablemente, puede importar datos de MongoDB fácilmente con el nuevo conector
    • Como yo sé, que permite hacer casi todo lo que Solr hace (en mi experiencia, pero yo no soy un motor de búsqueda de expertos)
    • Añade la fragmentación de la caja
    • Añade percolación que puede ayudar a construir en tiempo real de aplicaciones escalables (pero probablemente tendrá un adicional de la tecnología de mensajería)
    • El código fuente que he leído tiene casi ningún departamento técnico en comparación con Solr (al menos en el lado del cliente), y parece fácil crear plugins.
    • +1 para verboseness
  3. 7

    En términos de MongoDB de forma nativa, no han de búsqueda de texto completo apoyo. Usted puede ver que esto es una característica popular de solicitud:

    https://jira.mongodb.org/browse/SERVER-380

    Lo que conozco de el ES río plugin para MongoDB, las colas de la oplog para su funcionalidad. Desde un sharded instalación tendría múltiples oplogs y no habría manera de alterar fácilmente que el código para conectarse a través de un mongos.

    Mismo para Solr, los ejemplos que he visto suelen implicar un comportamiento similar a la ES plugin. Algunos de los más sólidos info aquí:

    http://blog.knuthaugen.no/2010/04/cooking-with-mongodb-and-solr.html

    No tengo ninguna experiencia en el uso de uno, pero otros han hecho comparaciones antes, echa un vistazo aquí:

    Solr vs ElasticSearch

    ElasticSearch, Esfinge, Lucene, Solr, Xapian. La cual se ajusta para que uso?

    • Sólo me preguntaba por qué ES sería ‘el empate para el servicio de amazon’?
    • wow – no estoy confuso ES con EB – mi mal, va a editar – +1 para observar mi estupidez 🙂
    • Gracias por sus comentarios a todos.
  4. 6

    MongoDB no puede hacer eficientes de búsqueda de texto completo. Usted puede hacer búsquedas con caracteres comodín en los campos, pero no creo que el uso de estos índices de forma eficiente.

    Me gustaría recomendar el uso de el río funcionalidad de ElasticSearch automáticamente empujar los documentos de MongoDB para ElasticSearch.

    elasticsearch en el río de la mongodb es un MongoDB a Elasticsearch río que, cuando un documento de cambios en MongoDB, ElasticSearch se monitoreo el oplog y, a continuación, actualizar automáticamente su índice.

    Esta manera se minimiza el problema de mantener los dos almacenes de datos en modo de sincronización, como ElasticSearch es sólo la supervisión de la replicación de las tablas de Mongo.

  5. 2

    Mongo no es al bueno de búsqueda de texto.
    Obviamente, usted necesita índice de campos para la búsqueda rápida y la indexación de campos que contienen datos GRANDES (largas cadenas largas) se ha fallado en mongo. tiene un límite de 1k para el índice, si usted tiene un contenido más de 1k, será ignorado por el índice y no se mostrará en los resultados de búsqueda. obviamente, si usted está tratando de realizar una búsqueda de texto completo de sus artículos, mongo no es en al una buena opción.

  6. 2

    Actualmente, en MongoDB 2.4.6, hay ahora ES una búsqueda de texto completo en MongoDB y es más rico en características, a continuación, en versiones anteriores. En http://docs.mongodb.org/manual/core/text-search/ se describen las capacidades de la nueva funcionalidad.

    Vale la pena mencionar:

    • acorta y se deriva el término de búsqueda(s), tanto durante la creación del índice y el texto de la ejecución del comando. asigna una puntuación a cada uno de los documentos que
    • contiene el término de búsqueda en los campos indexados. La puntuación se determina la relevancia de un documento a una determinada consulta de búsqueda.

    Sin embargo, en esta respuesta (a partir de septiembre de 2013) https://stackoverflow.com/a/18631775/1920149 se puede ver, que mongo todavía advierte contra el uso de esta funcionalidad en la producción. Esta funcionalidad está aún en fase beta.

Dejar respuesta

Please enter your comment!
Please enter your name here