ruby-on-rails - 如何从rails中的elasticsearch中检索所有记录
问题描述
您可以从弹性搜索中获得的文档数量有上限(即 10000)。我们可以使用“滚动”来检索所有记录。有谁知道如何将其嵌入代码中?
有这个方法滚动
但我不知道如何使用它。你能解释一下如何使用它吗?
我试过“扫描”。但 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
解决方案
您的代码应该可以工作,但正如您提到的那样,scan
参数 forsearch_type
不是必需的。我只是用一些测试数据在本地运行它并且它有效:
# 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
参数的值,但是这样的东西也应该适合您。
推荐阅读
- react-native - 是否可以使用 UI Kitten + React Native 实现 Roboto Medium-500 粗细字体构建应用程序?
- javascript - cytoscape.js 的自定义渲染器问题
- java - 如何在Java中从jsonString的引号内转义引号
- erp - 为什么 Dolibarr 返回一个纯文本对象而不是预期的视图?
- java - 如何在 PdfButtonFormField 中将签名 PDF 设置为签名 - Itext7 Java
- postgresql - psql 不适用于某个特定用户
- python - 如何为 python tkinter 条目分配变量?
- android - 颤振:[致命错误] asm-tree-6.0.pom:2:1:序言中不允许的内容
- c# - 清理 ASP.NET Core 的自动 400 响应
- tomcat - 为什么使用 tomcat 进行数据库连接池有两种选择(tomcat-dbcp 和 tomcat-jdbc)?