ElasticSearch对整个字段进行聚合

如何编写考虑整个字段值的ElasticSearch术语聚合查询,而不是单个令牌? 例如,我想按城市名称进行汇总,但以下内容将newyorksanfrancisco作为单独的桶返回,而不是new yorksan francisco作为预期的桶。

 curl -XPOST "http://localhost:9200/cities/_search" -d' { "size": 0, "aggs" : { "cities" : { "terms" : { "field" : "city", "min_doc_count": 10 } } } }' 

您应该在映射中修复此问题。 添加not_analyzed字段。 如果还需要分析版本,则可以创建多字段。

 "album": { "city": "string", "fields": { "raw": { "type": "string", "index": "not_analyzed" } } } 

现在在city.raw上创建聚合

这个有弹性的文档建议在映射中修复它(如接受的答案中所建议的) – 要么使字段not_analyzed要么添加带有not_analyzed的原始字段并在聚合中使用它。

没有别的办法了。 由于聚合在反向索引上操作,并且如果分析字段,则反向索引必须仅具有令牌而不是字段的原始值。

现在我们可以根据这个字段按字段分组后使用语法.keyword

 GET /bank/_search { "size": 0, "aggs": { "group_by_state": { "terms": { "field": "state.keyword" } } } }