【问题标题】:Early return of results in elasticsearchelasticsearch 提前返回结果
【发布时间】:2016-02-02 00:46:40
【问题描述】:

是否可以让 elasticsearch 提前终止其搜索并只返回它找到的前 N ​​个匹配项?

我有一个庞大的数据集,并且注意到当我发出一个命中所有记录的查询时,返回前 10 个结果的时间要比查询只命中少量结果的时间长得多。我真的不需要完整的结果计数,也不关心返回的 10 个结果是否是“最佳”匹配项。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    除了在 Richa 的回答中设置大小之外,您可能还想检查两个following request parameters,即:

    • timeout:允许您指定最大执行时间(以毫秒为单位)。 ES 将在超时后立即响应并返回它目前得到的结果。
    • terminate_after: 每个分片的最大文档数

    【讨论】:

    • 我认为这可能是答案,虽然令人惊讶的是 terminate_after 并没有像我想象的那样提高性能,但它可能与正在缓存的查询(或正在缓存的索引文件)有关由操作系统)从之前运行过。
    • 如果您有 5 个分片(默认设置)并希望在响应中获得 5 个命中,您可能想尝试terminate_after=1,这应该可以解决问题。
    【解决方案2】:

    您可以使用size

    GET /index/type/_search?size=5
    

    【讨论】:

    • 这对返回所需的时间没有影响(无论如何对我来说)。 “大小”指定返回的结果数,但 elasticsearch 仍然报告完整的命中数(可用匹配数),我认为这意味着它实际上仍在搜索整个数据库,而不是在找到前 5 个时停止。
    猜你喜欢
    • 2017-11-14
    • 2023-03-26
    • 2021-05-17
    • 2018-06-26
    • 2021-03-04
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多