0

我想通过映射ES doc中的某个字段来进行自定义聚合。

我尝试利用术语聚合脚本。有数百个映射,因此我必须将它们全部放入 HashMap:

GET /myindex/_search
{
    "query": {
        "match_all": {}
    },
    "aggs": {
        "myagg": {
            "terms": {
                "script": {
                    "source": "Map m = new HashMap(); m.put('a', 'A'); m.put('b', 'A'); m.put('bb', 'CC'); ... return m.get(doc['foo.keyword'].value)",
                    "lang": "painless"
                }
            }
        }
    },
    "size": 0
}

即使我使用存储的脚本,它也很难看,性能也很差。不知道为什么在我的脚本中执行要花费这么多时间。

我还尝试了脚本化指标聚合。与普通术语聚合相比,它更好但仍然很慢。

有什么方法可以加速映射?(运行时字段除外,因为我的 ES 版本不支持)

4

1 回答 1

1

tldr 如果你有它们,你可以尝试运行时字段,但它们也可能不会很快。在这一点上,这就是 Elasticsearch 中脚本的不幸本质

您最好的选择是 ExplodZe 上面所说的,并在摄取过程中提前完成这项工作,以缩短查询时间

于 2021-09-14T22:23:05.213 回答