Elasticsearch 踩坑,小 Tips

elasticsearch 用起來還是比較簡單的,在大概掌握原理後,一般項目的基本需求還是能完成的,這裡整理了5 個小Tips,算是小編的踩坑心得了。


Elasticsearch 踩坑,小 Tips

祝你少走彎路


  1. 維護一個同步時間字段

就像是在mysql中我們一般強制為所有表都建立一個 create_time / update_time 字段一樣,elasticsearch 建議也單獨維護, 小編習慣上叫做 indexTime , 用來特指 es 加入索引的時間,同create_time 或者 update_time 字段分離。date 類型要注意 mapping 格式, 用來防止 utc 時區的問題。

  1. 為索引維護一個別名 (Alias)

elasticsearch 有別名的一系列api, 一個 index 可以設置多個 alias, 一個 alias 可以設置多個index。

使用別名的好處在於, 客戶端可以使用 別名來進行查詢,es 會自動根據別名找到具體的 index;

假設我們線上有一個index需要調整,我們可以新建一個index,然後後臺將數據同步過去,在同步完成之後將 alias 指到新建的 index上 ; 整個過程無需停機,客戶端也完全感知不到index的變動

,著實方便。

  1. 選擇合適的mapping

每個類型的映射(mapping)應當精心準備,事先對業務的每個字段進行設計。如:

  • 字符串是否需要分詞? 需要就使用 text 類型, 否則使用 keyword 類型, 使用text類型時最好帶上指定的 analyzer
  • 數字和布爾類型選擇對應的 類型,而不要使用 字符串;
  • 哪些字段連檢索都不需要,僅僅查詢的是否能返回即可?
  • 禁止自動修改mapping : 設置 dynamic = strict
  1. 每個index僅包含1個type

es 早期是支持一個index中多個type的,而新版本已經不支持多type,後續甚至要刪除對應api,因此為了以後方便,

建議 一個 index 僅包含一個 type;

這個和我們一個mysql實例僅建立一個 database ; redis 僅使用 db0 有類型的內在要求,都是為了減少高併發、集群、未來擴展的麻煩

  1. 充分利用es自帶的緩存

儘管我們使用了es,不代表我們的查詢需求都是全文檢索,業務上儘量充分利用 es 的 bool 查詢,配合 should , must , must_not , filter 等嵌套語句, 預先過濾字段,減少每次查詢召回的集合,從而提升檢索性能


Elasticsearch 踩坑,小 Tips


分享到:


相關文章: