我想在ElasticSearch中形成一个嵌套聚合类型的查询,基本上嵌套聚合有四个层次。
组ID。关键字---方向--计费呼叫类型--应答呼叫持续时间
示例:
"aggregations": {
"avgCallDuration": {
"terms": {
"field": "groupId.keyword",
"size": 10000,
"min_doc_count": 1,
"shard_min_doc_count": 0,
"show_term_doc_count_error": false,
"order": [
{
"_count": "desc"
},
{
"_key": "asc"
}
]
},
"aggregations": {
"call_direction": {
"terms" : {
"field": "direction"
},
"aggregations": {
"call_type" : {
"terms": {
"field": "billingCallType"
},
"aggregations": {
"avg_value": {
"terms": {
"field": "durationCallAnswered"
}
}
}
}
}
}
}
}
}
这是查询的一部分。在运行此查询时,我得到的错误为
“类型”:“非法参数异常”,“原因”:文本字段未针对需要每个文档字段数据(如聚合与排序)得操作进行优化,因此默认情况下禁用这些操作.请改用关键字字段.或者,在[direction]上设置fielddata=true,以便通过取消反转倒排索引来加载字段数据.请注意,这可能会占用大量内存.
有人能解释一下吗?
1条答案
按热度按时间cld4siwp1#
Tldr;
如错误状态所示,您正在对文本字段
direction
执行聚合。默认情况下,文本字段不支持聚合,因为它非常昂贵(CPU和内存方面)。
这是解决您问题的三种方法,
1.将Map从文本更改为关键字(将需要re indexing,这是查询数据的最有效方式)
1.更改要添加到此字段的Map
fielddata: true
(灵活,但未优化)1.不要对该字段进行聚合:)