如何计算字段在特定范围内的文档数量?

时间:2014-10-09 00:32:30

标签: elasticsearch

我正在尝试构建一个elasticsearch查询,该查询计算某个字段在特定范围内的文档数。这种聚合也包含在日期直方图聚合中,但我不认为这对于这个问题是重要的。

示例数据:

ID: Score
01: 4
02: 5
03: 10    
04: 9

我想计算'得分'> = 9的文档数量。我在此聚合中尝试了脚本和过滤器,但我无法使其工作。

此聚合计算所有文档,而不仅仅是与脚本匹配的文档。

"aggs": {
    "report_days": {
        "date_histogram": {
            "field": "Date",
            "interval": "day"
        },
        "aggs": {
            "value_count": {
                "field": "Score",
                "script": "_value >=9"
            }
        }
    }
}

以下聚合给我一个解析失败,说Parse Failure [Expected [START_OBJECT] under [field], but got a [VALUE_STRING] in [value_count]]

"aggs": {
    "report_days": {
        "date_histogram": {
            "field": "Date",
            "interval": "day"
        },
        "aggs": {
            "value_count": {
                "field": "Score",
                "filter": {
                    "range": {
                        "Score": {
                            "gte": 9
                        }
                    }
                }
            }
        }
    }
}

感谢您的任何建议!

2 个答案:

答案 0 :(得分:0)

运行查询(“score:> 9”)并检查hits->总值。请参阅the doc中的示例。

答案 1 :(得分:0)

此查询将为您提供得分> = 9的文档数量

{
  "query": {
    "range": {
      "score": {
        "gte": 9
      }
    }
  }
}

并且此agg将执行相同的操作

{
  "aggs": {
    "my agg": {
      "range": {
        "field": "score",
        "ranges": [
          {
            "from": 9
          }
        ]
      }
    }
  }
}