在Elasticsearch中,一次查询只能得到一次独立的结果,在分页中这是很不方便的,当用Elasticsearch进行第n页查询的时候,Elasticsearch内部是查询了从n页的所有数据,只是在返回的时候抛弃了前面的n-1页的内容。这样对查询一个大量数据的时候是非常不方便的。但Elasticsearch提供了滚动API来解决此问题,这有点像数据库中的游标。
滚动查询请求
滚动是不适合实时用户请求,而是适合处理大量的数据,例如为了重建一个索引到一个新的索引中。
官方客户端只支持Perl和Python。
注意:从 scroll 请求返回的结果反映了在查询发生时刻的索引状态,就像一个快照。后续的对文档的改动(索引、更新或者删除)都只会影响后面的搜索请求。
为了使用 scroll,在第一次搜索请求的查询中指定 scroll 参数,它告诉 Elasticsearch 需要保持搜索的上下文环境多长时间。例如:
滚动查询请求
滚动是不适合实时用户请求,而是适合处理大量的数据,例如为了重建一个索引到一个新的索引中。
官方客户端只支持Perl和Python。
注意:从 scroll 请求返回的结果反映了在查询发生时刻的索引状态,就像一个快照。后续的对文档的改动(索引、更新或者删除)都只会影响后面的搜索请求。
为了使用 scroll,在第一次搜索请求的查询中指定 scroll 参数,它告诉 Elasticsearch 需要保持搜索的上下文环境多长时间。例如:
请求:POST http://localhost:9200/secilog/log/_search?scroll=1m&pretty
参数:
{
"query": {
"term": {
"message": "text"
}
}
}
Time Units说明
y Year
M Month
w Week
d Day
h Hour
m Minute
s Second
返回的结果:
{
"_scroll_id" : "cXVlcnlBbmRGZXRjaDsxOzExMjo1azRqYldqOVJmYTdIdlVWSk94X2FnOzA7",
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 0.4232868,
"hits" : [ {
"_index" : "secilog",
"_type" : "log",
"_id" : "10",
"_score" : 0.4232868,
"_source" : {
"type" : "file",
"message" : "secilog is a log real-time analyse software,it's full text search is based on Elasticsearch "
}
} ]
}
}
从返回值中可以看出上面的请求结果中包含一个 scroll_id,这个 ID 可以被传递给 scroll API 来检索下一个批次的内容。在下一次查询中的实例:
请求:POST http://localhost:9200/_search/scroll?pretty
参数:
{
"scroll" : "1m",
"scroll_id" : "cXVlcnlBbmRGZXRjaDsxOzExMjo1azRqYldqOVJmYTdIdlVWSk94X2FnOzA7"
}
返回的结果:
{
"_scroll_id" : "cXVlcnlBbmRGZXRjaDsxOzExMzo1azRqYldqOVJmYTdIdlVWSk94X2FnOzA7",
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 0.4232868,
"hits" : [ ]
}
}
每一次调用scroll查询返回下一批的结果,直到返回为空("hits" : [ ]),表示查询完成。
注意:第一次搜索请求和每个后续的滚动请求返回一个新的 _scroll_id,只有最新的 _scroll_id 才能被使用。
如果请求指定了聚合(aggregation),只有第一次搜索的返回结果才会包含聚合结果。
当使用_doc排序查询的时候,滚动的效率是最高的,当你向遍历所有的文档,且无顺序要求,这是效率最高的方式:
请求:POST localhost:9200/_search?scroll=1m
参数:
{
"sort": [
"_doc"
]
}
搜索的时效性
滚动scroll 参数告诉Elasticsearch应保持多长时间的搜索。这个值并不需要长到可以处理所有的数据,只要够处理前一批次结果的时间。每一个滚动请求设置一个新的有效时间。
一般来说,合并过程优化的背景是通过合并小段来创建一个新的大段来优化索引,然后删除小段。在执行滚动期间仍可以进行索引优化,但在打开搜索上下文时当小段仍然在使用候的时候会阻止小段的删除。这就是为什么后来对文档的改变不会影响滚动搜索请求的结果。
提示:保持较旧的段,意味着需要更多的文件句柄。确保在节点中已配置访问文件句柄的参数足够用。
你可以通过stats API检查打开了多少搜索上下文。
请求:GET http://localhost:9200/_nodes/stats/indices/search?pretty
清除滚动接口
当滚动超时的时候会自动删除搜索上下文,然而保持滚动打开会产生成本,所以 scrolls 当scroll不再被使用的时候需要用 clear-scroll 显式地清除。
请求:DELETE localhost:9200/_search/scroll
参数:
{
"scroll_id" : ["cXVlcnlBbmRGZXRjaDsxOzExMzo1azRqYldqOVJmYTdIdlVWSk94X2FnOzA7"]
}
可以同时清除多个id
{
"scroll_id" : ["cXVlcnlBbmRGZXRjaDsxOzExMzo1azRqYldqOVJmYTdIdlVWSk94X2FnOzA7","qYldqOVJmYTdIdl"]
}
或者使用_all参数清除所有id
DELETE localhost:9200/_search/scroll/_all
分享到:
相关推荐
使用escroll消除了编写定制滚动搜索脚本以从常规elasticsearch查询返回每个结果的耗时任务。 它是用于从Elasticsearch提取大数据的安全且可重复使用的工具。 用法 争论 旗帜 例子 描述 -url ...
Elasticsearch滚动流 Elasticsearch Scroll查询结果作为Node.js可读流。 此模块可与官方Elasticsearch Node.js客户端一起使用: (新的Elasticsearch js API) (旧的Elasticsearch js API)原料药...
smoothScroll-Es5.js是一款js平滑的页面滚动效果插件。通过它可以制作页面锚链接之间的平滑滚动效果,和平滑的返回页面顶部效果等。
142 3.5.2 _default_映射 143 3.5.3 动态字段映射 143 3.5.4 动态模板 145 3.5.5 重写默认模板 148 3.6 小结 148 第4章 搜索 149 4.1 深入搜索 149 4.1.1 搜索方式 149 4.1.2 重新评分 153 4.1.3 滚动查询请求 155 ...
Elasticsearch是一个基于Lucene的分布式全文搜索引擎,提供灵活且高效的搜索和分析功能。通过HTTP请求和客户端库,用户可以索引和搜索文档,执行复杂查询,进行数据分析,并享受高亮显示等特性。其高级功能如复合...
弹性搜索滚动重启 我在修改了文件
Elasticsearch是一个强大的开源搜索引擎,它为数据的存储、搜索和分析提供了高效、可扩展的解决方案。然而,尽管Elasticsearch本身具有许多优势,但在实际使用过程中,用户可能会遇到各种问题和挑战。为了帮助用户...
elasticsearch_rollingrestart Ansible Playbook 通过禁用分片分配并依次重新启动服务器来执行弹性搜索集群的滚动重启。
8.28_上机动手实战基于scoll技术滚动搜索大量数据如果一次性要查出来比如10万条数据,那么性能会很差,此时一般会采取用scoll滚动查询,一批一批的查,直
支持切片滚动(elasticsearch 5.0 +) 支持在后台运行 通过随机化源文档ID生成测试数据 支持重命名文件名 支持统一文件类型名称 支持人员指定要从源返回的_source字段 支持指定查询字符串查询以过滤数据源 在批量...
1-创建, 2-阅读, 3-更新, 4-删除, 5-读取多个6-插入多个7-搜索, 8-全部搜索, 9-使用滚动阅读, 10-获取指定字段, 11-必须查询12-应该查询。 例如:java -jar ESCrud-1.0.0.jar 1 3(或)java -Xms250
我们开始构建dejavu的目标是为Elasticsearch创建具有100%客户端呈现的现代Web UI(无需重新加载页面,无限滚动,过滤视图,实时更新,搜索UI构建器),以便可以轻松地将其作为运行, 或。 从v1.0开始,dejavu是...
es-reindex-用于复制ElasticSearch索引的简单ruby脚本 简单的ruby脚本,用于复制和重新索引ElasticSearch索引,复制索引设置和映射。 在滚动过程中将显示进度和时间估计。 要求 需要Ruby 1.8.6或更高版本,为方便...
Linux / OSX功能使用Elasticsearch切片滚动API快速获取数据。 使用libcurl和RapidJSON在现代C ++中编写。 分发为单个微小二进制文件。 Performance Blaze与其他Elasticsearch转储工具相比。 索引具有〜350万行,大小...
我们开始构建 dejavu 的目标是为 Elasticsearch 创建一个现代 Web UI(无页面重新加载、无限滚动、过滤视图、实时更新、搜索 UI 构建器),具有 100% 客户端渲染,以便人们可以轻松地将其作为托管应用程序运行在 ...
您可以使用此项目中包含的准备好的Elasticsearch和Kibana服务器(在这种情况下,请跳至第6点),或者如果要滚动自己的服务器版本,请执行以下操作: 安装 安装 运行doc文件夹中的setup.sh文件 在浏览器中打开...
JS平滑的页面链接滚动效果插件smoothScroll-Es5.js.zip
它必须包含: host -主机,其中Elasticsearch正在运行port -Elasticsearch端口-默认9200 query_window滚动窗口大小,以秒为单位。 默认30秒query_string查询字符串cooldown_multiplier成功命中后要冷却的查询窗口的...
此脚本从 Elasticsearch 滚动 API 检索以从源和多处理检索以在目标服务器上建立索引。 它使用 RequestsHttpConnection 进行 gzip 压缩。安装 pip install ese对于勇敢... pip install -e git+...