3

「メッセージ」と「メンバーシップ」ドキュメントで構成される 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"},
...

各メッセージは 1 つのグループに関連付けられています。ユーザーは、何百もの異なるグループのメンバーシップを持つ場合があります。

特定のユーザーに代わって、メッセージ テキストの全文検索を実行したいと考えています。アプリケーションでは、ユーザーがメンバーではないグループからのメッセージを表示してはならない必要があります。

特定のユーザーが属するグループからのメッセージのみを返す全文検索を行うにはどうすればよいですか?

4

1 に答える 1

2

スマート検索文字列を作成することで、これを行うことができます。これを設定するには、検索インデックス関数を作成するときに、メッセージのグループとメッセージ テキストのインデックスを作成します。例えば:

function(doc){
  index("group", doc.group);
  index("text", doc.text);
}

次に、このインデックスを照会するときに、lucene 構文を使用して、ユーザーのメンバーシップをすべて含む検索文字列を作成します。

(group:a or group:b or group:c or ...) and text:"search string goes here"
于 2013-09-03T14:47:37.467 に答える