REST API в узле JS для полнотекстового поиска с использованием упругого поиска - PullRequest
0 голосов
/ 21 января 2019

Я разрабатываю REST API в узле js, используя mongodb в качестве базы данных. У меня есть много моделей в моей схеме базы данных, таких как Провинция, Достопримечательности, Еда, Фестивали и т. Д. Во внешнем интерфейсе у меня есть окно поиска, которое выполняет поиск по всем этим моделям. Я храню свои данные в онлайн-атласе Монго. Итак, я хочу использовать упругий поиск для создания всего API-интерфейса поиска для моего приложения из всех моделей.

Я обнаружил, что полнотекстовый поиск в mongodb неэффективен. А также mongoosastic автоматически индексирует для упругого поиска, но это относится только к одной модели, где мне нужно искать из всех моделей. Я не получил пошаговый подход к созданию остальных API в узле J с помощью упругого поиска. Я новичок, и я застрял в этом полном поиске по всем моделям в Монго БД.

1 Ответ

0 голосов
/ 21 января 2019

Для готового решения вы можете попробовать https://github.com/yougov/mongo-connector - однако для этого потребуется запустить набор реплик вместо одной базы данных.

Если вы хотитеЧем больше контроля, тем лучше было бы добавить код на уровне базы данных, который (синхронно или асинхронно) обновляет индексы ElasticSearch объектом, как только вы успешно сохраните его в MongoDB.Это также должно обрабатывать сбои / повторные попытки при обновлении индекса ES.


И наконец ... если вам нужно искать по всем моделям, возможно, вам следует подумать о том, как вымоделирование ваших данных / индексация их в ElasticSearch.

Например, если я хочу, чтобы мои пользователи могли искать имя, которое может быть любым из: [Провинция, Аттракцион, Еда, Фестиваль], тогда я мог бы создать индекс, который только содержит эти поля «name» + уникальные идентификаторы, которые указывают на объекты, которые они представляют.Возможно, для этого может быть полезен запрос multi_match .

Если пойти дальше (и при этом все же предполагать, что вам нужно искать только в поле «имя»), вы можете рассмотреть возможность сохранения только имени / идентификатора виндекс ElasticSearch, а затем получить полный объект из Mongo через его идентификатор.Гораздо меньше для индексации таким образом.

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