ES 默认的窗口大小为 10000 , 如果预计的总条数大于窗口大小, 就会报如下错误:
"Result window is too large, from + size must be less than or equal to: [25000] but was [30040]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level setting.
因为 ES 是设计用于搜索, 而不是用于存储数据的. 10000 条足以满足大部分业务需求. 而且ES 搜索不是简单的查询前10000条, 而是呈指数倍的搜索, 所以不建议修改这个窗口大小.
如果业务上有需求, 那就需要谨慎修改这个参数.
修改窗口大小:
put http://xxx/_settings
{
"index" : {
"max_result_window" : 25000
}
}
ES 5.X 在修改这个参数后, 就可以直接看到效果.
但是在 ES 7.X下 (没有使用过 6.X, 不了解), 那个 total 却还一直是 10000.
total 返回不正确, 但是还是可以查询到结果
可以看到在 ES 7.X 下, 虽然把 max_result_window
修改成了 25000, 但是 total 仍然是 10000. 这是因为返回的是一个大概的值. 如果需要返回准确的条数, 需要在查询条件中添加:
"track_total_hits": true
但是这个参数是要牺牲性能为代价的, 所以还是要谨慎使用
具体参考: track_total_hits
网友评论