Elasticsearch 1.7文档类型聚合

时间:2016-01-11 12:19:36

标签: elasticsearch elasticsearch-aggregation

我试图在日期存储中获取文档类型的聚合。查看1.7 Type Filter documentation,使用类型过滤器就可以了。但是,我在尝试提交该查询时遇到以下问题:

curl -XGET localhost:9200/my_index/_search?pretty -d '
{ "type":
  { "value" : "my_type" }
}'

结果:

"error" : "SearchPhaseExecutionException[Failed to execute phase [query], all shards failed;...

我成功运行了以下内容:

curl -XGET localhost:9200/my_index/_search?pretty -d '
{ 
  "aggs": {
    "type_a_total": {
      "filter": {
        "type": {
          "value": "type_a"
        }
      }
    }
  }
}'

curl -XGET localhost:9200/my_index/_search?pretty -d '
{ 
  "aggs": {
    "type_b_total": {
      "filter": {
        "type": {
          "value": "type_b"
        }
      }
    }
  }
}'

结果:

...
"aggregations" : {
  "type_a" : {
    "doc_count" : 123456789
  }
}
...
"aggregations" : {
  "type_b" : {
    "doc_count" : 987654321
  }
}
...

根据_type

,我知道如何将它们全部放回一个聚合中

1 个答案:

答案 0 :(得分:3)

您需要通过type查询或query查询(我的选择)将constant_score过滤器包含在filtered元素中。

curl -XGET localhost:9200/my_index/_search?pretty -d '{
  "query": {
    "filtered": {
      "filter": {
        "type": {
          "value": "my_type"
        }
      }
    }
  }
}'

但是,如果您只想获取每种类型的文档数量,则可以在terms字段上使用_type聚合

curl -XGET localhost:9200/my_index/_search?pretty -d '{
  "size": 0,
  "aggs": {
    "all_types": {
      "terms": {
        "field": "_type"
      }
    }
  }
}'