gpt4 book ai didi

performance - ES:使用全局聚合的准联接查询与父子/嵌套查询相比如何?

转载 作者:行者123 更新时间:2023-12-03 00:52:38 25 4
gpt4 key购买 nike

在我的工作中,我遇到了以下在Elasticsearch中进行准联接的模式。我不知道这是一个好主意,从性能 Angular 来看。

模式:

  • 以一对多关系将文档连接到一个索引中。
  • 有点像ES父子,但没有它就实现了。
  • 子文档需要使用名为的字段建立索引。 “my_parent_id”,其值为父ID。
  • 可以在查询父项时使用,事先知道其ID,也可以在同一查询中获得子项。

  • 使用准联接的查询(假设 123是父ID):
    GET /my-index/_search
    {
    "query": {
    "bool": {
    "must": [
    {
    "term": {
    "id": {
    "value": 123
    }
    }
    }
    ]
    }
    },
    "aggs": {
    "my-global-agg" : {
    "global" : {},
    "aggs" : {
    "my-filtering-all-but-children": {
    "filter": {
    "term": {
    "my_parent_id": 123
    }
    },
    "aggs": {
    "my-returning-children": {
    "top_hits": {
    "_source": {
    "includes": [
    "my_child_field1_to_return",
    "my_child_field2_to_return"
    ]
    },
    "size": 1000
    }
    }
    }
    }
    }
    }
    }
    }

    该查询返回:

    父级
  • (作为搜索查询结果)和
  • 其子级(作为聚合结果)。

  • 性能方面,是上面的:
  • 绝对是个好主意
  • 绝对是个坏主意
  • 很难说/取决于?
  • 最佳答案

    It depends ;-)这个主意很好,但是,默认情况下,您可以在top_hits聚合中返回的最大匹配数为100,如果尝试使用1000,则会出现如下错误:

    Top hits result window is too large, the top hits aggregator [hits]'s from + size must be less than or equal to: [100] but was [1000]. This limit can be set by changing the [index.max_inner_result_window] index level setting.



    在错误状态下,您可以通过更改 index.max_inner_result_window索引设置来增加此限制。但是,如果存在默认值,通常有充分的理由。我想暗示一下,增加太多可能不是一个好主意。

    因此,如果您的父文档中的 child 少于100个,为什么不这样做,否则我将认真考虑采用另一种方法。

    关于performance - ES:使用全局聚合的准联接查询与父子/嵌套查询相比如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50883292/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com