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

问题描述

是否有一个 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 个结果进行分页时数组是空的。 http://sqlfiddle.com/#!9/32ca4/18

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

解决方法

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

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

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

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...