首页 > 解决方案 > 是否有一个 API 可以根据您的查询搜索返回多少个结果?

问题描述

是否有一个 API 可以根据您的查询搜索返回多少个结果/日志?或者像 NEST 的内置功能,它会告诉你有多少结果,比如 ie 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 个结果时数组是空的。搜索接口

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

标签: c#elasticsearchnestelasticsearch-dsl

解决方案


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

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

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

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

要在 ElasticSearch 中对大型结果集进行分页,请创建一个时间点并使用参数将其传递给搜索 APIsearch_after


推荐阅读