多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
当我们查询文档的时候,Elasticsearch通过下面这个公式来计算出文档的位置: ``` shard = hash(routing) % number_of_primaryshards routing:是一个可变值,默认是文档的 _id ,也可以设置成一个自定义的值. number_of_primary_shards :主分片的数量. ``` **不带 routing 查询:** 在查询的时候因为不知道要查询的数据具体在哪个分片上,所以整个过程分为 2 个步骤。 1)分发:请求到达协调节点后,协调节点将查询请求分发到每个分片上。 2)聚合: 协调节点搜集到每个分片上查询结果,在将查询的结果进行排序,之后给用户返回结果。 <br/> **带 routing 查询:** 查询的时候,可以直接根据 routing 信息定位到某个分配查询,不需要查询所有的分配,经过协调节点排序。如果 routing 设置为 userid 的话,就可以直接查询出数据来,效率提升很多。 ```json # 1. 使用 routing 查询要在一开始建文档的时候便要指定routing参数 PUT /shopping/_create/1001?routing=10 { "title": "小米手机", "category": "小米", "images": "http://www.gulixueyuan.com/xm.jpg", "price": "3999.0" } # 2. 携带 routing 查询 POST /shopping/_search?routing=10 ----->响应结果如下: { "took" : 0, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "shopping", "_type" : "_doc", "_id" : "1001", "_score" : 1.0, "_routing" : "10", "_source" : { "title" : "小米手机", "category" : "小米", "images" : "http://www.gulixueyuan.com/xm.jpg", "price" : "3999.0" } } ] } } ```