如何在弹性搜索中找到一些搜索项的总和?

时间:2016-08-25 22:42:34

标签: elasticsearch sum kibana aggregation elasticsearch-plugin

我有一系列文档如下:

`

{
  "_index": "senseihub-data",
  "_type": "historical-data",
  "_id": "AVa-BvxJ9Iu6vSdmuerK",
  "_score": 1,
  "_source": {
    "university": "JOHNS HOPKINS UNIVERSITY",
    "description": "FUNCTIONAL ANALYSIS OF CAROTID BODY RESPONSES TO HYPOXIA IN MICE\"",
    "funding": 3327323,
    "taxonomy": "Signal Processing "
  }
}

`

现在我想查找一些分类法的总资金信息。 例如如果我搜索分类法:'信号处理','数据挖掘',我想得到以下输出

信号处理:所有具有分类法作为信号处理的文档的“资金”字段总和

数据挖掘:所有具有分类法作为数据挖掘的文档的“资金”字段总和

这是我到目前为止所提出的,但这不能正常工作:

`

{
   "query":{
      "bool":{
         "should":[
            {
               "term":{
                  "taxonomy":"Signal Processing"
               }
            },
            {
               "term":{
                  "taxonomy":"Data Mining"
               }
            }
         ]
      }
   },
   "sort":[
      {
         "funding":{
            "order":"desc"
         }
      }
   ],
   "aggs":{
      "funds":{
         "sum":{
            "field":"funding"
         }
      }
   }
}

`

我是弹性搜索的绝对新手。请帮忙。

1 个答案:

答案 0 :(得分:0)

您可以通过

获得每个分类的资金总额
  1. 使用术语聚合而不是分类来获取所有分类
  2. 在步骤1的存储桶中使用和聚合作为子聚合。
  3. {
      "query": {
        "match_all": {}
      },"aggs": {
        "taxonomy": {
          "terms": {
            "field": "taxonomy",
            "size": 0
          },"aggs": {
              "NAME": {
                 "sum": {
                 "field": "funding"
                 }
               }
          }
        }
      },"size": 0
    }
    

    以上查询将为您提供每个分类的资金总额。

    如果您想要特定分类的资金总额

    1. 使用术语查询获取该分类的所有文档
      1. 对来自步骤1的结果使用总和聚合
    2.  {  
         "query":{  
            "term":{  
               "taxonomy":{  
                  "value":"Signal Processing"
               }
            }
         },
         "aggs":{  
            "NAME":{  
               "sum":{  
                  "field":"funding"
               }
            }
         }
      }
      

      确保字段“分类”未分析否则“信号处理”之类的值将被标记为“信号”,“处理”。

      您的查询要尝试的是:

      1. 将带有分类的文档作为“信号处理”或“数据挖掘”。
      2. 为步骤1中的所有文件提供资金
      3. Bool Query Reference