Как предварительно отфильтровать данные перед выполнением запроса ElasticSearch? - PullRequest
0 голосов
/ 14 июля 2020

Я собираюсь использовать MsSqlServer и Elasti c вместе. MS SQL - это основная база данных, а Elasti c - это база данных поиска. Моя структура базы данных выглядит так:

  • Пользователь (id, name, companyId ) - 120 тыс. Записей
  • Компания (id, имя) - 10 тыс. Записей
  • Company_matrix (parent_company_id, child_company_Id) - 20k записей
  • Company_share_data (company_id, share_to_company_Id) - 50k записей
  • Product (id, name, allow_to_be_shared * 1015 1016 * companyId ) - 1 млн записей

Я создам индекс elasti c для таблицы продуктов и компаний, чтобы повысить скорость поиска. Пользователь, вошедший в систему с идентификатором companyId = X, может видеть все продукты с идентификатором companyid = X или все продукты материнских компаний, определенных в Company_matrix , или все продукты, используемые другими компаниями из Company_share_data но allow_to_be_shared не равно false.

Этот запрос очень простой на сервере SQL, но проблема с отсутствием sql db, как у elasticsearch. Есть ли способ выполнить поиск в списке «доступных идентификаторов продуктов» в sqlserver, затем передать его в elasticsearch и смешать их с условиями поиска пользователя? Или что-нибудь получше?

Спасибо

1 Ответ

0 голосов
/ 14 июля 2020

Если я правильно понял, вы хотите видеть все документы в Elasticsearch по каким-то критериям. В этом случае вы можете использовать BoolQuery в Elasticsearch.

Если вам это неприятно, то другой способ - получить список идентификаторов продуктов из вашего SQLQuery и использовать (передать ) идентификаторы в запрос терминов в Elasticsearch.

Надеюсь, это будет полезно.

...