Фильтрация индекса товаров вasticsearch пользователем - PullRequest
0 голосов
/ 23 января 2019

У меня есть индекс товаров. У них есть обычные поля, такие как идентификатор, имя, бренд и т. Д. Запросы к этому индексу работают отлично, однако я хочу ограничить количество продуктов, которые возвращаются конкретным пользователям.

Скажем, у меня есть 5 продуктов, чьи ID идут от 1-5

Id: 1, name: “Product One”, brand: “Fake Brand”
Id: 2, name: “Product Two”, brand: “Fake Brand”
Id: 3, name: “Product Three”, brand: “Fake Brand”
Id: 4, name: “Product Four”, brand: “Fake Brand”
Id: 5, name: “Product Five”, brand: “Fake Brand”

Если фильтра нет, и я ищу бренд: «Поддельный бренд», я получаю 5 результатов.

Но я хочу добавить эту функциональность: скажем, у меня есть два пользователя. Пользователь 1 может «видеть» только идентификаторы продуктов 1, 2 и 5. А пользователь 2 может только «видеть» другое подмножество, скажем, идентификаторы продуктов 1, 2, 4 и 5.

Таким образом, если пользователь 1 ищет марку: «Поддельный бренд», он возвращает товар только с идентификаторами 1, 2 и 5. Где, как если бы пользователь 2 ищет марку: «Поддельный бренд», он возвращает товары только с ID 1, 2, 4 и 5.

Есть ли способ добавить «идентификатор пользователя» в этот запрос продуктов, а затем сохранить где-нибудь еще, какие продукты может видеть пользователь?

В SQL у меня, вероятно, будет другая таблица, в которой хранится информация о том, какие продукты может видеть каждый пользователь, а затем просто выполняется объединение. Но используя ES, я думаю, что мне нужно либо иметь два отдельных индекса, либо использовать вложенные запросы или запросы has_child / has_parent, но я не совсем уверен, как это реализовать.

...