首页 > 解决方案 > 为什么 elasticsearch 不支持 min_doc_count 和 order by _count asc?

问题描述

要求:

group by hldId having count(*) = 2

弹性搜索查询:

"aggs": {
    "groupByHldId": {
        "terms": {
            "field": "hldId",
            "min_doc_count": 2,
            "order" : { "_count" : "asc" }
        }            
    }
}

但没有记录返回

  "aggregations" : {
    "groupByHldId" : {
      "doc_count_error_upper_bound" : -1,
      "sum_other_doc_count" : 2660,
      "buckets" : [ ]
    }
  }

但如果更改为desc,则返回

   "buckets" : [
        {
          "key" : 200035075,
          "doc_count" : 355
        },

或者如果没有min_doc_count,它也有回报

"buckets" : [    
    {
      "key" : 200000061,
      "doc_count" : 1
    },

那么为什么 havemid_doc_countascdirection 都返回空呢?

标签: elasticsearch

解决方案


您可以尝试这样,bucket selector使用自定义script.

 {
  "aggs": {
    "countfield": {
      "terms": {
        "field": "hldId",
        "size": 100,
        "order": {
          "_count": "desc"
        }
      },
      "aggs": {
        "criticals": {
          "bucket_selector": {
            "buckets_path": {
              "doc_count": "_count"
            },
            "script": "params.doc_count==2"
          }
        }
      }
    }
  }
}

推荐阅读