2012-02-07 3 views
12

Мы пытаемся разработать стратегию использования elasticsearch для полнотекстового поиска на нашем экземпляре mongodb. Похоже, что каждый ключ, который мы хотим использовать в качестве фильтра, должен быть включен в индекс эластичности. Потенциально мы могли бы использовать каждый ключ в монго в качестве фильтра - то есть полнотекстовый поиск по описанию, фильтр по дате и номер телефона. Есть ли у кого-нибудь реальный опыт добавления полнотекстовых монго, которые они могут поделиться?стратегия поиска полнотекстового поиска mongodb

Возможно, мы можем использовать elasticsearch как db?

ответ

14

Я не вижу причин использовать ElasticSearch в сочетании с MongoDb, просто используйте ElasticSearch в качестве отдельного хранилища документов для документов, которые необходимо искать. И да, вы можете даже целые дБ. Конечно, это зависит от вашей модели домена и других факторов.

Если вам не нужны стебли, нечеткий поиск, сложный поиск подстановочных знаков, вы можете выполнить поиск с помощью mongoDb. Когда новый документ вставлен, разделите его на слова в нижнем регистре и, например, добавьте в «слова» массива. Позже вы можете выполнить запрос поиска по этому массиву с помощью regex. Нельзя использовать параметр I (игнорировать регистр) в этом регулярном выражении, и вы можете искать только LIKE% подстановочный знак (или без подстановочного знака), иначе поиск не будет использовать индекс mongoDb. более

Один из вариантов - вы можете попытаться найти river для MongoDB

Другой вариант - это использовать Lucene, если вы используете Java. Вероятно, вы сможете расширить класс Directory, чтобы Lucene сохранил индекс в MongoDb вместо файловой системы или ОЗУ. Я не проводил исследований в этой области, но я думаю, что это возможно.

+0

Благодаря Умар, мы собираемся дать вашему approcah попробовать – stew

+0

Хотя это вариант, наступает момент, когда вес данных достаточно велик, чтобы сделать регулярное выражение ищет неэффективный выбор. Именно поэтому существуют поисковые индексы. Они дополняют и дополняют постоянное хранилище с целью сохранения дорогостоящих операций поиска с базы данных. –

+0

Даже с регулярным выражением mongodDb может использовать индексы, как я упоминал в ответе, это зависит от типа регулярного выражения – Anton

9

Я экспериментировал с полнотекстовым поиском в MongoDB, разбивая слова в строке, как предлагал @Umar. Честно говоря, это база данных, а не поисковая система, поэтому я бы использовал Mongo для постоянного хранения и ElasticSearch для части поисковой системы. На самом деле, я бы придерживался чего-то вроде Postgresql для постоянного хранения, а затем выталкивал данные, которые вы хотите найти в поисковой системе. http://gdal.org/ogr/drv_elasticsearch.html - это драйвер, который позволит вам быстро экспортировать ваши данные с одной RDBMS на ElasticSearch. Данные не обязательно должны быть геопространственными, чтобы использовать его GDAL, если они являются способом подключения к источнику ввода.

Адам

Смежные вопросы