Автозаполнение с java, Redis, Elasti c Поиск, Монго - PullRequest
2 голосов
/ 08 марта 2020

Мне нужно внедрить автозаполнение с более чем 500 000 имен, которые впоследствии могут увеличиться до более 4 миллионов имен.

Backend - это вызов веб-службы java REST с использованием Spring. Должен ли я использовать MongoDB , Redis или Elasticsearch для хранения и запроса / поиска имен?

Ответы [ 2 ]

5 голосов
/ 08 марта 2020

Это критический вариант использования поиска, и MongoDB и Redis идеально подходят для поиска по ключу и не используются для поиска, в то время как Elasticsearch является распределенной поисковой системой, созданной специально для такого случая использования.

Перед тем, как выбрать систему, вы должны знать, как работает ваша функция, и подумать о ее выборе.

Нефункциональные требования для вашей функции

  1. Каково общее количество поисковых запросов в секунду (QPS)?
  2. Как часто вы будете обновлять документы (ie, имена в вашем примере).
  3. Что такое SLA после того, как имена обновляются и появляются в результатах поиска?
  4. SLA для результатов поиска.

Некоторые функциональные требования.

  1. Как должно выглядеть автозаполнение, префикс, инфиксный поиск по именам?
  2. Минимальное количество символов, которое должен ввести пользователь, прежде чем показывать им результаты автозаполнения .
  3. Как часто могут изменяться вышеуказанные требования.

Индексированные документы Elasticsearch в инвертированном индексе и работают на соответствие токенов (которые могут быть легко настроены в соответствии с требованиями бизнеса) следовательно, супер быстро в поиске. Redis и MongoDB не имеют этой структуры внутри и не должны использоваться для этого варианта использования. У вас не должно быть никаких сомнений в выборе Elasticsearch вместо них для реализации автозаполнения.

Поскольку автозаполнение является одной из основных функций поиска, существует отличный блог , который вам следует прочитайте, чтобы понять различные подходы, предлагаемые Elasticsearcg, и их компромисс.

0 голосов
/ 09 марта 2020

Вы можете использовать RediSearch (https://oss.redislabs.com/redisearch/). Это бесплатная система поиска текста, построенная поверх Redis как RedisModule. Он также имеет функцию автозаполнения.

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