當我們查詢文檔的時候,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"
}
}
]
}
}
```
- Elasticsearch是什么
- 全文搜索引擎
- Elasticsearch與Solr
- 數據結構
- 安裝Elasticsearch
- Linux單機安裝
- Windows單機安裝
- 安裝Kibana
- Linux安裝
- Windows安裝
- es基本語句
- 索引操作
- 文檔操作
- 映射操作
- 高級查詢
- es-JavaAPI
- maven依賴
- 索引操作
- 文檔操作
- 高級查詢
- es集群搭建
- Linux集群搭建
- Windows集群搭建
- 核心概念
- 索引(Index)
- 類型(Type)
- 文檔(Document)
- 字段(Field)
- 映射(Mapping)
- 分片(Shards)
- 副本(Replicas)
- 分配(Allocation)
- 系統架構
- 分布式集群
- 單節點集群
- 故障轉移
- 水平擴容
- 應對故障
- 路由計算
- 分片控制
- 寫流程
- 讀流程
- 更新流程
- 多文檔操作流程
- 分片原理
- 倒排索引
- 文檔搜索
- 動態更新索引
- 近實時搜索
- 持久化變更
- 段合并
- 文檔分析
- 內置分析器
- 分析器使用場景
- 測試分析器
- 指定分析器
- 自定義分析器
- 文檔處理
- 文檔沖突
- 樂觀并發控制
- 外部系統版本控制
- es優化
- 硬件選擇
- 分片策略
- 合理設置分片數
- 推遲分片分配
- 路由選擇
- 寫入速度優化
- 批量數據提交
- 優化存儲設備
- 合理使用合并
- 減少Refresh的次數
- 加大Flush設置
- 減少副本的數量
- 內存設置
- 重要配置
- es常見問題
- 為什么要使用Elasticsearch
- master選舉流程
- 集群腦裂問題
- 索引文檔流程
- 更新和刪除文檔流程
- 搜索流程
- ES部署在Linux時的優化方法
- GC方面ES需要注意的點
- ES對大數據量的聚合實現
- 并發時保證讀寫一致性
- 字典樹
- ES的倒排索引
- Spring Data Elasticsearch
- 環境搭建
- 索引操作
- 文檔操作