深入理解Elasticsearch写入过程 使用routing会导致docid不再全局唯一 Allocate策略 + routing参数

1.默认查询接口会搜索所有的shard,但也可以指定routing字段,这样就只会查询routing计算出来的shard,提高查询速度。  --使用routing会导致docid不再全局唯一

使用方式也非常简单,只需在查询语句上面指定routing即可,允许指定多个:

-- 查询所有分区
GET route_test/_search 
{
  "query": {
    "match": {
      "data": "b"
    }
  }
}

-- 查询指定分区
GET route_test/_search?routing=key1,key2 
{
  "query": {
    "match": {
      "data": "b"
    }
  }
}

2.指定routing还有个弊端就是容易造成负载不均衡。所以ES提供了一种机制可以将数据路由到一组shard上面,而不是某一个。只需在创建索引时(也只能在创建时)设置index.routing_partition_size,默认值是1,即只路由到1个shard,可以将其设置为大于1且小于索引shard总数的某个值,就可以路由到一组shard了。值越大,数据越均匀。

https://www.cnblogs.com/caoweixiong/p/12029789.html   参考

3.ES shard的实质是Lucene的索引,所以其实每个shard都是一个功能完善的倒排索引。

https://www.jianshu.com/p/cdfe5c019fab

你可能感兴趣的:(深入理解Elasticsearch写入过程 使用routing会导致docid不再全局唯一 Allocate策略 + routing参数)