Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Elasicsearch通过脚本聚合获得前5名结果_Ruby On Rails_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Ruby On Rails,elasticsearch" /> elasticsearch,Ruby On Rails,elasticsearch" />

Ruby on rails Elasicsearch通过脚本聚合获得前5名结果

Ruby on rails Elasicsearch通过脚本聚合获得前5名结果,ruby-on-rails,elasticsearch,Ruby On Rails,elasticsearch,我正在尝试使用Rails中的elasticsearch获得收入部订购的前5名产品 我的问题是: query = { bool: { filter: { bool: { must: [ { term: { store_id: store.id } } # Limiting the products by store ] } } } } aggs

我正在尝试使用Rails中的elasticsearch获得收入部订购的前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)
我发现错误
无法找到适当的值上下文来执行[按收入]聚合


谢谢

您需要根据产品参考汇总订单,然后将价格*数量相加,以嵌套的总和聚合(而不是最大值)获得一个产品的收入:

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

不要在术语聚合中使用大小选项,因为您不确定顶级产品的所有订单都位于同一个分片中;您应该从响应中获取它们。

它位于OrderItem索引中,因此每个产品没有一个字段,而是每次销售时的集合。因此,您如何获得它将按单个订单的单个产品产生的大部分收入进行排序。好的,那么您只是缺少按产品参考进行的聚合。请看我的最新答案。你太棒了!从今天早上开始,我一直在努力解决这个问题。非常感谢!