2012-02-07 31 views
12

Estamos tratando de desarrollar una estrategia para usar elasticsearch para la búsqueda de texto completo en nuestra instancia de mongodb. Parecería que todas las claves que queremos usar como filtro deben incluirse en el índice de elásticos. Potencialmente, podríamos querer usar todas las claves en mongo como filtro, es decir, búsqueda de texto completo en la descripción, filtro por fecha y número de teléfono. ¿Alguien tiene alguna experiencia en el mundo real de agregar texto completo a mongo que puedan compartir?mongodb estrategia de búsqueda de texto completo

¿Quizás podamos simplemente usar elasticsearch como db?

Respuesta

14

No veo ningún motivo para usar ElasticSearch junto con MongoDb, solo use ElasticSearch como almacenamiento de documentos separado para documentos, que debe buscarse. Y sí, puedes incluso como db completo. Por supuesto, depende de su modelo de dominio y otros factores.

Si no necesita derivar, búsqueda difusa, búsqueda comodín complicada, puede hacer la búsqueda con mongoDb. Cuando se inserta un nuevo documento, divídalo en minúsculas y añádalo a la matriz "palabras", por ejemplo. Más tarde puede realizar una búsqueda de esta matriz con regex. No se puede "usar la opción I (ignorar mayúsculas y minúsculas) en esta expresión regular, y solo se puede buscar el comodín LIKE% (o sin comodín), de lo contrario, la búsqueda no usaría el índice mongoDb.

Una opción más - se puede tratar de encontrar river para MongoDB

Otra opción - es utilizar Lucene si está utilizando Java. Probablemente podrá extender la clase Directory, de tal manera que Lucene almacenará el índice en MongoDb en lugar de sistema de archivos o RAM. No he hecho ninguna investigación en esta área, pero creo que es posible

+0

Gracias Umar, que vamos a dar a su approcah una oportunidad – stew

+0

Si bien esta es una opción, llega un punto en el que el peso de los datos es lo suficientemente grande como para hacer expresiones regulares busca una opción ineficiente. De hecho, es por eso que existen indexadores de búsqueda. Complementan y aumentan el almacenamiento persistente con el propósito expreso de mantener operaciones de búsqueda costosas fuera de la base de datos. –

+0

Incluso con regex mongodDb puede usar índices como mencioné en respuesta, depende del tipo de expresiones regulares – Anton

9

Experimenté con la búsqueda de texto completo en MongoDB dividiendo las palabras en la cadena como sugerido @Umar. Honestamente, es una base de datos y no un motor de búsqueda, así que usaría Mongo para el almacenamiento persistente y ElasticSearch para la parte del motor de búsqueda. De hecho, me quedaría con algo como Postgresql para el almacenamiento persistente y luego enviar los datos que desea buscar al motor de búsqueda. http://gdal.org/ogr/drv_elasticsearch.html es un controlador que le permitirá exportar rápidamente sus datos de un RDBMS a ElasticSearch. Los datos no tienen que ser geoespaciales para usarlos en GDAL siempre que sean una forma de conectarse a la fuente de entrada.

Adam

Cuestiones relacionadas