时间:2014-11-24 来源:

【Elasticsearch】分布式搜索 【云计算】

分布式搜索 本文翻译自Elasticsearch官方指南的Distributed Search Execution一章.

一个CRUD操作会处理一个文档网页外包接活,它默认情况下就是文档的_id)组合.这意味着我们能够知道该文档被保存在集群中的哪个分片(Shard)上.

优先队列实际上是一个用来保存前N个匹配(Top-N Matching)的文档的有序列表.优先队列的大小取决于分页参数:from和size.比如,div+css制作下面的搜索请求会建立一个大小为100的优先队列用于保存匹配的文档:

有一些搜索字符串参数能够影响搜索过程:

查询并获取(Query then Fetch)的过程支持通过传入的from和size参数来完成分页功能.但是该功能存在限制.不要忘了每个分片都会在本地保存一个大小为from + size的优先队列,div+css报价该优先队列中的所有内容都需要被返回给协调节点.然后协调节点需要对number_of_shards * (from + size)份文档进行排序来保证最后能够得到正确的size份文档.

一个滚动搜索会生成一个实时快照(Snapshot) - 它不会发现在初始搜索后,兼职手机网页制作索引发生的任何变化.它通过将老的数据文件保存起来来完成这一点,html静态页面制作因此它能够保存一个在它开始时索引的视图(View).

优先队列

scroll请求还会返回一个新的_scroll_id.每次我们执行下一个scroll请求时,web切图报价都需要传入上一个scroll请求返回的_scroll_id.

协调节点(Coordinating Node)会首先辨识出哪些文档需要被获取,psd转html最后将它们返回给协调节点.一旦所有的文档都被获取了网页外包接活,协调节点会将结果返回给客户端. 协调节点首先决定到底哪些文档是真的需要被获取的.比如,网页外包接活如果在查询中指定了{ "from": 90,那么头90条结果都会被丢弃(Discarded),只有剩下的10条结果所代表的文档需要被获取.这些文档可能来自一个或者多个分片.

在继续之前,div前端切图我们将绕一段路来谈谈在分布式环境中web切图报价,搜索是如何执行的.和在分布式文档存储(Distributed Document Store)中讨论的基本CRUD操作相比,web切图报价这个过程会更加复杂一些.

协调节点会将从其他节点返回的结果合并来得到一个全局的优先队列.到这里符合w3c标准,查询阶段就结束了.

分片会加载文档的正文部分 - 即_source字段 - 如果被要求的话,符合w3c标准还会对结果进行润色网页外包接活,比如元数据和搜索片段高亮(Search Snippet Highlighting).一旦协调节点获取到了所有的结果,jpg或psd转html它就会将它们组装成一个响应并返回给客户端.

实践中web前端制作,深度分页返回的页数实际上是不切实际的.用户往往会在浏览了2到3页后就会修改他们的搜索条件.罪魁祸首往往都是网络爬虫这种无休止地页面进行抓取的程序,web前端制作它们会让你的服务器不堪重负.

GET /_search?search_type=count count

在查询的初始阶段承接网页制作,它可以是主分片或者是副本分片).然后每个分片会在本地执行该搜索web切图报价,匹配的文档会被保存到一个优先队列(Priority Queue)中.

query_and_fetch

一些ES官方提供的客户端提供了scan和scroll的工具用来封装这个功能.

每个分片会在本地执行查询,网站div+css然后建立一个大小为from + size的优先队列来保存其结果.换言之符合w3c标准,比如_score.

协调节点会为每个含有目标文档的分片构造一个multi GET请求网页外包接活,然后将该请求发送给在查询阶段中参与过的分片拷贝.

获取阶段(Fetch Phase)

比如当你使用一个timestamp字段对结果进行排序,网页外包接活有两份文档拥有相同的timestamp.因为搜索请求是以一种循环(Round-robin)的方式被可用的分片拷贝进行处理的web前端制作,因此这两份文档的返回顺序可能因为处理的分片不一样而不同,div+css制作比如主分片处理的顺序和副本分片处理的顺序就可能不一样.

scan

深度分页(Deep Pagination)

dfs搜索类型有一个查询前阶段(Pre-query phase)用来从相关分片中获取到词条频度(Term Frequencies)来计算群安居的词条频度.我们会在相关性错了(Relevance is broken)一节中进行讨论.

客户端发送一个搜索请求到节点3,节点3随即会创建一个大小为from + size的空的优先队列.节点3将搜索请求转发到索引中每个分片的主分片(Primary Shard)或副本分片(Replica Shard).然后每个分片会在本地执行该查询,兼职手机网页制作然后将结果保存到本地的一个大小同样为from + size的优先队列中.每个分片返回优先队列中文档的IDs和它们的排序值到协调节点(Coordinating Node),也就是节点3.然后节点3负责将所有的结果合并到本地的优先队列中,web切图报价这个优先队列就是全局的查询结果. 当一个搜索请求被发往一个节点时符合w3c标准,该节点就变成了协调节点(Coordinating Node).它需要向其他关联分片所在的节点广播搜索请求,html切图制作然后合并来自它们的中间结果来得到最终能够发送给客户端的全局结果.

但是网页外包接活,最常用的值是某些任意的字符串,网页外包接活用来避免结果跳跃问题(Bouncing Result Problem).

根据文档的大小web前端制作,分片的数量以及你正在使用的硬件,web前端制作对10000到50000个结果进行分页(1000到5000页)是可以很好地完成的.但是当from值大的一定程度承接网页制作,内存和带宽等资源的行为.因为如此web切图报价, "size": 10 } 查询阶段的过程如下图所示:

为了使用scan和scroll,同时传入一个scroll参数来告诉ES,scroll会开放多长时间:

这就是结果跳跃问题:每次用户刷新页面都会发现结果的顺序不一样.

多索引搜索(Multi-index Search)

timeout 默认情况下,jpg或psd转html协调节点会等待所有分片的响应.如果一个节点有麻烦了web前端制作,那么会让所有搜索请求的响应速度变慢.

GET /_search/scroll?scroll=1m c2Nhbjs1OzExODpRNV9aY1VyUVM4U0NMd2pjWlJ3YWlBOzExOTpRNV9aY1VyUVM4U0 NMd2pjWlJ3YWlBOzExNjpRNV9aY1VyUVM4U0NMd2pjWlJ3YWlBOzExNzpRNV9aY1Vy UVM4U0NMd2pjWlJ3YWlBOzEyMDpRNV9aY1VyUVM4U0NMd2pjWlJ3YWlBOzE7dG90YW xfaGl0czoxOw== 该请求会让scroll继续开放1分钟._scroll_id能够通过请求的正文部分,web前端制作URL或者查询参数传入.

GET /old_index/_search?search_type=scan&scroll=1m { "query": { "match_all": {}}, "size": 1000 } 以上请求会让scroll开放一分钟.

在搜索请求的响应中,兼职手机网页制作有用来表明搜索是否发生了超时的字段web切图报价,user2 该技术在设计非常大型的搜索系统有用处符合w3c标准, "_shards": { "total": 5, "failed": 1 }, ... routing 在分布式文档存储(Distributed Document Store)一章中的路由文档到分片(Routing a document to a shard)一小节中,div+css制作我们已经解释了自定义的routing参数可以在索引时被提供承接网页制作,来确保所有相关的文档,兼职手机网页制作比如属于同一用户的文档web切图报价,都会被保存在一个分片上.在搜索时,web切图报价相比搜索索引中的所有分片符合w3c标准,你可以指定一个或者多个routing值来限制搜索的范围到特定的分片上:

搜索选项(Search Options)

如果你确实需要从集群中获取大量的文档,html切图制作那么你可以使用禁用了排序功能的scan搜索类型来高效地完成该任务.我们会在稍后的Scan和Scroll一节中进行讨论.

search_type 除了query_then_fetch是默认的搜索类型外网页外包接活,还有其他的搜索类型可以满足特定的目的,网页外包接活比如:

这个scroll请求的响应包含了第一批结果.尽管我们指定了size为1000,我们实际上能够获取更多的文档.size会被每个分片使用,web前端制作因此每批最多能够获取到size * number_of_primary_shards份文档.

count搜索类型只有查询阶段.当你不需要搜索结果的时候可以使用它承接网页制作,它只会返回匹配的文档数量或者聚合(Aggregation)结果.

第一步是将请求广播给索引中所有分片拷贝(可以是主分片,div前端切图也可以是副本分片)所在的节点.和获取文档的GET请求一样web切图报价,搜索请求也可以被主分片或者它关联的任意一个副本分片处理.这就是当增加副本分片(添加更多的硬件)能够增加搜索吞吐量的原由.协调节点会通过循环(Round-robin)的方式向所有的分片拷贝发送请求来分布负载.

query_and_fetch搜索类型会将查询阶段和获取阶段合并成一个阶段.当搜索请求的目标只有一个分片时被使用,web切图报价比如指定了routing值时符合w3c标准,是一种内部的优化措施.尽管你可以选择使用该搜索类型,符合w3c标准但是这样做几乎是没有用处的.

然而网页外包接活,搜索的执行模型会复杂的多,jpg或psd转html因为我们无法知道哪些文档会匹配 - 匹配的文档可以在集群中的任何分片上.因此搜索请求需要访问索引中的每个分片来得知它们是否有匹配的文档.

查询阶段能够辨识出哪些文档能够匹配搜索请求web前端制作,但是我们还需要获取文档本身.这就是获取阶段完成的工作.此阶段如下图所示:

注意我们又一次指定了?scroll=1m.scroll的过期时间在每次执行scroll请求后都会被刷新,web前端制作因此它只需要给我们足够的时间来处理当前这一批结果承接网页制作,而不是匹配的所有文档.

scan搜索类型会和scroll API一起使用来高效的获取大量的结果.它通过禁用排序来完成.在下一小节中会进行讨论.

scan 在深度分页中最耗费资源的部分是对全局结果进行排序,兼职手机网页制作但是如果我们禁用了排序功能的话web切图报价,就能够快速地返回所有文档了.我们可以使用scan搜索类型来完成.它告诉ES不要执行排序,网站div+css只是让每个还有结果可以返回的分片返回下一批结果.

scan和scroll

scroll 一个滚动(Scroll)搜索能够让我们指定一个初始搜索(Initial Search),然后继续从ES中获取批量的结果,符合w3c标准直到所有的结果都被获取.这有点像传统数据库中的游标(Cursor).

查询阶段(Query Phase)

一个索引能够含有一个或者多个主分片网页外包接活,_primary_first,_only_node:xyz,3这样的值.这些值的含义在搜索preference的文档中有详细解释.

dfs_query_then_fetch和dfs_query_and_fetch

结果跳跃(Bouncing Results)

scan搜索类型以及scroll API会被一同使用来从ES中高效地获取大量的文档web切图报价,而不会有深度分页(Deep Pagination)中存在的问题.

timeout参数告诉协调节点它在放弃前要等待多长时间.如果放弃了,web切图报价它会直接返回当前已经有的结果.返回一部分结果至少比什么都不返回要强.

这个问题可以通过总是为相同用户指定同样的分片来避免:将preference参数设置为一个任意的字符串符合w3c标准,比如用户的会话ID(Session ID).

NOTE

此请求的响应不会含有任何的结果,html切图制作但是它会含有一个_scroll_id,它是一个通过Base64编码的字符串.现在可以通过将_scroll_id发送到_search/scroll来获取第一批结果:

当没有结果被返回是,网页外包接活我们就处理完了所有匹配的文档.

TIP

但是web前端制作,找到所有匹配的文档只完成了一半的工作.从多个分片中得到的结果需要被合并和排序以得到一个完整的结果,web前端制作然后search API才能够将结果返回.正因为如此承接网页制作,搜索由两个阶段组成(Two-phase Process) - 查询和获取(Query then Fetch).

点击次数:6181
作者:
web前端行业资讯
Web new NewsList
英特尔宣布与法拉利跨界合作欲将AI技术用于赛车运动 ,,2018年01月11日甲骨文服务器出漏洞:攻击者用漏洞挖矿获取加密货币 ,,2018年01月11日用深度学习设计图像视频压缩算法:更简洁、更强大 ,,2018年01月11日Ubuntu内核和NVIDIA更新:修复Meltdown和Spectre两处漏洞 ,,2018年01月11日AntDesign3.1.1发布,阿里企业级UI设计语言 ,,2018年01月11日微信「跳一跳」带火小游戏,开发者如何快速上手? ,,2018年01月11日谷歌公布最新安卓系统份额:你用上奥利奥了么? ,,2018年01月11日腾讯开发出“3D音效”算法:普通耳机实现3D实时语音效果 ,,2018年01月11日谷歌工程师点赞中国程序员实现Node.js启动超4倍提速 ,,2018年01月11日三星电子总裁兼CE部门负责人金炫奭:万物互联时代到来 ,,2018年01月11日NVIDIA和大众合作建立智能驾驶助手 ,,2018年01月11日GIMPS项目报告发现已知最大素数 ,,2018年01月11日微软与生物技术公司开展AI驱动的血液检测同时诊断数十种疾病 ,,2018年01月11日微软跨平台移动开发工具套件HockeyApp宣布免费 ,,2018年01月11日《硅谷》里神乎其神的压缩技术,AI正在一点点做出来 ,,2018年01月11日LinuxMint19代号敲定为“Tara”预计2018年5月至6月期间发布 ,,2018年01月11日Facebook发布wav2letter工具包,用于端到端自动语音识别 ,,2018年01月11日开源数据库ArangoDB正进行约1156万美元股权融资 ,,2018年01月11日IntelCPU漏洞闹大:腾讯云紧急升级 ,,2018年01月11日2018年1月全球数据库排名:Redis夺回第八 ,,2018年01月11日Lyft将联手无人驾驶公司于CES上展示无人驾驶汽车 ,,2018年01月11日京东X无人超市首家社会门店开业:刷脸进、微信自动结算 ,,2018年01月11日担心被AI取代是杞人忧天?高晓松跨年演讲说的有几分对 ,,2018年01月11日免费授权技术许可Intel宣布在未来CPU中集成雷电3 ,,2018年01月11日算法决定你在社交媒体上看到的信息 ,,2018年01月11日谷歌安全博客披露“英特尔内核漏洞”更多细节 ,,2018年01月04日Postgres10开发者新特性 ,,2017年12月28日阿里巴巴、狗尾草、苏大联合论文:基于对抗学习的众包标注用于中文命名实体识别 ,,2017年12月28日柯洁的2017:20岁,与AI斗与人类斗,其乐无穷 ,,2017年12月28日如果机器人拥有痛觉,这个世界会有哪些不一样? ,,2017年12月28日存储器问题 【云计算】2015年05月05日SODBASECEP学习进阶篇(四):自己控制时钟和时间戳 【系统运维】2015年06月30日SQLServer复制技术2014年01月28日iOS图片存到沙盒2015年04月07日senchatouch通过.axhx获取后台数据时,UnabletoparsetheJSONreturnedbytheserver:Error:You'retryingto【移动开发】2015年02月09日【j2eespring】45、巴巴运动网前台ajax应用 【综合】2015年07月22日uva1034423outof5(递归+全排列)【云计算】2015年07月29日Hutia的JS代码集2014年01月29日图书馆管理系统——模板建立【移动开发】2015年06月11日mFC开发ocx控件放到网上去 【移动开发】2015年02月04日pyhton中的mapreduce应用 【综合】2015年04月02日Hdu5340ThreePalindromes最大回文串Manacher【编程语言】2015年08月03日HTML编辑器KindEditor4.0.4发布 ,,2016年06月23日写程序引发的思考 【编程语言】2015年02月11日oled屏幕【编程语言】2015年08月07日搭建项目Maven+springMVC+hibernate时,JUnit测试出现报ClassNotFoundException错误的解决 【编程语言】2015年06月11日为Activity设置开启关闭动画【移动开发】2014年11月18日C++学习笔记(九):vector使用 【移动开发】2015年01月19日Foundation框架常用数据类型和NSAutoreleasePool自动释放池解析 【互联网】2014年12月25日StuxnetFlameDuqu使用GPL代码 ,,2016年06月23日疯狂Java学习笔记(72)-----------大话程序员面试【编程语言】2015年06月05日Javaweb----Service事务 【编程语言】2015年01月19日android布局性能优化 【编程语言】2014年11月26日鼠标位置距浏览器窗口距离【编程语言】2015年06月11日Shell多进程并发【互联网】2015年05月07日PYQT实现TabWidget双击关闭功能(附源码) 【Web前端】2015年01月21日一个11G抓没有绑定变量的语句.非常好!非常精确,非常快.【架构设计】2015年06月12日HTML高级标签之表格标签 【编程语言】2015年04月02日Android系统各版本及代号【编程语言】2015年06月11日JavaScript实用工具库Lodash4.12.0发布 ,,2016年06月23日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)