【问题标题】:the result of ElasticSearch aggregation Filter errorElasticSearch 聚合过滤器错误的结果
【发布时间】:2022-01-17 17:44:22
【问题描述】:

我的searchRequest这样,我只想得到两个skill_group (id = 6806,6805)的聚合结果,所以我在查询和聚合中都添加了过滤器。但我仍然得到其他技能组聚合结果。 es版本是7.1

{
    "size": 0,
    "query": {
        "bool": {
            "filter": [{
                "terms": {
                    "skill_group_id": [6806, 6805],
                    "boost": 1.0
                }
            }],
            "adjust_pure_negative": true,
            "boost": 1.0
        }
    },
    "aggregations": {
        "test": {
            "filter": {
                "terms": {
                    "skill_group_id": [6806, 6805],
                    "boost": 1.0
                }
            },
            "aggregations": {
                "SKILLGROUP": {
                    "terms": {
                        "field": "skill_group_id",
                        "size": 10000,
                        "min_doc_count": 1,
                        "shard_min_doc_count": 0,
                        "show_term_doc_count_error": false,
                        "order": [{
                            "_count": "desc"
                        }, {
                            "_key": "asc"
                        }],
                        "collect_mode": "breadth_first"
                    },
                    "aggregations": {
                        "WORKSTATUS": {
                            "terms": {
                                "field": "status",
                                "size": 10000,
                                "min_doc_count": 1,
                                "shard_min_doc_count": 0,
                                "show_term_doc_count_error": false,
                                "order": [{
                                    "_count": "desc"
                                }, {
                                    "_key": "asc"
                                }],
                                "collect_mode": "breadth_first"
                            }
                        }
                    }
                }
            }
        }
    }
}

结果是这样的

【问题讨论】:

  • skill_group_id 是否可能是您文档中的一个数组?
  • 是的,skill_group_id是一个数组。官方文档中没有找到相关说明?

标签: elasticsearch aggregation


【解决方案1】:

如果skill_group_id 是一个数组,那么聚合skill_group_id 将聚合该数组的所有值。

除了过滤器之外,您还可以在 terms 聚合上添加 leverage the include setting,如下所示:

            "SKILLGROUP": {
                "terms": {
                    "field": "skill_group_id",
                    "size": 10000,
                    "include": [6806, 6805],            <--- add this
                    "min_doc_count": 1,
                    "shard_min_doc_count": 0,
                    "show_term_doc_count_error": false,
                    "order": [{
                        "_count": "desc"
                    }, {
                        "_key": "asc"
                    }],
                    "collect_mode": "breadth_first"
                },

【讨论】:

  • 问题解决了。谢谢
  • 太棒了,很高兴它有帮助!
猜你喜欢
  • 1970-01-01
  • 2015-10-06
  • 2020-02-06
  • 1970-01-01
  • 1970-01-01
  • 2015-09-17
  • 2014-02-02
  • 1970-01-01
  • 2015-07-19
相关资源
最近更新 更多