2013-05-27 3 views
5

私は範囲ファセットを使用して検索をやってる:elasticsearch rangeファセットのcountとtotal_countの違いは何ですか?

{ 
"query": { 
    "match_all": {} 
}, 
"facets": { 
    "prices": { 
     "range": { 
      "field": "product_price", 
      "ranges": [ 
       {"from": 0, "to": 200}, 
       {"from": 200, "to": 400}, 
       {"from": 400, "to": 600}, 
       {"from": 600, "to": 800}, 
       {"from": 800} 
      ] 
     } 
    } 
} 
} 

をそして予想通り、私は、応答としての範囲を得た:すべての回答counttotal_count

[ 
    { 
    "from": 0.0, 
    "to": 200.0, 
    "count": 0, 
    "total_count": 0, 
    "total": 0.0, 
    "mean": 0.0 
    }, 
    { 
    "from": 200.0, 
    "to": 400.0, 
    "count": 1, 
    "min": 399.0, 
    "max": 399.0, 
    "total_count": 1, 
    "total": 399.0, 
    "mean": 399.0 
    }, 
    { 
    "from": 400.0, 
    "to": 600.0, 
    "count": 5, 
    "min": 499.0, 
    "max": 599.0, 
    "total_count": 5, 
    "total": 2886.0, 
    "mean": 577.2 
    }, 
    { 
    "from": 600.0, 
    "to": 800.0, 
    "count": 3, 
    "min": 690.0, 
    "max": 790.0, 
    "total_count": 3, 
    "total": 2179.0, 
    "mean": 726.3333333333334 
    }, 
    { 
    "from": 800.0, 
    "count": 2, 
    "min": 899.0, 
    "max": 990.0, 
    "total_count": 2, 
    "total": 1889.0, 
    "mean": 944.5 
    } 
] 

は同じです。 誰に違いがあるのか​​分かりませんか?どちらを使うべきですか?

答えて

10

非常に良い質問!あなたがフィールドに基づいた範囲と集計データ(minmaxtotal_counttotalmean)を計算することができvalue_fieldkey_fieldを使用するとすると、この部分は...あなたはほとんどの時間を同じ値を参照するので注意が必要ですが、別のフィールドにたとえば、人気のある分野の範囲を計算し、価格分野の集計データを見て、どのような種類の価格を持っているかをすべての人気の範囲で確認できます。おそらく安価な製品を好む人、あるいはそうでない人はいますか?

商品に複数の価格が設定されているとしましょう。例えば、国ごとに異なる価格を設定してみましょう... counttotal_countと異なる場合です。例を見てみましょう。複数の値持つことができる人気のフィールドと価格フィールドを含む文書の

レッツ・インデックスカップル、:

{ 
    "popularity": 50, 
    "price": [28,30,32] 
} 

{ 
    "popularity": 120, 
    "price": [50,54] 
} 

は、今度は、次の検索要求を実行してみましょう、これ人気フィールドをキーとして価格フィールドを値として使用してレンジファセットを作成します。

{ 
    "popularity_prices": { 
     "_type": "range", 
     "ranges": [ 
     { 
      "to": 100, 
      "count": 1, 
      "min": 28, 
      "max": 32, 
      "total_count": 3, 
      "total": 90, 
      "mean": 30 
     }, 
     { 
      "from": 100, 
      "count": 1, 
      "min": 50, 
      "max": 54, 
      "total_count": 2, 
      "total": 104, 
      "mean": 52 
     } 
     ] 
    } 
} 

それは今total_countが何であるかを明確にする必要があります:は、ここで得られた面です。それはvalue_field(価格)に関連しています:3つの異なる価格値が最初の範囲に含まれますが、それらは同じ文書から来ます。一方、countは、範囲に入るドキュメントの数です。

total_countはフィールド値について、countはドキュメントについて理解したので、複数の値を保持していれば通常の範囲ファセットでも同じ動作が期待できます。残念ながら、これは現在発生していませんが、レンジファセットは各フィールドの最初の値のみを考慮します。それがバグかどうかは分かりません。したがって、counttotal_countは常に同じです。

+0

これはドキュメントのどこかにありますか?はいの場合はリンクがありますか?ありがとう – jackdbernier

+0

実際にどこでも読んだことはありません。自分自身で試してみました:)私は複数の値について「ElasticSearchサーバーブック」で何かを読んでいますが、それは私にとにかくはっきりしませんでした。 – javanna