您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
elasticSearch基数聚合-非关键字段(用户自定义字段)
发布时间:2021-09-02 22:36:37编辑:雪饮阅读()
那上一篇呢,主要是了解了elasticSearch基数聚合的关键字段,那么接下来就是对于用户自定义字段,也就是我们索引文档时候自定义的json中的字段的基数聚合。
要想实现这种自定义字段的聚合需要在我们的索引中启用fielddata为true,对于某个字段。
若对于某个字段不启用fielddata为true,然后直接进行自定义字段的基数聚合,则有可能会出现如下面这样的错误:
Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [name] in order to load field data by uninverting the inverted index. Note that this can use significant memory.
那么这里假比我要对name字段进行聚合。
首先我们这里等下要搜索的索引中都要开启fielddata为true对于这个name字段,那么这里假定schools_gov索引还没有对name字段开启fielddata,则开启fielddata请求如:
请求正文:
{
"properties": {
"name": {
"type": "text",
"fielddata": true
}
}
}
响应正文:
{
"acknowledged": true
}
这里的_mapping是固定的,并非是你的映射名称
那么接下来我就可以对这个name进行基数聚合了。
一个请求如:
请求正文:
{
"aggs": {
"name_count": {
"cardinality": {
"field": "name"
}
}
}
}
响应正文:
{
"took": 41,
"timed_out": false,
"_shards": {
"total": 2,
"successful": 2,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 7,
"relation": "eq"
},
"max_score": null,
"hits": []
},
"aggregations": {
"name_count": {
"value": 6
}
}
}
关键字词:elasticSearch,基数聚合,自定义字段,非关键字段