Как показать только результаты, к которым у пользователя есть доступ - PullRequest
0 голосов
/ 09 октября 2019

Структура базы данных для моего приложения на Python очень похожа на Instagram. У меня есть пользователи, сообщения и пользователи могут подписываться друг на друга. Существуют публичные и частные аккаунты.

Я индексирую эти данные в ElasticSearch, и поиск пока работает нормально. Однако существует проблема, при которой поиск возвращает все сообщения без фильтрации по критериям, если пользователь имеет к нему доступ (например, сообщение создано другим пользователем, имеющим личную учетную запись, и текущий пользователь не следует за этим пользователем).

Мои данные в ElasticSearch индексируются просто по нескольким индексам в плоском формате, один индекс для пользователей, один для сообщений.

Я могу постобработать результаты, которые возвращает ElasticSearch, и удалить сообщения, для которых текущий доступ недоступен. у меня нет доступа, но это вводит дополнительный запрос к базе данных, чтобы получить этот список подписчиков пользователей и, возможно, блок-лист (я не хочу показывать сообщения пользователям, которые тоже блокируют друг друга).

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

Как мне эффективно это сделать? Мой стек - это бэкэнд Python + Flask, база данных PostgreSQL и ElasticSearch в качестве поискового индекса.

...