項目中數據庫根據月份水平划分,由於沒有用數據庫中間件,沒辦法一下查詢所有訂單信息,所有用Elasticsearch做訂單檢索。
Elasticsearch索引和數據庫分片同步,也是根據月份來建立索引。
思路:
- 建立索引時用“order_yyyyMM”命名;
- 為這些訂單索引建立別名“order”;
- 寫數據時把數據寫到對應的月份索引,讀時根據別名讀取,就可以查詢到所有訂單數據;
對索引分片也可以根據業務靈活的刪除老數據。
具體實現需要用到模板,
template可以修改索引的默認配置。我們以下面這個template為例說明一下。
- 建立一個template名稱為order_template
- "template": "order*",表示對於所有以order*開頭的索引,默認配置使用template中的配置。
- "settings","mappings","aliases",可以修改這些類型的默認配置
curl -XPUT "http://localhost:9200/_template/order_template?pretty" -d '{
"template": "order*",
"settings": {
"number_of_shards": 10
},
"mappings": {
"data": {
"_source": {
"enabled": false
},
"properties": {
"name": {
"type": "string",
"index": "not_analyzed"
},
"id": {
"type": "long"
}
}
}
},
"aliases": {"order":{}}
}'
設置模板后,每次創建order索引,就會自動關聯別名,讀數據時就可以通過別名一下把所有數據都獲取到。
