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都是一個功能完善的倒排索引。