2016-09-30 7 views
0

私は複数のタイプのEsインデックスを持ち、それぞれのタイプは独自のフィルタパラメータに対応しています。ここでは、複数の型のためのグローバル検索を構築しています。タイプ固有のwhere句をNESTに含める方法を混乱させています。 弾性検索 - >タイプ1(X = 1) -Elasticsearchはタイプ固有のwhere句で複数のタイプを検索する必要があります

今、私たちは、検索クエリ

var result = client.Search<ISearchDto>(s => s 
 
       .From(from) 
 
       .Size(PageSize) 
 
       .Types(lstTypes) 
 
       .Query(q => q.QueryString(qs => qs.Query(query))) 
 
       );

*を構築している(yは1 =)>タイプ2 lstTypeはタイプ1とタイプ2を持ちます

ここで、x = 1のすべてのタイプ1アイテムと、NESTのy = 1を持つすべてのタイプ2アイテムに対してwhere句を追加するにはどうすればよいですか。

ご質問が明確であることを願っておりますが、これに関する助力は高く評価されます。

答えて

1

_typeメタフィールドでは、他のフィールドでクエリを照会するのとほぼ同じ方法でクエリできます。 1件の検索クエリ内のタイプに基づいて異なるクエリを実行するには、複数の節

client.Search<ISearchDto>(s => s 
    .From(from) 
    .Size(pageSize) 
    .Type(Types.Type(typeof(FirstSearchDto), typeof(SecondSearchDto))) 
    .Query(q => q 
     .Bool(b => b 
      .Should(sh => sh 
       .Bool(bb => bb 
        .Filter(
         fi => fi.Term("_type", "firstSearchDto"), 
         fi => fi.Term(f => f.X, 1) 
        ) 
       ), sh => sh 
       .Bool(bb => bb 
        .Filter(
         fi => fi.Term("_type", "secondSearchDto"), 
         fi => fi.Term(f => f.Y, 1) 
        ) 
       ) 
      ) 
     ) 
    ) 
); 

我々は2つの should句を持つ boolクエリを持っていると boolクエリを使用することができます。各 should句は、というクエリであり、2つの filter句が1つずつあります.1つは _type、もう1つは各タイプのクエリのプロパティです。

NESTので、このクエリは

client.Search<ISearchDto>(s => s 
    .From(from) 
    .Size(pageSize) 
    .Type(Types.Type(typeof(FirstSearchDto), typeof(SecondSearchDto))) 
    .Query(q => (+q 
     .Term("_type", "firstSearchDto") && +q 
     .Term(f => f.X, 1)) || (+q 
     .Term("_type", "secondSearchDto") && +q 
     .Term(f => f.Y, 1)) 
    ) 
); 

どちらも次のクエリ

{ 
    "from": 0, 
    "size": 20, 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "bool": { 
      "filter": [ 
       { 
       "term": { 
        "_type": { 
        "value": "firstSearchDto" 
        } 
       } 
       }, 
       { 
       "term": { 
        "x": { 
        "value": 1 
        } 
       } 
       } 
      ] 
      } 
     }, 
     { 
      "bool": { 
      "filter": [ 
       { 
       "term": { 
        "_type": { 
        "value": "secondSearchDto" 
        } 
       } 
       }, 
       { 
       "term": { 
        "y": { 
        "value": 1 
        } 
       } 
       } 
      ] 
      } 
     } 
     ] 
    } 
    } 
} 
を生成して、より簡潔に書くことができる演算子オーバーロードをサポートしています
関連する問題