ElasticSearch(九)-分布式搜索
来源:互联网 发布:水溶性颜料淘宝 编辑:程序博客网 时间:2024/06/05 17:00
搜索的执行过程分为两个阶段:查询后取回
1.查询阶段
查询被向索引中每个分片副本广播,每个分片在本地执行搜索并建立匹配文档的优先队列。
GET /_search{ "from": 90, "size": 10}
这个优先队列的能容纳100个文档
查询分为三步:
如图可视化:
(1)客户端发送一个search搜索请求给请求体node3,node3创建一个长度为from+size的空优先级队列。
(2)node3转发这个搜索请求到搜索中每个分片的原本或副本中。每个分片在本地执行查询并把结果放在一个同样大小的有序本地优先队列中。
(3)每个分片返回document的ID和他优先队列里的所有document的排序值给协调节点node3.然后node3把这些值合并到自己的优先队列产生全局排序结果。
当有更多的副本同时结合更多的硬件时,可以很好的提高搜索的吞吐量。
2.取回阶段
找到那些满足调节的doc,我们要取回它们。
(1)协调节点像相关分片发出get请求
(2)每个分片加载document,并根据需要丰富它们,然后返回协调节点
(3)一旦doc被取回或timeout时间到,协调节点将结果返回客户端
*****强烈不建议使用深分页
*****如果实在需要大量documents,可以设置搜索类型scan为禁用排序
3.搜索选项
Preference:允许你控制使用哪个分片或节点来处理搜索请求
_primary, _primary_first,_local,_only_node:xyz,_prefer_node:xyz和_shards:2,3
结果震荡:排序的不稳定性导致搜索震荡,可以时同一个用户使用固定的分片:使用一个随机字符串来设置preference
Timeout
设置协调节点最多等待多久
rounting 来保证所有相关document被存在一个单独的分片中,搜索就指定这个分片。(大规模搜索系统适用明显)
search_type:
默认query_then_fetch,
其他值:count记数
query_and_fetch(查询并且取回)
dfs_query_then_fetch 和 dfs_query_and_fetch:dfs预查询阶段
scan扫描
4.扫描和滚屏
Scan和scroll滚屏可以高效取回巨大的数据而不需要付出深分页的代价。
GET /_search/scroll?scroll=1m
扫描时size被应用在每个分片上,所以每个批次最多获得size*主分片数。
本文出处:http://blog.csdn.net/shan1369678/article/details/51455254
1 0
- ElasticSearch(九)-分布式搜索
- Elasticsearch(七)-分布式搜索
- 分布式搜索Elasticsearch
- Elasticsearch分布式搜索
- 分布式搜索Elasticsearch 概述
- 分布式搜索elasticsearch 基本概念
- [Elasticsearch] 分布式搜索
- [Elasticsearch] 分布式搜索
- [Elasticsearch] 分布式搜索
- [Elasticsearch] 分布式搜索
- [Elasticsearch] 分布式搜索
- 分布式搜索elasticsearch java API 之(五)------搜索
- 分布式搜索Elasticsearch——搜索(一)
- 分布式搜索Elasticsearch——搜索(二)
- 分布式搜索elasticsearch java API 之(五)------搜索
- 分布式搜索Elasticsearch——搜索(一)
- 分布式搜索Elasticsearch——搜索(二)
- 分布式搜索elasticsearch java API 之(五)------搜索
- 如何防止SQLserver服务器被黑?
- memset函数
- 使用log4jdbc记录SQL信息
- LOJ 1422 Halloween Costumes【区间DP】
- swift网络数据请求方法
- ElasticSearch(九)-分布式搜索
- Windows下安装node及基本操作
- 类工厂方法是什么?
- centos6.7环境之kvm虚拟化quem工具配置及使用详解
- Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果
- 斐波那契递归算法
- AlertViewController的使用
- 高空作业的三宝
- 确保打在rpm包中的.so文件具有可执行权限