Подтвердить что ты не робот

Стратегия полнотекстового поиска mongodb

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

Адам