天天看點

設定檔案副本數_ElasticSearch 索引設定總結

在使用ES時,我們常見的就是需要生成一個template來定義索引的設定,分詞器,Mapping.本文将基于項目經驗來總結一些常用的配置。

Index設定

  •  index.refresh_interval 

      配置一個重新整理時間,将index buffer重新整理到os cache的時間間隔,重新整理到os cache的資料才可以被索引到,預設是1s.如果對實時性搜尋要求不高的地方,可設定時間為30s,提高性能。

  • number_of_replicas

       對于叢集資料節點 >=2 的場景,建議副本至少設定為 1(一主一從,共兩個副本), 可以提高叢集容錯和搜尋吞吐量(副本分片可用于查詢)。

  • index.number_of_shards

     主副本的分片數,預設是5個,最大值限制為1024個,這個值是分片數可适當的增加,提高索引的并發性能,但是分片越多,也會導緻資源耗費越高,索引要根據通路并發數和ES叢集的資源來設定。經驗公式:分片數 = 索引大小/分片大小經驗值 30GB,官方推薦Shard值在 20-40GB性能最好,日志類:單分片<50GB;搜尋類:單分片<20GB。不足100G,可直接設定3-5個分片(結合節點數和擴充性),超過100G則可以按照如上經驗公式來規劃。

  • index.max_result_window

    索引能夠查詢到最大資料量,from+size深分頁的最大條數,預設是10000,适當限制這個值可以防止深分頁記憶體占用過多,如果全量導出,需要使用Scroll遊标辦法。

  • index.store.preload

     預設情況下,Elasticsearch完全依靠作業系統檔案系統緩存來緩存I / O操作.可以設定index.store.preload,以告知作業系統在打開時将熱索引檔案的内容加載到記憶體中。預設值為空,即不提前加載索引到記憶體中,常見的值有["nvd", "dvd", "tim", "doc", "dim"]。對應的norms, doc values, terms dictionaries, postings lists, points,常見的設定為 index.store.preload = ["nvd", "dvd"],即提前加載norms評分資訊和doc value資料到記憶體,便于快速索引。

  • index.sort.field  和 index.sort.order

      建立索引的排序字段,寫入的時候就按照順序寫入。對于一些具備順序的字段,可以提前設定,比如時間字段。配置見下

{    "settings" : {        "index" : {            "sort.field" : "date",  // 字段名字            "sort.order" : "desc"   // 升序 asc 和降序 desc        }    }}
           

Mapping設定

  •  動态映射

 mapping的通用配置,dynamic_templates配置動态類型轉換,将一個類型轉換為另一個類型

{  "mappings": {    "_doc": {      "dynamic_templates": [        {          "strings_as_keywords": {            "match_mapping_type": "string",            "mapping": {              "type": "keyword"            }          }        }      ],      "_source": {        "enabled": true      },      "properties": {        .....      }    }  }}
           
  •  字段類型  

    官方文檔:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/mapping.html#_field_datatypes

     a simple type like 

text

keyword

date

long

double

boolean

 or 

ip

.

     a type which supports the hierarchical nature of JSON such as 

object

 or 

nested

.

    or a specialised type like 

geo_point

geo_shape

, or 

completion

.

  •  常見的類型和搜尋類型的聯系

    (1)text 類型作用:分詞,将大段的文字根據分詞器切分成獨立的詞或者詞組,以便全文檢索。

       适用于:email 内容、某産品的描述等需要分詞全文檢索的字段;

       不适用:排序或聚合(Significant Terms 聚合例外)

    (2)keyword 類型:無需分詞、整段完整精确比對。

       适用于:email 位址、住址、狀态碼、分類 tags。

  • 常見的搜尋類型使用的字段類型

      term 精确比對

         核心功能:不受到分詞器的影響,屬于完整的精确比對。

         應用場景:精确、精準比對。

         适用類型:keyword。

     prefix 字首比對

         核心功能:字首比對。

         應用場景:字首自動補全的業務場景。

         适用類型:keyword。

    wildcard 模糊比對

         核心功能:比對具有比對通配符表達式 keyword 類型的文檔。支援的通配符:*,它比對任何字元序列(包括空字元序列);?,它比對任何單個字元。

         應用 場景:請注意,選型務必要慎重!此查詢可能很慢多組關鍵次的情況下可能會導緻當機,因為它需要周遊多個術語。為了防止非常慢的通配符查詢,通配符  不能以任何一個通配符*或?開頭。

         适用類型:keyword。

      match 分詞比對

         核心功能:全文檢索,分詞詞項比對。

         應用場景:實際業務中較少使用,原因:比對範圍太寬泛,不夠準确。

         适用類型:text。

       match_phrase 短語比對

         核心功能:match_phrase 查詢首先将查詢字元串解析成一個詞項清單,然後對這些詞項進行搜尋; 隻保留那些包含 全部 搜尋詞項,且 位置"position" 與搜尋詞 項相同的文檔。

         應用場景:業務開發中 90%+ 的全文檢索都會使用 match_phrase 或者 query_string 類型,而不是 match。

         适用類型:text。

       multi_match 多組比對

          核心功能:match query 針對多字段的更新版本。

          應用場景:多字段檢索。

          适用類型:text。

      query_string 類型

         核心功能:支援與或非表達式+其他N多配置參數。

        應用場景:業務系統需要支援自定義表達式檢索。

        适用類型:text。

      bool 組合比對

         核心功能:多條件組合綜合查詢。

         應用場景:支援多條件組合查詢的場景。

         适用類型:text 或者 keyword。一個 bool 過濾器由三部分組成:

         must ——所有的語句都 必須(must) 比對,與 AND 等價。

         must_not ——所有的語句都 不能(must not) 比對,與 NOT 等價。

         should ——至少有一個語句要比對,與 OR 等價。

         filter——必須比對,運作在非評分&過濾模式。

      range範圍搜尋類型

         适用類型:long,integer,double或者 date

  • Mapping 字段的參數設定

設定檔案副本數_ElasticSearch 索引設定總結

          (1)index,反向索引,not_analyzed,注意是否分詞,盡量精簡schema字段個數,不會被檢索的字段就不要建立倒排。.field("index", "no")

          (2)doc values,正排索引,用于聚合或者排序

          (3)norms,analyzed norms存儲了多種正則化算子,用于docs的排序評分,如果不需要排序,可以disable norms

          (4)index_options,有docs(文檔有無), freqs(重複出現的文檔評分更高), positions(涵蓋了前2種,并且多了位置資訊,用于臨近查詢), offsets(全部,用于高亮)四類

  • ES  索引template模闆參考例子

  • PUT _template/test_template{  "index_patterns": [    "test_index_*",    "test_*"  ],  "settings": {    "number_of_shards": 1,    "number_of_replicas": 1,    "max_result_window": 100000,    "refresh_interval": "30s"  },  "mappings": {    "properties": {      "id": {        "type": "long"      },      "title": {        "type": "keyword"      },      "content": {        "analyzer": "ik_max_word",        "type": "text",        "fields": {          "keyword": {            "ignore_above": 256,            "type": "keyword"          }        }      },      "available": {        "type": "boolean"      },      "review": {        "type": "nested",        "properties": {          "nickname": {            "type": "text"          },          "text": {            "type": "text"          },          "stars": {            "type": "integer"          }        }      },      "publish_time": {        "type": "date",        "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"      },      "expected_attendees": {        "type": "integer_range"      },      "ip_addr": {        "type": "ip"      },      "suggest": {        "type": "completion"      }    }  }}
               
設定檔案副本數_ElasticSearch 索引設定總結