2017-09-18 11 views
2

A、B、C、Dの4つのクエリがあるとします。 私がしたいことは、与えられたクエリAの結果セットが、他の各クエリのそれぞれの結果セットの交差数を計算することです。与えられた結果セットのクエリのドキュメント数をカウントする

基本的に私はA AND BA AND CA AND Dをカウントしたいが、私は毎回A再計算する必要はありません。

:私は私の Aクエリはそれほど種類 Shirtのあるすべてのアイテムを一致さ

{ 
    "mappings": { 
    "doc": { 
     "properties": { 
     "type": { 
      "type": "string" 
     }, 
     "gender": { 
      "type": "string" 
     }, 
     "color": { 
      "type": "string" 
     }, 
     "material": { 
      "type": "string" 
     } 
     } 
    } 
    } 
} 

そして、次のマッピングとインデックスを持っているとしましょう - 私は

は例のES V2.4を使用しています

{ 
    "query": { 
    "match": { 
     "type": "Shirt" 
    } 
    } 
} 

そして、その結果セット(「すべてのアイテムタイプシャツ」)から、「青」の数字を取得したい、または「男性」の数字を取得したい 別々のクエリを作成することでそれを行うことができます:

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "match": { 
      "type": "Shirt" 
      } 
     }, 
     { 
      "match": { 
      "color": "Blue" 
      } 
     } 
     ] 
    } 
    } 
} 

そして

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "match": { 
      "type": "Shirt" 
      } 
     }, 
     { 
      "match": { 
      "gender": "Male" 
      } 
     } 
     ] 
    } 
    } 
} 

しかし、これは、私は本当に避けたいすべてのクエリにtype: "Shirt"を検索するために発生します。

アップデート:私は私が探していたものを見つけた - 「フィルタ」の集約 - ので、私は私のクエリ以下を構築することができます。

{ 
    "query": { 
    "match": { 
     "type": "Shirt" 
    } 
    }, 
    "aggs": { 
    "gender_male": { 
     "filter": { 
     "match": { 
      "gender": "Male" 
     } 
     } 
    }, 
    "color_blue": { 
     "filter": { 
     "match": { 
      "color": "Blue" 
     } 
     } 
    } 
    } 
} 
+0

例を挙げて説明してください。 –

+0

@HatimStovewala例で更新 –

+0

あなただけが必要ですか? –

答えて

1

これを試してみてください。 4つのクエリをaggsに定義し、すぐに取得します。

GET test/shirts/_search 
{ 
    "query": { 
    "bool": { 
     "filter": { 
     "type": { 
      "value": "shirts" 
     } 
     } 
    } 
    }, 
    "aggs": { 
    "count_by_color": { 
     "terms": { 
     "field": "color", 
     "size": 100 
     } 
    }, 
    "count_by_gender":{ 
     "terms": { 
     "field": "gender", 
     "size": 100 
     } 
    }, 
    "count_by_material":{ 
     "terms": { 
     "field": "material", 
     "size": 100 
     } 
    }, 
    "count_by_gender_color":{ 
     "terms": { 
     "field": "gender", 
     "size": 100 
     }, 
     "aggs": { 
     "color": { 
      "terms": { 
      "field": "color", 
      "size": 100 
      } 
     } 
     } 
    } 
    } 
} 
+0

ありがとう、しかし、これは私が探していたものではありません。これは多くの値を返し、関連するものを見つけるためにそれらを検索する必要があるからです。元の質問を回答に更新しました。 –

関連する問題