赞
踩
shard = hash(routing) % number_of_primary_shards
routing:默认是文档id,支持自定义。
通过哈希算法计算routing的到一个数字,数字与主分片总数取余,结果就是目标分片号。
所以主分片数量是不可变更的
id
计算所属分片为X。当ES执行写操作时,主分片要求必须有 规定数量 的副本分片处于活跃可用状态,才会执行写操作。
当副本分片不满足 规定数量 时,ES会等待默认1分钟。使用timeout设置超时时间。100 表示100ms 10s 表示10秒
当检索操作超时时,不是直接返回错误。而是将已经查询到的结果返回
id
计算所属分片为X。当A客户端新建文档处于执行中时,B客户端发起获取文档请求。此时文档在各分片之间处于不一致状态。存在以下几种情况:
当N个客户端同时对同一文档发起局部更新请求时。
主分片多进程处理局部更新请求,依靠version机制保证文档的完整性。
主分片多进程向副本分片并发传递文档时,因并发、网络等原因,无法保证转发请求顺序到达副本分片。
如果采用局部更新的方式,请求顺序颠倒到达,因version机制导致延迟请求处理失败。提前到达的局部更新仅包含自身变更内容,这种情况将造成文档内容丢失。
如果采用完整更新文档的方式,请求顺序颠倒到达,因version机制导致延迟请求处理失败。提前到达的完整更新包含全部变更内容,这种情况不会造成文档内容丢失。
即便丢失了过程更新,但是最后version版本各分片是一致的,成功的跳过了检查机制
ES集群对首次接收到的请求,是如何分配节点的。
各节点之间如何做到共享节点清单的。
主节点处理失败,直接向客户端返回失败。
副本分片处理失败,主分片和其他副本分片是否进行回滚操作?
为什么批量操作要用/N结尾?而不是发送一个完整JSON?
如果采用JSON格式,处理过程如下
第一步 字符串占X空间
第二步 JsonObject占Y(Y>=X)空间
第三步 拆分总和占Z(Z=Y)空间
总结:共占用 X+Y+Z空间
如果采用/N结尾,处理过程如下
接收一段内容,转发一段内容
总结:共占用 X空间
搜索功能包括
描述数据在每个字段内如何存储
全文是如何处理使之可以被搜索的
Elasticsearch 中强大灵活的查询语言
GET /_search
{ "hits" : { "total" : 14, "hits" : [ { "_index": "us", "_type": "tweet", "_id": "7", "_score": 1, "_source": { "date": "2014-09-17", "name": "John Smith", "tweet": "The Query DSL is really powerful and flexible", "user_id": 2 } }, ... 9 RESULTS REMOVED ... ], "max_score" : 1 }, "took" : 4, "_shards" : { "failed" : 0, "successful" : 10, "total" : 10 }, "timed_out" : false }
对于多索引,多类型的请求,处理方法相当于批量操作。
/_search
在所有的索引中搜索所有的类型
/gb/_search
在 gb 索引中搜索所有的类型
/gb,us/_search
在 gb 和 us 索引中搜索所有的文档
/g*,u*/_search
在任何以 g 或者 u 开头的索引中搜索所有的类型
/gb/user/_search
在 gb 索引中搜索 user 类型
/gb,us/user,tweet/_search
在 gb 和 us 索引中搜索 user 和 tweet 类型
/_all/user,tweet/_search
在所有的索引中搜索 user 和 tweet 类型
默认使用_source做降序排序,可以指定排序列。
排序在分片中进行,各分片结果返回后再由主分片二次排序。
假设进行size=10,form=0的分页检索操作:
假设进行size=10,form=100的分页检索操作:
不建议用
文章中部分内容来源于:
Elasticsearch: The Definitive Guide by Clinton Gormley and Zachary Tong (O’Reilly). Copyright 2015 Elasticsearch BV, 978-1-449-35854-9。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。