2017-11-16 11 views
0

私は2つのインデックス:ABを持っています。ElasticSearch - 異なるインデックスから異なるタイプを取得する

Aのタイプは、car,motorbikeおよびvanです。

Bのタイプは、bus,carおよびpickupです。

私はBからAcarpickupからmotorbikevanを取得する単一のクエリを持ってできるようにしたいです。

私はこれを行うためにfilterを使用すると、現在、私が持っている:

.filter(
    not(
     should(
     termsQuery("key", Seq("car", "bus")) 
    ) 
    ) 
) 

しかし、明らかに、これは両方のインデックスのcarをフィルタリングします。私は各インデックスごとに2つの別々のクエリを実行し、それぞれ異なるタイプのフィルタを行うことができますが、可能ならばこれを避けたいと思います。

私は1回のクエリで何をしようとしていますか?

答えて

0

あなたはそれがブールクエリをまとめるだけの問題だ、ということを知ったら、あなたはとても特別なフィールド_index_typeを使用して、インデックスと種類に検索することができます。

search("_all").query(
    boolQuery().should(
     boolQuery().must(
     termQuery("_index", "A"), 
     termsQuery("_type", "motorbike", "van") 
    ), 
     boolQuery().must(
     termQuery("_index", "B"), 
     termsQuery("_type", "car", "pickup") 
    ) 
    ) 
) 
0

このようなことができます。

GET _search 
{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "bool": { 
      "filter": [ 
       { 
       "term": { 
        "_index": { 
        "value": "A" 
        } 
       } 
       }, 
       { 
       "terms": { 
        "_type": ["motorbike","van"] 

       } 
       } 
      ] 
      } 
     }, 
     { 
      "bool": { 
      "filter": [ 
       { 
       "term": { 
        "_index": { 
        "value": "B" 
        } 
       } 
       }, 
       { 
       "terms": { 
        "_type": ["car","pickup"] 
       } 
       } 
      ] 
      } 
     } 
     ] 
    } 
    } 
} 
関連する問題