我有一个聚合查询-
POST /my-index/_search
{
"query": {
...
"filter": [
{
"terms": {
"venueId.keyword": [
"ID1",
"ID2"
]
}
}
]
}
},
"from": 0,
"size": 0,
"aggs": {
"venue": {
"terms": {
"field": "venueId.keyword"
},
"aggs": {
"multi_agg": {
"terms": {
"field": "networkName.keyword"
}
}
}
}
}
}
如果我有两个网络(对于同一地点),名称分别为XXX
和xxx
。聚合输出计数为2个网络且仅有1个name - xxx
,例如-
"aggregations": {
"venue": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "ID1",
"doc_count": 5,
"multi_agg": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "xxx",
"doc_count": 2
}...
上面的原因是定义为小写的映射-
GET /my-index/_mapping/field/networkName.keyword
{
"my-index": {
"mappings": {
"_doc": {
"networkName.keyword": {
"full_name": "networkName.keyword",
"mapping": {
"keyword": {
"type": "keyword",
"ignore_above": 256,
"normalizer": "lowercase"
}
}
}
}
}
}
}
由于向后兼容性,无法更新设置。请告知是否可能,以及如何在聚合查询期间覆盖映射,以便在输出2中获得计数为1且名称为XXX
和xxx
的不同键。
发布于 2020-01-23 02:40:23
映射一旦创建,就不能被覆盖,您可以使用旧索引的映射创建新索引,只需确保在为新索引添加映射时使用正确的数据类型更新各自的字段
Rest很简单,只需在使用所需映射创建新索引后运行此代码
POST _reindex
{
"source": {
"index": "old_index"
},
"dest": {
"index": "new_index"
}
}
发布于 2020-02-05 21:48:31
我们已经找到了一种方法,可以在不更改架构或重新索引的情况下返回实际的。只需更改查询的agg部分-
"aggs":{
"venue":{
"terms":{
"field":"venueId.keyword"
},
"aggregations":{
"top_client_hits":{
"top_hits":{
"version":false,
"explain":false,
"_source":{
"includes":[
"networkId",
"networkName"
],
"excludes":[
]
}
}
}
}
}
}
https://stackoverflow.com/questions/59855123
复制相似问题