ElasticSearch在分组后获取具有最大值的文档

时间:2016-05-11 14:30:29

标签: elasticsearch nest

我们想为ElastichSearch创建一个搜索查询

  • attestationIdentification
  • 分组文件
  • 然后为每个组获取具有最大attestationSituationNbr的所有文档(每个组中可以有多个文档)。

问题

在下面启动查询时,我会为每个attestationIdentification获取存储桶,attestationIdentification中的最大值为theMax

但是,是否可以立即获取文件?和某种top_hits一样?或者我是否真的必须使用这些结果启动另一个搜索?

此外,是否可以使用NEST.ElasticSearch?

执行此操作

简单示例数据:

{
 "attestationIdentification" : 1,
 "attestationSituationNbr" : 20
},

{
 "attestationIdentification" : 1,
 "attestationSituationNbr" : 21
},

{
 "attestationIdentification" : 2,
 "attestationSituationNbr" : 30
}

我的查询

{
  "aggs": {
    "yourGroup": {
      "terms": {
        "field": "attestationIdentification",
        "size": 10
      },
      "aggs": {
        "theMax": {
          "max": {
            "field": "attestationSituationNbr"
          }
        }
      }
    }
  }
}

结果

结果是每个组的最大值,但是,我想获得具有此最大值的文档:

...
"aggregations": {
   "yourGroup": {
     "doc_count_error_upper_bound": 0,
     "sum_other_doc_count": 0,
     "buckets": [
       {
         "key": 1,
         "doc_count": 4,
         "theMax": { "value": 21 }
       },
       {
         "key": 2,
         "doc_count": 2,
         "theMax": { "value": 30 }
       }
    ...

1 个答案:

答案 0 :(得分:1)

使用top_hits之类的:

{
  "size": 0, 
  "aggs": {
    "yourGroup": {
      "terms": {
        "field": "attestationIdentification",
        "size": 10
      },
      "aggs": {
        "theMax": {
          "top_hits": {
            "size": "1",
            "sort": {
              "attestationSituationNbr": {
                "order": "desc"
              }
            }
          }
        }
      }
    }
  }
}