如何让 elasticsearch 一次返回超过 10000 个结果?ES 似乎不遵守 index.max_result



我尝试根据文档创建一个索引,然后使用:

PUT indexname/_settings
{
"index.max_result_window": 20000
}

当我获得设置时,我看到设置已设置,但每当我对其进行查询时,我都会不断获得 10,000 个结果。我尝试使用设置创建索引,但这也不起作用。

我也尝试在进行搜索查询时包含 11,000 的大小参数,但它仍然没有返回。

我该怎么做才能使结果返回大于 10,000?

是否有某些设置必须应用于节点,或者是否应用于索引的其他设置才能使其工作?

我使用的是最新版本 7.3.1。

您可以使用滚动 API 在弹性搜索中检索超过 10000 条记录,因为默认情况下,10000 是返回的文档数的上限。

Scroll API基本上所做的是它以块的形式获取文档,其大小可以由我们自定义。我们可以通过使用大小和时间值来控制返回的文档集的大小。实际调用采用以下形式:

第一次呼叫

在第一次调用以获取文档时,您可以给出大小(例如 5000 个文档(和滚动参数,指定搜索上下文超时的时间(以分钟为单位(。

POST /index/type/_search?scroll=1m
{
"size": 5000,
"query": {
"match" : {
"title" : "Something"
}
}
}

第二次呼叫(以及所有其他后续呼叫(

在第一个调用的响应中,我们得到一个可用于检索下一块文档的_scroll_id。

POST /_search/scroll 
{
"scroll" : "1m", 
"scroll_id" : "XGSKJKSVNNNNNDDDD1233BBNMBBNNN===" 
}

另外,请检查此答案。

如果您只是在 JSON 响应中查找命中数而不是实际文档,请在搜索请求中添加 "track_total_hits": true 以获取实际的总命中数。

开机自检索引名/_search { "从": 0, "大小": 0, "track_total_hits":真 }

不再建议使用滚动 API。目前对超过10k个结果进行分页的方式是ElasticSearch的搜索API。

最新更新