1. 程式人生 > >elasticsearch幾點使用建議

elasticsearch幾點使用建議

公司的一個專案用了elasticsearch,我接手這個專案的維護工作,中途發生了幾次需求變更以及bug修復。在過程中,我發現幾點不好的使用方式:
1.目前的儲存,都是放在同一個index下的,然後不同業務分的不同的type儲存。
2.儲存資料之前,沒有初始化操作,未對索引中欄位進行型別設定。

為何提出以上兩點建議:

公司專案使用的elasticserach版本:5.2.1

  1. 遇到了問題:
    在一個type的資料中,我增加了一個欄位,記錄以逗號分隔的日期(具體為何存逗號分隔的日期此處不解釋,業務需求),測試時候都沒出問題,結果上uat環境出問題了,報錯為“型別錯誤”。
  2. 開始解決問題:
    使用rest方式檢視一些設定:
    檢視index下的欄位mapping
    GET /index_name/_mapping/
    檢視index下指定type下的欄位mapping
    GET /index_name/_mapping/type_name
    然後,發現新增的那個字串欄位竟然是date型別。
    原因:初始值為一個日期,所以沒有逗號分隔,於是預設指定為日期型別(真的沒想讓elasticsearch那麼智慧的)。
    嘗試修改欄位的型別,發現改起來很麻煩,想刪除這個type,發現不行,會報錯:
No handler found for uri [/index_name/type_name] and method [DELETE]

現在5.X版本的elasticsearch已經不支援刪除一個type了,只能從index上面刪,但是index的資料很多,不能隨便刪,備份再恢復,很麻煩。
最後直接暴力解決,增加一個新欄位,那個老欄位直接作為垃圾欄位扔在那裡。

於是,給出建議:

1.根據業務,分不同index儲存當前業務的資料,有變動的時候,做大動作不影響其他業務。
2.儲存之前,第一次,做初始化,欄位型別自己指定,否則有可能elasticsearch預設給的型別會不滿足業務要求。