【问题标题】:Is there an API that will return how many results there are based your query search?是否有一个 API 可以根据您的查询搜索返回多少结果?
【发布时间】:2021-07-12 18:10:45
【问题描述】:

是否有一个 API 可以根据您的查询搜索返回多少个结果/日志?或者像 NEST 的内置功能一样,它会告诉您有多少结果,例如 count?因为我有一个 NEST 查询搜索,它将执行以下操作:

var response = await _elasticClient.SearchAsync<EsSource>(s => s
                  .Size(3000) // must see about this
                  .Source(src => src.Includes(i => i
                                    .Fields(f => f.timestamp,
                                            fields => fields.messageTemplate,
                                            fields => fields.message)))
                  .Index("customer-simulation-es-app-logs*")
                  .Query(q => +q
                      .DateRange(dr => dr
                          .Field("@timestamp")
                              .GreaterThanOrEquals("2021-06-07T17:13:54.414-05:00")
                              .LessThanOrEquals(DateTime.Now))));

但我意识到搜索 api 不能超过 10,000 个结果,因为当您分页超过 10,000 个结果时数组是空的。 search api

所以,如果有一个 api 或一个功能可以让您知道基于您的索引有多少结果,或者您是否像我上面所说的那样进行每月查询搜索;知道这个数字后,我可以创建一个 forloop 来对每个文档进行分页,比如我可以查看前 10,000 个点击,然后为接下来的 10,000 个点击进行下一次迭代,依此类推。希望这是有道理的,如果需要我会澄清。

【问题讨论】:

    标签: c# elasticsearch nest elasticsearch-dsl


    【解决方案1】:

    是否有 API 可以根据您的查询搜索返回多少个结果?

    我不知道有任何 ES API 会返回 exact 计数。在高值时,它变得非常近似。

    当您分页超过 10,000 个结果时,数组为空。

    首先,返回 >10k 的搜索结果是非常不寻常的。听起来您正在尝试将 ElasticSearch 用作数据库,您可以为 一些 事情做这件事,但不要依赖 ACID 或类似的东西。

    要在 ElasticSearch 中翻阅大型结果集,请创建一个 point in time 并将其传递给 search API with the search_after parameter

    【讨论】:

    • 我明白了!是的,我正在将日志写入 ElasticSearch,然后在我的控制台应用程序中读取这些日志并将它们发送到我的数据库。由于没有 API 可以根据您的查询告诉您结果的确切数量,因此在创建 PIT id 并将其传递给使用 search_after 参数的搜索 api 之后,设置的命中数是多少它按分页返回?只是想知道,因为我想计划遍历整个搜索以查看整个日志。我会上传我目前拥有的。
    • “我不知道有任何 ES API 会返回精确计数。在高值时,它变得非常近似。” - 可以通过指定track_total_hits=true 检索与搜索查询匹配的确切 文档数。如果没有这个,计数将精确到默认值 (10,000)。 hits.total 中的 relation 指示实际计数与 value 字段中返回的值的关系。更多详情请参阅博文elastic.co/blog/…
    • @MarkCo:你可以请求一个特定的数字,但是返回什么取决于集群。由于您无论如何都要上传所有这些,因此页面大小并不重要。
    • 很高兴知道这一点。是的,我正在阅读track_total_hits=true 并了解到它只能准确计数到 10,000。那么超过 10,000 可以安全地假设它是一个正确的近似值吗?阅读这篇文章elastic.co/guide/en/elasticsearch/reference/7.13/… 以及您所说的内容。
    • @StephenCleary 请求如同使用.Size()?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 2015-02-26
    • 2021-04-01
    相关资源
    最近更新 更多