地方门户网站建设方案,广州网站备案公司,wordpress宝塔安装,抖音代运营费用一年多少钱一、前言
1.1、scroll与fromsize区别
ES对于fromsize的个数是有限制的#xff0c;二者之和不能超过1w。当所请求的数据总量大于1w时#xff0c;可用scroll来代替fromsize。
fromsize在ES查询数据的方式步骤如下#xff1a;
1、先将用户指定的关键字进行分词#xff1b;…一、前言
1.1、scroll与fromsize区别
ES对于fromsize的个数是有限制的二者之和不能超过1w。当所请求的数据总量大于1w时可用scroll来代替fromsize。
fromsize在ES查询数据的方式步骤如下
1、先将用户指定的关键字进行分词
2、将词汇去分词库中进行检索得到多个文档的id
3、去各个分片中拉取指定的数据相对耗时较长
4、将数据根据score进行排序耗时相对较长
5、根据fromsize的值截取满足条件的查询到的数据
6、返回结果优点:每次都能获取到最新的记录 缺点:同一个查询展示另一页的fromsize时以上步骤需要再来一遍
scollsize在ES查询数据的方式
1、先将用户指定的关键字进行分词
2、将词汇去分词库中进行检索得到多个文档的id
3、将文档的id存放在内存的一个ES的上下文中
4、根据你指定的size的个数去ES上下文中检索指定个数的数据拿完了数据的文档id会从上下文中移除
5、如果需要下一页数据直接去ES的上下文中找后续内容
6、循环第4步第五步直到数据都取完了
优点:数据缓存进了内存速度快同一个查询展示另一页的scollsize时只需要循环4,5步
缺点:冷加载不适合做实时当数据更新时内存中的上下文id数据不会更新1.2、Scroll原理
1.2.1、 ES搜索两阶段简介
ES的搜索是分2个阶段进行的即Query阶段和Fetch阶段。
Query阶段比较轻量级通过查询倒排索引获取满足查询结果的文档ID列表。
Fetch阶段比较重需要将每个shard的结果取回在协调结点进行全局排序。 通过Fromsize这种方式分批获取数据的时候随着from加大需要全局排序并丢弃的结果数量随之上升性能越来越差。
1.2.2、 scroll分析
Scroll查询先做轻量级的Query阶段以后免去了繁重的全局排序过程。 它只是将查询结果集也就是doc id列表保留在一个上下文里 之后每次分批取回的时候只需根据设置的size在每个shard内部按照一定顺序默认doc_id续) 取回这个size数量的文档即可。
1.2.3、 scroll使用场景
可以看出scroll不适合支持那种实时的和用户交互的前端分页工作其主要用途用于从ES集群分批拉取大量结果集的情况一般都是offline的应用场景。 比如需要将非常大的结果集拉取出来存放到其他系统处理或者需要做大索引的reindex等等。
二、Scroll实践
2.1、依据fee字段和moblie字段倒序按照每一页2条scroll查询公司信息
2.1.1、RESTful 代码
2.1.1.1、步骤1 scoll 查询,返回第一页数据将ES的id存放在上下文中
参数scroll2m表示scroll查询的上下文在内存中存放2分钟不指定默认生存时间为0当超时会自动删除上下文则下面的步骤2和3会查询报错 指定size为2 scroll可以指定字段排序默认按照文档id排序
POST /notice_procurement/_search?scroll2m
{query: {match_all: {}}, size: 2, sort: [{scale: {order: desc}}]
}//---返回_scroll_id: FGluY2x1ZGVfY29udGV4dF91dWlkDXF1ZXJ5QW5kRmV0Y2gBFkQteGp3OEZtVGctYTBWdmIzb0dMaVEAAAAAAAAAHBZDWUpDUkdLVlR5Q3FUN2ZuS2tIejZ3,took: 2,timed_out: false2.1.1.2、步骤2 根据scroll查询下一页数量再下一页的话再执行下此语句再下一页再再执行直到结束或超时;
scroll_id: 指的是上面的查询结果 scroll: 还是要继续指定上下文在内存中缓存2分钟
POST /_search/scroll
{scroll_id: FGluY2x1ZGVfY29udGV4dF91dWlkDXF1ZXJ5QW5kRmV0Y2gBFkQteGp3OEZtVGctYTBWdmIzb0dMaVEAAAAAAAAAHRZDWUpDUkdLVlR5Q3FUN2ZuS2tIejZ3,scroll: 2m
}
2.1.1.3、 删除scroll在es上下文中的数量
可能我查到第一页就知道了结果对后面的分页不感兴趣了我想提前删除scroll中的上下文
DELETE /_search/scroll/FGluY2x1ZGVfY29udGV4dF91dWlkDXF1ZXJ5QW5kRmV0Y2gBFkQteGp3OEZtVGctYTBWdmIzb0dMaVEAAAAAAAAAHRZDWUpDUkdLVlR5Q3FUN2ZuS2tIejZ3