我正在使用Cloudant构建一个消息传递系统,其中包含“消息”和“成员资格”文档:
消息文件:
{"_id":"1","type"="message","group":"a","text":"this is message 1"},
{"_id":"2","type"="message","group":"a","text":"this is message 2"},
{"_id":"3","type"="message","group":"b","text":"this is message 3"},
...
会员资料:
{"_id":"a","type"="membership","user":"joe","group":"a"},
{"_id":"b","type"="membership","user":"bob","group":"a"},
{"_id":"c","type"="membership","user":"bob","group":"b"},
...
每条消息都与一个组相关联。用户可能拥有数百个不同组的成员资格。
我想代表特定用户对消息文本执行全文搜索。该应用程序要求用户不得查看来自不是其成员的组的消息。
如何进行全文搜索,仅返回特定用户所属组的邮件?
答案 0 :(得分:2)
您可以尝试通过制作智能搜索字符串来完成此操作。要进行此设置,在编写搜索索引功能时,请对消息的组以及消息文本编制索引。例如:
function(doc){
index("group", doc.group);
index("text", doc.text);
}
然后,在查询此索引时,使用lucene syntax构建一个包含所有用户成员资格的搜索字符串。
(group:a or group:b or group:c or ...) and text:"search string goes here"