弹性搜索可以获取的文档数量有上限(即10000个)。我们可以使用"scroll“来检索所有的记录。有人知道如何在代码中嵌入这一点吗?
这里有一个方法scroll
但是我不知道怎么用它。你能解释一下它的用法吗?
我已经试过“扫描”了。但在Elasticsearch中不再支持它。
# Open the "view" of the index
response = client.search index: 'test', search_type: 'scan', scroll: '5m', size: 10
# Call `scroll` until results are empty
while response = client.scroll(scroll_id: response['_scroll_id'], scroll: '5m') and not
response['hits']['hits'].empty? do
puts response['hits']['hits'].map { |r| r['_source']['title'] }
end发布于 2020-05-26 20:03:47
您的代码应该可以工作,但正如您所提到的,search_type的scan参数不是必需的。我只是用一些测试数据在本地运行了这个程序,它起作用了:
# scroll.rb
require 'elasticsearch'
client = Elasticsearch::Client.new
response = client.search(index: 'articles', scroll: '10m')
scroll_id = response['_scroll_id']
while response['hits']['hits'].size.positive?
response = client.scroll(scroll: '5m', body: { scroll_id: scroll_id })
puts(response['hits']['hits'].map { |r| r['_source']['title'] })
end输出:
$ ruby scroll.rb
Title 297
Title 298
Title 299
Title 300
...您可以随意修改scroll参数的值,但这样的设置也适用于您。
https://stackoverflow.com/questions/61303600
复制相似问题