項目中數據庫根據月份水平划分,由於沒有用數據庫中間件,沒辦法一下查詢所有訂單信息,所有用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索引,就會自動關聯別名,讀數據時就可以通過別名一下把所有數據都獲取到。