我們有一個用戶必須能夠搜索僅在他們有權訪問的組中可用的內容的用例。搜索必須覆蓋他們有權訪問的所有羣組。限制用戶的GAE搜索API結果
一些細節: 一個小組有許多文章,並且一個用戶可以訪問每個小組內的數百個小組和數千篇文章。 對「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個OR查詢是不是很貴? –