【发布时间】:2018-02-23 23:22:55
【问题描述】:
我需要通过elasticsearch中的7个字段进行聚合,然后检索数据TopHits并进行一些计算Sum和Avg。是否有可能在没有很多循环/递归的情况下获得最新的命中和计算桶?
【问题讨论】:
我需要通过elasticsearch中的7个字段进行聚合,然后检索数据TopHits并进行一些计算Sum和Avg。是否有可能在没有很多循环/递归的情况下获得最新的命中和计算桶?
【问题讨论】:
根据 Elasticsearch 文档:
“terms 聚合不支持从同一文档中的多个字段收集术语。原因是 termsagg 本身不收集字符串术语值,而是使用全局序数来生成所有唯一的列表字段中的值。全局序数会带来重要的性能提升,而这在多个字段中是不可能的。
您可以使用两种方法跨多个字段执行术语聚合:
脚本 使用脚本从多个字段中检索术语。这会禁用全局序数优化,并且会比从单个字段中收集术语要慢,但它使您可以在搜索时灵活地实施此选项。
copy_to 字段 如果您提前知道要从两个或多个字段中收集术语,则在映射中使用 copy_to 在索引时创建一个新的专用字段,其中包含来自两个字段的值。您可以在这个单一字段上进行聚合,这将受益于全局序数优化。”
编辑:如果您使用 copy_to 字段,则没有理由对其进行索引,因为您无需对其进行分析,为此您只需更改其映射:
"metaFieldName" => [
"type" => "string",
"index" => "not_analyzed"
]
【讨论】: