Лучший способ настроить ElasticSearch для поиска только в данных каждого клиента - PullRequest
0 голосов
/ 23 апреля 2019

У нас есть продукт SAAS, где компании создают учетные записи и заполняют свои собственные личные данные.Мы думаем об использовании ElasticSearch, чтобы позволить клиенту искать все свои собственные данные в нашей системе.

В качестве примера у нас будет свободный текстовый поиск, где пользователь может вводить что угодно, а API будет возвращать несколько различных типов.объектов.Например, они вводят John, и API возвращает объект пользователя для пользователей, соответствующих имени, содержащему John, или электронному письму, содержащему John.Или он также может возвратить объект команды, имя команды которого соответствует Джону (например, John's Team) и т. Д.

Итак, мои вопросы:

  1. Является ли ElasticSearch разумным выбором?для того, что мы хотим сделать с точки зрения концепции?

  2. Если бы мы использовали ElasticSearch, что было бы лучшим способом для индексации данных, чтобы мы могли искать все данные для конкретного клиента?Есть ли у каждого клиента свой собственный индекс?

  3. Есть ли какие-либо подсказки о том, как мы синхронизируем ElasticSearch с данными в базе данных (DynamoDB)?Если мы индексируем данные для клиента, а затем обновляем данные по мере их изменения, имеет ли смысл также повторно выполнять индексацию данных также по расписанию?

Спасибо!

1 Ответ

1 голос
/ 23 апреля 2019

Я постараюсь дать общие ответы из собственного опыта с разбитыми данными о клиентах с помощью упругого поиска:

  1. Если вы хотите действительно быстро выполнять поиск по большому количеству данных, ES всегдадействительно хорошее решение для этого - оно идет со стоимостью вторичного хранилища данных, которое вам нужно будет синхронизировать с вашей базой данных.

  2. Невозможно иметь разные типы данных в одном индексеТаким образом, в данном случае можно либо создать один индекс для каждого типа данных и клиента (осторожно, индексы сопряжены с дополнительными затратами - не создавайте слишком много данных с небольшим количеством данных), либо создать один индекс для каждого типа данных и добавить свойство в свой тип данных.данные, которые вы затем можете отфильтровать, например, по номеру клиента.Вам нужно будет денормализовать ваших данных, чтобы получить максимальную выгоду от упругого поиска.

  3. Как упомянуто в 1, вам нужно будет синхронизировать оба - естьмножество способов тоже сделать это.В качестве примера мы используем подход, основанный на событиях, чтобы как можно быстрее помещать критические обновления вasticsearch (осторожно: это не SQL - поэтому у вас всегда будут проблемы с параллелизмом, когда вам нужна безопасность чтения и записи).Для данных, которые не являются критически важными, мы используем задания, которые регулярно обновляют их.Когда вы индексируете документ с таким же идентификатором, он будет полностью обновлен.

Надеюсь, это поможет, не стесняйтесь задавать вопросы.

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