2012-02-07 13 views
12

Stiamo cercando di sviluppare una strategia per l'utilizzo di elasticsearch per la ricerca full-text sulla nostra istanza di mongodb. Sembrerebbe che ogni chiave che vogliamo usare come filtro debba essere inclusa nell'indice elastics. Potenzialmente potremmo voler utilizzare ogni chiave in mongo come filtro, ovvero ricerca full-text sulla descrizione, filtro per data e numero di telefono. Qualcuno ha qualche esperienza del mondo reale nell'aggiunta di full-text a mongo che possono condividere?mongodb full text search strategy

Forse possiamo usare elasticsearch come db?

risposta

14

Non vedo alcun motivo per utilizzare ElasticSearch in combinazione con MongoDb, è sufficiente utilizzare ElasticSearch come archivio di documenti separato per i documenti, che devono essere cercati. E sì, puoi anche db intero. Ovviamente dipende dal modello di dominio e da altri fattori.

Se non hai bisogno di derivazione, ricerca fuzzy, ricerca complicata con caratteri jolly, puoi eseguire ricerche con mongoDb. Quando viene inserito un nuovo documento, suddividerlo in parole in lettere minuscole e aggiungere all'array "parole", ad esempio. Successivamente è possibile eseguire una richiesta di ricerca su questo array con regex. Non è possibile utilizzare l'opzione I (ignora maiuscole/minuscole) in questa espressione regolare ed è possibile cercare solo il carattere jolly LIKE% (o senza carattere jolly), altrimenti la ricerca non utilizzerà l'indice mongoDb.

Una possibilità più - si può provare a trovare river per MongoDB

Un'altra opzione - è quello di utilizzare Lucene se si utilizza Java. Probabilmente si sarà in grado di estendere la classe Directory, in modo tale che Lucene memorizzerà l'indice in MongoDb invece che nel file system o nella RAM. Non ho fatto alcuna ricerca in questo settore, ma penso sia possibile

+0

Grazie Umar, stiamo andando a dare il vostro approcah una prova – stew

+0

Mentre questa è un'opzione, si arriva a un punto in cui il peso dei dati è grande abbastanza per fare regex cerca una scelta inefficiente. Questo è infatti il ​​motivo per cui gli indicizzatori di ricerca esistono. Integrano e aumentano lo storage persistente con lo scopo esplicito di mantenere costose operazioni di ricerca dal database. –

+0

Anche con regex mongodDb può usare gli indici come ho detto in risposta, dipende dal tipo di regex – Anton

9

Ho sperimentato la ricerca full text in MongoDB dividendo le parole nella stringa come suggerito da @Umar. Onestamente, è un database e non un motore di ricerca, quindi userei Mongo per la memorizzazione persistente e ElasticSearch per la parte del motore di ricerca. In effetti, vorrei conservare qualcosa come Postgresql per l'archiviazione persistente e quindi spingere i dati che si desidera cercare nel motore di ricerca. http://gdal.org/ogr/drv_elasticsearch.html è un driver che consente di esportare rapidamente i dati da un RDBMS a ElasticSearch. I dati non devono essere geospaziali per poterli utilizzare GDAL a condizione che siano un modo per connettersi alla sorgente di input.

Adam

Problemi correlati