Elasticsearch(ES)的滚动搜索与批量操作
1. 概述
今天我们来聊一下Elasticsearch(ES)的滚动搜索与批量操作。
2. Elasticsearch(ES)的滚动搜索
2.1 概述
滚动搜索我们经常能够用到,例如:推荐列表,此类列表通常不需要分页,而是一直上滑刷新。
滚动搜索的原理是根据固定的排序规则先加载一部分数据,当用户再刷新时,从上次加载的最后一条数据的位置再加载同样数量的数据,下一次刷新同理。
2.2 第一次搜索请求
第一次搜索的请求比较特殊,与之后的搜索请求的url和参数不同。
参数中的 scroll=1m,是指滚动搜索的下一次搜索,必须在1分钟之内。
size是每次滚动显示的条数。
POST http://192.168.1.8:9200/index_user/_search?scroll=1m
参数:
{
"query": {
"match_all": {}
},
"sort": [
{
"age": "desc"
}
],
"size": 1
}
响应:
{
"_scroll_id": "FGluY2x1ZGVfY29udGV4dF91dWlkDnF1ZXJ5VGhlbkZldGNoBRZhVFFQSDRqeVJQZXlNZ2U1VXFyaHZBAAAAAAAAAHAWejhoNTc2clNScU9NWlpHQ3A4VXJGURZhVFFQSDRqeVJQZXlNZ2U1VXFyaHZBAAAAAAAAAHEWejhoNTc2clNScU9NWlpHQ3A4VXJGURZhVFFQSDRqeVJQZXlNZ2U1VXFyaHZBAAAAAAAAAG8WejhoNTc2clNScU9NWlpHQ3A4VXJGURZhVFFQSDRqeVJQZXlNZ2U1VXFyaHZBAAAAAAAAAG0WejhoNTc2clNScU9NWlpHQ3A4VXJGURZhVFFQSDRqeVJQZXlNZ2U1VXFyaHZBAAAAAAAAAG4WejhoNTc2clNScU9NWlpHQ3A4VXJGUQ==",
"took": 7,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 3,
"relation": "eq"
},
"max_score": null,
"hits": [
{
"_index": "index_user",
"_type": "_doc",
"_id": "2",
"_score": null,
"_source": {
"user_id": "2",
"name": "夏维尔",
"login_name": "xwe",
"age": 28,
"birthday": "1992-06-06",
"desc": "我是一名高级开发经理,每天坐地铁上班,在北京住,从不堵车",
"head_url": "https://www.zhuifengren.cn/img/xwe.jpg"
},
"sort": [
28
]
}
]
}
}
2.3 之后的搜索
参数中 scroll_id 是第一次搜索返回的。
POST http://192.168.1.8:9200/_search/scroll
参数:
{
"scroll_id": "FGluY2x1ZGVfY29udGV4dF91dWlkDnF1ZXJ5VGhlbkZldGNoBRZhVFFQSDRqeVJQZXlNZ2U1VXFyaHZBAAAAAAAAAHAWejhoNTc2clNScU9NWlpHQ3A4VXJGURZhVFFQSDRqeVJQZXlNZ2U1VXFyaHZBAAAAAAAAAHEWejhoNTc2clNScU9NWlpHQ3A4VXJGURZhVFFQSDRqeVJQZXlNZ2U1VXFyaHZBAAAAAAAAAG8WejhoNTc2clNScU9NWlpHQ3A4VXJGURZhVFFQSDRqeVJQZXlNZ2U1VXFyaHZBAAAAAAAAAG0WejhoNTc2clNScU9NWlpHQ3A4VXJGURZhVFFQSDRqeVJQZXlNZ2U1VXFyaHZBAAAAAAAAAG4WejhoNTc2clNScU9NWlpHQ3A4VXJGUQ==",
"scroll":"1m"
}
响应:
{
"_scroll_id": "FGluY2x1ZGVfY29udGV4dF91dWlkDnF1ZXJ5VGhlbkZldGNoBRYxMDBJOHhrUFJwdUdkUHJpbE52VjlBAAAAAAAAAG8WejhoNTc2clNScU9NWlpHQ3A4VXJGURYxMDBJOHhrUFJwdUdkUHJpbE52VjlBAAAAAAAAAHEWejhoNTc2clNScU9NWlpHQ3A4VXJGURYxMDBJOHhrUFJwdUdkUHJpbE52VjlBAAAAAAAAAHIWejhoNTc2clNScU9NWlpHQ3A4VXJGURYxMDBJOHhrUFJwdUdkUHJpbE52VjlBAAAAAAAAAHAWejhoNTc2clNScU9NWlpHQ3A4VXJGURYxMDBJOHhrUFJwdUdkUHJpbE52VjlBAAAAAAAAAG4WejhoNTc2clNScU9NWlpHQ3A4VXJGUQ==",
"took": 12,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 6,
"relation": "eq"
},
"max_score": null,
"hits": [
{
"_index": "index_user",
"_type": "_doc",
"_id": "1",
"_score": null,
"_source": {
"user_id": "1",
"name": "僵尸猎手",
"login_name": "jsls",
"age": 25,
"birthday": "1990-03-01",
"desc": "我是一名房产经纪人,现在转行了,目前是一名运输工人",
"head_url": "https://www.zhuifengren.cn/img/jsls.jpg"
},
"sort": [
25
]
}
]
}
}
3. Elasticsearch(ES)的文档批量操作
3.1 批量依据ID查询文档
POST http://192.168.1.8:9200/index_user/_doc/_mget
参数:
{
"ids":["1", "3"]
}
3.2 批量新增文档1
注意:参数的最后一行,需要以回车('\n')结尾。
其中一条报错,不会影响其他数据正常执行。
如果新增数据的id已存在会报错。
POST http://192.168.1.8:9200/_bulk
参数:
{"create":{"_index":"index_user", "_type":"_doc", "_id": "5"}}
{"user_id":"5", "name":"姓名5"}
{"create":{"_index":"index_user", "_type":"_doc", "_id": "6"}}
{"user_id":"6", "name":"姓名6"}
{"create":{"_index":"index_user", "_type":"_doc", "_id": "7"}}
{"user_id":"6", "name":"姓名7"}
3.3 批量新增文档2
批量新增文档的第二种写法。
POST http://192.168.1.8:9200/index_user/_doc/_bulk
参数:
{"create":{"_id": "5"}}
{"user_id":"5", "name":"姓名5"}
{"create":{"_id": "6"}}
{"user_id":"6", "name":"姓名6"}
{"create":{"_id": "7"}}
{"user_id":"6", "name":"姓名7"}
3.4 批量新增或更新文档
当id不存在,会新增文档,id已存在,会更新文档。
POST http://192.168.1.8:9200/index_user/_doc/_bulk
参数:
{"index":{"_id": "5"}}
{"user_id":"5", "name":"姓名5_1"}
{"index":{"_id": "6"}}
{"user_id":"6", "name":"姓名6_1"}
{"index":{"_id": "8"}}
{"user_id":"8", "name":"姓名8_1"}
3.5 批量局部更新文档
当id不存在,会报错。
POST http://192.168.1.8:9200/index_user/_doc/_bulk
参数:
{"update":{"_id": "5"}}
{"doc": {"user_id":"5", "name":"姓名5_2"}}
{"update":{"_id": "6"}}
{"doc": {"user_id":"6", "name":"姓名6_2"}}
{"update":{"_id": "9"}}
{"doc": {"user_id":"9", "name":"姓名9_1"}}
3.6 批量删除文档
POST http://192.168.1.8:9200/index_user/_doc/_bulk
参数:
{"delete":{"_id": "5"}}
{"delete":{"_id": "6"}}
3.7 其他说明
批量新增、更新、删除的操作,可以在一次请求完成。
每次批量新增、更新、删除的请求,请求体不宜过大,控制在1000条之内。
4. 综述
今天简单聊了一下 Elasticsearch(ES)的滚动搜索与批量操作,希望可以对大家的工作有所帮助。
欢迎帮忙点赞、评论、加关注 :)
关注追风人聊Java,每天更新Java干货。
scroll_id
Elasticsearch(ES)的滚动搜索与批量操作的更多相关文章
- Elasticsearch由浅入深(十)搜索引擎:相关度评分 TF&IDF算法、doc value正排索引、解密query、fetch phrase原理、Bouncing Results问题、基于scoll技术滚动搜索大量数据
相关度评分 TF&IDF算法 Elasticsearch的相关度评分(relevance score)算法采用的是term frequency/inverse document frequen ...
- ElasticSearch核心知识总结(一)es的六种搜索方式和数据分析
es的六种搜索方式 query string search GET /ecommerce/product/_search //查询所有数据 { "took": 4,//耗费几毫秒 ...
- ElasticSearch(二十四)基于scoll技术滚动搜索大量数据
1.为什么要使用scroll? 如果一次性要查出来比如10万条数据,那么性能会很差,此时一般会采取用scoll滚动查询,一批一批的查,直到所有数据都查询完处理完 2.原理 使用scoll滚动搜索,可以 ...
- 用ElasticSearch搭建自己的搜索和分析引擎
作者:robben,腾讯高级工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 导语:互联网产品中的检索功能随处可见.当你的项目规模是百度大搜|商搜或者微信公众号搜索这种体量的时候 ...
- 用ElasticSearch搭建自己的搜索和分析引擎【转自腾讯Wetest】
本文大概地介绍了ES的原理,以及Wetest在使用ES中的一些经验总结.因为ES本身涉及的功能和知识点非常广泛,所以这里重点挑出了实际项目中可能会用到,也可能会踩坑的一些关键点进行了阐述. 一 重要概 ...
- elasticsearch 深入 —— Scroll滚动查询
Scroll search 请求返回一个单一的结果"页",而 scroll API 可以被用来检索大量的结果(甚至所有的结果),就像在传统数据库中使用的游标 cursor. 滚动并 ...
- Elasticsearch(es)介绍与安装
### RabbitMQ从入门到集群架构: https://zhuanlan.zhihu.com/p/375157411 可靠性高 ### Kafka从入门到精通: https://zhuanlan. ...
- 转:在ElasticSearch之下(图解搜索的故事)
ElasticSearch 2 (9) - 在ElasticSearch之下(图解搜索的故事) 摘要 先自上而下,后自底向上的介绍ElasticSearch的底层工作原理,试图回答以下问题: 为什么我 ...
- Elasticsearch java api 基本搜索部分详解
文档是结合几个博客整理出来的,内容大部分为转载内容.在使用过程中,对一些疑问点进行了整理与解析. Elasticsearch java api 基本搜索部分详解 ElasticSearch 常用的查询 ...
随机推荐
- 如何用Git上传项目到GitHub
1.登录gitHub,进入主页面,点击"+"号,建立新仓库. 2. 输入自己的仓库名,和简单的描述,根据自己设置为公开的或私有的. 我输入的是仓库名为ESMS. 勾选此选项,rea ...
- noip38
T1 有个朴素的暴力,枚举每一个子矩形,复杂度 \(O(n^{2}m^{2})\),观察数据范围,n很小,考虑枚举行,对于 \(m\) 用 \(two\;pointers\) 来维护. 先预处理出每一 ...
- 题解 Strange Housing
传送门 首先想了黑白染色,发现不会染 其实可以考虑如何动态地维护出这个点集 发现题面里对不在点集之中的点之间的连边没有要求 所以考虑不断向图中加点,为了满足要求,每次取一个与当前新图中相连的点 若它与 ...
- git忽略文件夹提交以及gitignore修改后不生效的解决办法
1.在 .gitgnore 文件加入需要忽略的问价夹正则表达式: 在配置完以后提交代码,你可能会发现git忽略配置不生效! 解决办法,将缓存的文件重新添加一下即可 2.打开命令行,将下面三个命令复制粘 ...
- taro小程序展示富文本
在微信小程序下会用到wxParse这个东西来达到html转换wxml的效果, taro小程序官方也给出了示例,地址 这里封装成自己的组件: import Taro, { Component } fro ...
- 【springcloud】Zuul高级配置(zuul--2)
转自:https://blog.csdn.net/pengjunlee/article/details/87162192 自定义路由规则 在<API Gateway 的路由和过滤(Zuul)&g ...
- [ASP.NET MVC]@Html.ActionLik重载
一 Html.ActionLink("linkText","actionName") 该重载的第一个参数是该链接要显示的文字,第二个参数是对应的控制器的方法, ...
- 使用Spark开发应用程序,并将作业提交到服务器
1.pycharm编写spark应用程序 由于一些原因在windows上配置未成功(应该是可以配置成功的).我是在linux上直接使用pycharm,在linux的好处是,环境可能导致的一切问题不复存 ...
- linux(3)--------SSH工具的安装使用
0.一般安装服务端的Linux ssh是默认安装的可以运行ssh localhost测试一下是否可以链接 1.SSH是什么 1)ssh:Secure Shell 安全外壳协议 2)建立在应用层基础上 ...
- 深入Pulsar Consumer的使用方式&源码分析
原文链接 1.使用前准备 引入依赖: <dependency> <groupId>org.apache.pulsar</groupId> <artifactI ...