【发布时间】:2021-08-16 16:01:32
【问题描述】:
我有以下 ES 映射(使用 ES 5.7.6)
{
"properties": {
"machine": {
"properties": {
"name": {
"type": "keyword"
},
"networkInterface": {
"type": "nested",
"include_in_parent": true,
"macAddress": {
"type": "keyword"
},
"name": {
"type": "text",
"fields":{
"raw":{
"type":"keyword"
}
}
}
}
}
}
}
我需要以下 - 使用嵌套字段过滤器获取嵌套字段术语的计算机(父文档)计数。
为了实现它,我在 networkInterface.name 上构建了一个过滤的、非嵌套的聚合。 但过滤器似乎不适用。返回的术语包括那些与过滤器不匹配的术语。
请帮助我理解为什么会出现这种行为,以及是否有办法在 ES 中实现要求。 我已经尝试过以下事情 -
- “networkInterface.name”上的非嵌套过滤术语聚合这具有嵌套过滤器。
"aggregations": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"nested": {
"query": {
"term": {
"networkInterface.name.raw": "Intel(R) 12345L"
}
},
"path": "networkInterface",
"ignore_unmapped": false,
"score_mode": "none",
"boost": 1.0
}
}
]
}
},
"aggregations": {
"interfaceNames": {
"terms": {
"field": "networkInterface.name.raw",
"size": 1000,
"min_doc_count": 1,
"shard_min_doc_count": 0,
"show_term_doc_count_error": false,
"order": [
{
"_count": "desc"
},
{
"_term": "asc"
}
]
}
}
}
}
}
- “networkInterface.name”上的非嵌套过滤术语聚合这具有非嵌套过滤器。
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"networkInterface.name.raw": "Intel(R) 12345L"
}
}
],
"adjust_pure_negative": true,
"boost": 1.0
}
},
"aggregations": {
"interfaceNames": {
"terms": {
"field": "networkInterface.name.raw",
"size": 1000,
"min_doc_count": 1,
"shard_min_doc_count": 0,
"show_term_doc_count_error": false,
"order": [
{
"_count": "desc"
},
{
"_term": "asc"
}
]
}
}
}
}
}
两者都返回相同的结果。我只发布了整个查询的“聚合”部分,上述两种情况下的“查询”都是一样的。
【问题讨论】:
标签: elasticsearch filter nested aggregation