### 將文檔路由到從庫中
When you index a document, it is stored on a single primary shard. How doesElasticsearch know which shard a document belongs to? When we create a newdocument, how does it know whether it should store that document on shard 1 orshard 2?
The process can't be random, since we may need to retrieve the document in thefuture. In fact, it is determined by a very simple formula:
~~~
shard = hash(routing) % number_of_primary_shards
~~~
The `routing` value is an arbitrary string, which defaults to the document's`_id` but can also be set to a custom value. This `routing` string is passedthrough a hashing function to generate a number, which is divided by thenumber of primary shards in the index to return the _remainder_. The remainderwill always be in the range `0` to `number_of_primary_shards - 1`, and givesus the number of the shard where a particular document lives.
This explains why the number of primary shards can only be set when an indexis created and never changed: if the number of primary shards ever changed inthe future, all previous routing values would be invalid and documents wouldnever be found.
All document APIs (`get`, `index`, `delete`, `bulk`, `update` and `mget`)accept a `routing` parameter that can be used to customize the document-to-shard mapping. A custom routing value could be used to ensure that all relateddocuments -- for instance all the documents belonging to the same user -- arestored on the same shard. We discuss in detail why you may want to do this in<>.
- Introduction
- 入門
- 初識
- 安裝
- API
- 文檔
- 索引
- 搜索
- 匯總
- 小結(jié)
- 分布式
- 本章總結(jié)
- 分布式集群
- 空集群
- 集群健康
- 添加索引
- 容錯移轉(zhuǎn)
- 橫向擴(kuò)展
- 擴(kuò)展
- 故障恢復(fù)
- 索引
- 文檔
- Get
- 存在
- 更新
- 創(chuàng)建
- 刪除
- 版本控制
- 局部更新
- Mget
- Bulk
- 總結(jié)
- 分布式文檔存儲
- 路由
- 主從互通
- 創(chuàng)建索引刪除
- 獲取
- 局部更新
- 批量請求
- 批量格式
- 搜索
- 空白搜索
- 多索引多類型
- 分頁
- 查詢語句
- 映射與統(tǒng)計(jì)
- Exact_vs_full_text
- Inverted_index
- Analysis
- Mapping
- Complex_datatypes
