0

我想检索有关我的 elasticsearch 数据库中所有可用索引的信息。为此,我向“<elasticsearch_endpoint>/logs-cfsyslog-*/_search/?format=json”发送了一个请求。

请求的正文与此问题无关。我只是简单地过滤一个字段的特定值。我希望 api 返回过去 30 天的所有索引。但是,我只收到一些可用的档案。缺少的一些是:3 月 3 日、2 月 11 日至 17 日和 2 月 26 日至 27 日。

但是,当我通过“<elasticsearch_endpoint>/_cat/indices/logs-cfsyslogs-*”使用“_CAT”API 检索所有可用索引时,我可以看到我期望的所有索引。

我什至可以通过“<elasticsearch_endpoint>/logs-cfsyslog-2022.03.03/_search/?format=json”在搜索 API 中指定我要查找的确切日期,API 将返回我指定的索引。

那么,当我在搜索请求中使用通配符“*”时,elasticsearch 为什么或如何不返回例如 2022 年 3 月 3 日的索引?

4

1 回答 1

0

这可能是由于以下原因之一。

首先,size的默认值为10

考虑到您正在调用"<elasticsearch_endpoint>/logs-cfsyslog-*/_search/?format=json"此 API 并且未传递大小参数,因此弹性搜索最多返回 10 个文档作为响应。试试下面的 API 并检查你得到了多少结果以及来自哪个索引。

<elasticsearch_endpoint>/logs-cfsyslog-*/_search/?format=json&size=10000

二、由于过滤

我只是简单地过滤一个字段的特定值。

正如您在问题中提到的,您正在对特定值的一个字段应用过滤器,因此过滤条件可能与其他索引不匹配。

请检查您hits.total在响应中获得的值,并在此基础上设置size参数值。请注意,elasticsearch 会返回max 10,000文档。

"hits" : {
    "total" : {
      "value" : 5,
      "relation" : "eq"
    }
}
于 2022-03-03T13:03:12.450 回答