gpt4 book ai didi

elasticsearch - ES : Bucket agg + top_hits + scroll? 如何返回桶中的所有命中(超过 `size+from` 最大值)?

转载 作者:行者123 更新时间:2023-12-02 22:23:44 26 4
gpt4 key购买 nike

我正在运行一个大号的 elasticsearch 过滤器。 (约 1000 万次点击)结果。我的 from+size 最大值是默认值(10,000 次匹配)。我想基于一个字段进行聚合,并返回所有桶中过滤器的所有命中(不仅仅是计数)。

我知道我可以使用 top_hits 来获取每个存储桶 (ElasticSearch: retriving documents belonging to buckets) 中的实际文档,但我认为我需要滚动以获取所有文档(以获得超过前 10000 个)命中)。我可以滚动和聚合吗? scroll api 在我使用聚合运行它时失败。

目前,我有两个解决方案似乎都不是那么好:

  1. 运行多个过滤器查询,比如每个桶 1 个(这样我就不需要使用聚合 + top_hits 命令)。 (对我的申请来说太慢了)

  2. 运行 1 个大过滤器查询,不聚合,但使用滚动 API 获取所有匹配项。然后我会把它们放在主机上的相应存储桶中。 (好吧,但似乎 ES 是为我将这些聚合到桶中而设置的,并且有更多资源来完成这项工作)

有没有更好的方法来处理这个问题?

这似乎与此有关:( Paging elasticsearch aggregation results )虽然没有提到滚动 api(除非那是他们所说的分页的意思?)

最佳答案

我认为您的用例不受支持。聚合专门“丢弃”文档中的其他信息。 Top hits只是为了返回每个桶中与您的查询匹配的最相关的命中。这更像是一个评分功能而不是文档检索功能,即热门点击聚合并不意味着返回存储桶中的所有文档。

如果您无论如何都需要所有文档,为什么不自己汇总结果呢?这是您的第二个选项,对我来说似乎是最佳选项。

SO post您引用的描述了使用 exclude value filter in terms aggregations 在聚合中进行分页的解决方法.它不使用滚动 api。我也不认为它对你有帮助。

最后,Elasticsearch 术语聚合通常有 errors due to shard sizing .如果您无论如何都需要这些文档,您可以通过在应用程序中执行分桶来获得完全准确的聚合——您将不得不访问每个文档,这可能比 ES 可以做的慢,但您也会得到不同的结果。

如果您有更多关于您的用例的详细信息,也许我们中的一个人可以提供更好的建议。例如,为什么您需要所有文档以及存储桶计数?

关于elasticsearch - ES : Bucket agg + top_hits + scroll? 如何返回桶中的所有命中(超过 `size+from` 最大值)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39713025/

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