mongodb стратегия полнотекстового поиска - PullRequest
13 голосов
/ 07 февраля 2012

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

Может быть, мы можем просто использовать эластичный поиск в качестве базы данных?

Ответы [ 2 ]

14 голосов
/ 07 февраля 2012

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

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

Еще один вариант - вы можете попытаться найти river для mongoDb

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

9 голосов
/ 08 февраля 2012

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

Адам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...