【问题标题】:Elasticsearch aggregation by 7 fields由 7 个字段组成的 Elasticsearch 聚合
【发布时间】:2018-02-23 23:22:55
【问题描述】:

我需要通过elasticsearch中的7个字段进行聚合,然后检索数据TopHits并进行一些计算SumAvg。是否有可能在没有很多循环/递归的情况下获得最新的命中和计算桶?

【问题讨论】:

    标签: elasticsearch aggregate


    【解决方案1】:

    根据 Elasticsearch 文档:

    “terms 聚合不支持从同一文档中的多个字段收集术语。原因是 termsagg 本身不收集字符串术语值,而是使用全局序数来生成所有唯一的列表字段中的值。全局序数会带来重要的性能提升,而这在多个字段中是不可能的。

    您可以使用两种方法跨多个字段执行术语聚合:

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

    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"
    ]
    

    【讨论】:

    • 太好了,谢谢。但是,我可以在没有分析器的情况下将该字段存储为一个字符串吗?
    • 谢谢,我解决了这个问题。我只是手动进行 copy_to :) 这很酷,因为我在 2 种类型中进行了 2 次聚合,并使用一个聚合桶中的桶键从第二个聚合中获取聚合桶,差别不大。
    • 现在我正在考虑如何进行排序。这个stackoverflow.com/questions/38894862/…
    猜你喜欢
    • 2016-11-23
    • 1970-01-01
    • 2022-01-14
    • 2020-02-18
    • 2014-08-24
    • 2014-05-12
    • 2016-09-24
    • 2015-07-30
    • 1970-01-01
    相关资源
    最近更新 更多