2016-06-17 2 views
2

Railsでelasticsearchを使用して収益で注文し、上位5製品を販売しようとしています。ここでスクリプトによる集計から上位5つ目の結果が得られました

は私のクエリです:

query = { 
    bool: { 
     filter: { 
     bool: { 
     must: [ 
      { term: { store_id: store.id } } # Limiting the products by store 
     ] 
     } 
    } 
    } 
} 

    aggs = { 
    by_revenue: { 
     terms: { 
     size: 5, 
     order: {revenue: "desc"} 
     }, 
     aggs: { 
     revenue: { 
      max: { 
      script: "doc['price_as_float'].value * doc['quantity'].value" 
      } 
     } 
     } 
    } 
    } 

    response = OrderItem.search(query: query, aggs: aggs, size: 0) 

私はエラーにcould not find the appropriate value context to perform aggregation [by_revenue]

感謝を入手します!

答えて

2

あなたはその後、*ネストされた和集合で一つの製品から収入を得るための量ではなく、最高の価格を合計し、製品の参照に注文を集約する必要があります。

aggs: { 
    products: { 
     terms: { 
     field: "product_ref", 
     order: { revenues: "desc" }, 
     }, 
     aggs: { 
     revenues: { 
      sum: { script: "doc['price_as_float'].value * doc['quantity'].value" } 
     } 
     } 
    } 
    } 

でサイズオプションを使用しないでくださいあなたのトップ製品のすべての注文が同じシャードに置かれているかどうかわからないので、集約という用語を使用します。代わりにそれらを応答から取得する必要があります。

+0

これはOrderItemインデックスに含まれているため、商品ごとに1つのフィールドはありません。何かが売却されるたびに収集されます。それで、どのようにして注文すれば、単一の注文の単一の商品から生成されるほとんどの収益によって注文されますか。 –

+0

これで、商品別の集計が欠落しています。私の更新された答えを見てください。 – nemile

+0

あなたは素晴らしいです!私は今朝からこれと闘ってきました。本当にありがとう! –

関連する問題