我需要在Elasticsearch中按7个字段进行汇总,然后检索数据TopHits并进行一些计算SumAvg。没有太多的循环/递归,是否有可能获得最新的点击量和计算结果?

最佳答案

根据Elasticsearch文档:

“术语汇总不支持从同一文档的多个字段中收集术语。原因是termsagg不会自行收集字符串术语值,而是使用全局序号来生成列表中所有唯一值的列表全局序数可显着提升性能,而跨多个 Realm 则无法实现。

您可以使用两种方法在多个字段中执行术语汇总:

脚本
使用脚本从多个字段检索术语。这将禁用全局序数优化,并且比从单个字段中收集术语要慢,但是它使您可以灵活地在搜索时实现此选项。

copy_to字段
如果您提前知道要从两个或多个字段中收集术语,请在映射中使用copy_to在索引时间创建一个新的专用字段,其中包含两个字段中的值。您可以在单个字段上进行汇总,这将受益于全局序数优化。”

资料来源:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#_multi_field_terms_aggregation

编辑:如果您使用copy_to字段,则没有理由对其进行索引,因此您无需对其进行分析,为此,您只需更改其映射即可:

"metaFieldName" => [
    "type" => "string",
    "index" => "not_analyzed"
]

关于elasticsearch - Elasticsearch按7个字段进行聚合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38793759/

10-12 16:32