Автозаполнение с помощью java, Redis, Elastic Search, Mongo

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

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

2 ответа

Решение

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам