使用通配符进行搜索时,Elasticsearch SEARCH-API会忽略某些现有索引



我想检索关于我的弹性搜索数据库中所有可用索引的信息。为此,我向"<elasticsearch_endpoint>日志cfsyslog-*/_search/?format=json";。

请求的正文与此问题无关。我只是简单地过滤一个字段的指定值。我预计api会返回过去30天的所有指数。然而,我只收到一些可用的档案。一些失踪者是:3月3日、2月11日至17日和26日至27日。

但是当我检索所有可用的索引时_CAT";API通过"lt;elasticsearch_endpoint>_cat/index/logs-cfsyslogs-*";我可以看到我期望的所有指数。

我甚至可以通过以下方式指定我在搜索API中查找的确切日期:"lt;elasticsearch_endpoint>logs-cfsyslog-2022.03.03/_search/?format=json";API将返回我指定的索引。

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

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

首先,大小的默认值为10

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

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

第二,由于过滤

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

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

请检查您在响应中获得的hits.total的值,并在此基础上设置size参数的值。请不要以为弹性搜索会返回max 10,000文档。

"hits" : {
"total" : {
"value" : 5,
"relation" : "eq"
}
}

最新更新