ElasticSearch的路由機制和分片有着密切聯繫,ElasticSearch的路由機制就是經過哈希算法將哈希值相同的文檔存儲在同一個主分片上面(默認是文檔ID的哈希值),這就跟哈希算法實現的負載均衡是一樣的效果。算法
這樣作的目的也是保證存儲到ElasticSearch上面的數據能夠均勻的分佈到不通的主分片上面,避免產生數據熱點。負載均衡
全部的文檔API(get,index,delete,update和mget)都能接收一個routing參數,能夠用來造成個性化文檔分片映射。this
在咱們充分了解了咱們的業務以後,咱們能夠經過使用個性化路由將相同屬性或關聯的業務數據存放到一個主分片上面。spa
POST sfpay_log/waf?routing=lc { "title":"屢次查詢數據", "desc":"this is test", "device":"0001" }
上面這種方式是咱們直接在參數中指定路由參數的值,還有一種方式咱們能夠指定文檔中屬性做爲路由參數的值。code
經過指定的路由值,咱們就能夠直接定位到文檔所在的分片。ip
GET sfpay_log/_search?routing=lc
查詢結果路由
{ "took": 3, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": 1, "max_score": 1, "hits": [ { "_index": "sfpay_log", "_type": "waf", "_id": "_ipVQWQBt6c7eh0rKtu9", "_score": 1, "_routing": "lc", "_source": { "title": "屢次查詢數據", "desc": "this is test", "device": "0001" } } ] } }