我们有一个用例,用户必须能够搜索仅在他们有权访问的组中可用的内容。搜索必须跨越他们有权访问的所有组。
一些细节:一个组有很多帖子,一个用户可以访问数百个组和每个组内的数千个帖子。搜索“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。
有没有更好的方法来处理这个用例?
谢谢罗伯