2016-04-18 8 views
3

私たちにはaclsというクラスがあり、このクラスにはlpropというListプロパティがあります。nestクライアントのelasticsearchで配列の配列プロパティを検索する方法

ここで、値1,3,5を持つ別のリストがあり、この変数名がtosearchであると言うことができます。

は私が入力されたレコードが巣を使用して、唯一の一致が十分である見つけることによってelasticsearchのインデックスにプロパティをlpropのACLでtosearch値を検索したいです。

例:

`public class acls 
    { 
     public List<int> lprop {get;set;} 
    } 
    public void main() 
    { 
     //.. creating connection and etc.. 
     // we have 3 recs of acls 
     // 1. lprop values: 2,4,6,8 
     // 2. lprop values: 1,9,0,4 
     // 3. lprop values: 6,7,8 
     List<int> tosearch = new int[] { 1, 3, 5 }.ToList(); 
     //Now I want to search tosearch values in acls lprop values. 
     // Result should be: 2. records 
    }` 

答えて

4

私は言及を忘れてしまったと思いTerms query

client.Search<acls>(s => s 
    .Query(q => q 
     .Terms(c => c 
      .Field(p => p.lprop) 
      .Terms<string>(tosearch) 
     ) 
    ) 
); 
+0

tosearch変数は一致する値を含むList です。1つのクエリで十分ですか、より多くのクエリとORを生成する必要がありますか? – zokkan

+0

'terms'問合せは、つまりドキュメントフィールド渡さ条件で' OR'は一語が一致するとみなされるために一致する必要がありません。ドキュメントには、より多くの詳細を持っている - https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-terms-query.html#query-dsl-terms-query –

+0

私はint型の代わりに使用することができますtosearch値の一覧? – zokkan

0

結果は、2つのレコード

public static bool Search(List<string> lprop, List<string> tosearch) 
    { 
     if (tosearch.Any(s => lprop.Any(v => v == s))) 
     { 
      return true; 
     } 
     return false; 
    } 
+0

を使用しなければならない理由を私は理解していないものの、これを試してみてください私はelasticsearchで検索するためにこの検索をネストで構築する必要があることを示します。 – zokkan

関連する問題