首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在rails中检索elasticsearch中的所有记录

如何在rails中检索elasticsearch中的所有记录
EN

Stack Overflow用户
提问于 2020-04-19 19:29:36
回答 1查看 379关注 0票数 1

弹性搜索可以获取的文档数量有上限(即10000个)。我们可以使用"scroll“来检索所有的记录。有人知道如何在代码中嵌入这一点吗?

这里有一个方法scroll

https://github.com/elastic/elasticsearch-ruby/blob/4608fd144277941003de71a0cdc24bd39f17a012/elasticsearch-api/lib/elasticsearch/api/actions/scroll.rb

但是我不知道怎么用它。你能解释一下它的用法吗?

我已经试过“扫描”了。但在Elasticsearch中不再支持它。

代码语言:javascript
复制
# 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
EN

回答 1

Stack Overflow用户

发布于 2020-05-26 20:03:47

您的代码应该可以工作,但正如您所提到的,search_typescan参数不是必需的。我只是用一些测试数据在本地运行了这个程序,它起作用了:

代码语言:javascript
复制
# 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

输出:

代码语言:javascript
复制
$ ruby scroll.rb                                                                                         
Title 297                                                                                                
Title 298                                                                                                
Title 299                                                                                                
Title 300
...

您可以随意修改scroll参数的值,但这样的设置也适用于您。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61303600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档