2017-09-09 17 views
0

私はAzureを探しています。メッセージサービスを検索します。Azureでの個別検索検索

  • メッセージ:ID、件名、本文、[...]
  • MessageRecipient:同上、メッセージId、ユーザーID非常に単純化され、我々は、Azureのアプリケーションサービス(.NETを実行している)とSQL Azureの上に2つのテーブルを持っています、[...]

1つのメッセージに1:Nの受信者があります。

メッセージの件名と本文を検索するインデックスが必要ですが、メッセージの受信者である現在のユーザーで結果をフィルタリングする必要があります。私はこれを実装する良い方法を見つけることができないように見えるので、大量にうまく拡張できます。インデックスからすべての検索結果を返し、私のアプリケーションでUserIdをフィルタリングすると、多くの不必要なオーバーヘッドが発生します。また、各UserIdごとに複製された各メッセージのインデックス作成はさらに悪化します。

受信者フィルタリングされたメッセージ検索をどのように実装するのが最適でしょうか?

おかげで、 TGM私は私の検索インデックスでコレクション(Edm.String)データ型を利用している同様の状況で

答えて

3

{ 
    messageId : 1, 
    subject : "Why Azure Search is cool", 
    body: "Just because", 
    recipientIds : ["123", "456", "789"] 
} 

recipientIdsフィールドは、インデックススキーマ内のタイプコレクション(Edm.String)のように定義されます。だからあなたのインデックスから文書例では、このようになります。

次に、「すべて」と「すべて」のOData式を使用して検索をフィルタできます。あなたはこのようになり、受信者IDに123あなたのフィルタ式を送信されたメッセージを見つけたいのであれば、:

$filter=recipientIds/any(r: r eq '123') 

詳細はAzure Search OData expression docsを参照してください。

+1

ニースアプローチ。ありがとう、私はそれをチェックします。 – TGM

関連する問題