У нас есть прецедент, когда пользователи должны иметь возможность искать контент, доступный только в группах, к которым у них есть доступ. Поиск должен осуществляться по всем группам, к которым у них есть доступ.Ограничение результатов поиска API GAE пользователем
Некоторые детали: Группа имеет много сообщений, и пользователь может иметь доступ к сотням групп и тысячам сообщений в каждой группе. Поиск «Foo» должен возвращать все группы с «Foo» в имени и всех сообщениях в пределах групп, к которым у них есть доступ, и иметь «Foo» в контенте.
То, как я думал об этом, заключается в том, чтобы иметь список user_id, связанный с каждым индексом документа, а затем включать user_id в строку запроса, чтобы убедиться, что у пользователя есть доступ. Как только результаты будут возвращены, мы можем сделать дополнительную проверку, чтобы увидеть, что они имеют доступ к контенту, прежде чем возвращать результаты.
Индекс документа что-то вроде этого:
fields = [
search.TextField(name="data", value="some searchable stuff"),
search.AtomField(name="post_id", value="id of post"),
search.AtomField(name="group_id", value="id of group"),
search.AtomField(name="user_id", value=user_id_1),
search.AtomField(name="user_id", value=user_id_2),
#.... add the thousand other users who have access to the group (done in loop)
]
#then query run a user 123 would be as follows:
results = index.search("data = Foo AND user_id = 123")
Моя озабоченность в связи с вышеизложенным подходом: Каждый новый пользователь, который присоединяется к группе потребовалось бы индекс поиска перенумеровать включить их user_id по каждому документу ,
Есть ли лучший способ обращения с этим прецедентом?
Благодаря Роб
Зачем вам нужно включать user_id, если вы уже включили group_id, и знаете, к каким группам принадлежит пользователь? –
@AndreiVolgin, чтобы пользователь мог искать сайт по всем группам, к которым они принадлежат). Это может быть в 100-х годах. Вы предлагаете передать в список group_ids часть вашего запроса? Если есть 100, не будет ли 100 вопросов или запросов дорогостоящим? –