天天看點

Elasticsearch核心技術(三):Mapping設定

Mapping是Elasticsearch中資料模組化的基礎,本文從Mapping簡介、Dynamic Mapping、自定義Mapping和Mapping常用參數說明4個部分介紹Elasticsearch如何設定Mapping。

Mapping類似資料庫中的表定義,主要作用如下:

定義索引下的字段名

定義字段的類型,比如數值型、字元串型、布爾型等

定義反向索引相關的配置,比如是否索引、記錄position等

使用API擷取Mapping:

request:<code>GET /test_index/_mapping</code>

response:

核心資料類型

字元串型:text、keyword

數值型:long、integer、short、byte、double、float、half_float、scaled_float

日期類型:date

布爾類型:boolean

二進制類型:binary

範圍類型:integer_range、float_range、long_range、double_range、data_range

複雜類型

數組類型:array

對象類型:object

嵌套類型:nested object

特殊類型

地理位置:geo_point、geo_shape、

IP位址:IPv4、IPv6

自動補全:complete

percolator

多字段特性:multi-fields

允許對同一字段采用不同的配置,比如分詞,常見例子如對人名實作拼音搜尋

實作方式:在人名中新增一個子字段為pinyin即可

在文檔寫入的時候,如果索引不存在,會自動建立索引

Dynamic Mapping的機制,使得無需手動定義Mapping,Elasticsearch會自動識别字段的類型,進而降低使用者的使用成本

但是有時候會推算的不對,例如位址位置資訊

當類型如果設定不對時,會導緻一些功能無法正常使用,例如Range查詢

ES依靠JSON文檔的字段類型來實作自動識别字段類型,支援的類型如下:

JSON類型

ES類型

null

忽略

boolean

浮點類型

float

整數

long

object

array

由第一個非null值的類型決定

string

比對日期格式,設定為Date(預設開啟);比對數字,設定為float或者long(預設關閉);設定為Text,并且增加keyword子字段

當建立Index的時候,dynamic字段可以設定成3種值:true、false、strict。

例如:

true

false

strict

文檔可索引

字段可索引

Mapping被更新

說明:

當設定成true的時候,文檔可以被索引,字段可以被搜尋,Mapping檔案可以更新。

當dynamic被設定成false的時候,新增字段的資料可以寫入ES;該資料可以被索引,但是新增字段不可被搜尋。

當設定成strict的時候,資料寫入直接報錯。

自定義Mapping的一些建議

可以參考API手冊,純手寫

為了減少工作量,減少出錯率,可以參考以下步驟:

建立一個臨時的index,寫入一些樣本資料

通過通路Mapping API獲得該臨時文本的動态Mapping定義

修改後,使用該配置建立索引

删除臨時索引

ES能否更改Mapping的字段類型,需要分兩種情況進行分析。

1. 新增字段

dynamic設定為true(預設值)時,一旦有新增字段的文檔寫入,Mapping也同時被更新。

dynamic設定為false時,Mapping不會被更新,更新字段的資料無法被索引,但是資訊會出現在_source中,換言之,文檔可以正常寫入,但是無法對字段進行搜尋。

dynamic設定為strict時,文檔寫入失敗。

2. 對已有字段,一旦已經有資料寫入,就不再支援修改字段定義。因為ES是基于Lucene實作的反向索引,一旦生成後,就不允許修改。因為如果修改了字段的資料類型,會導緻已被索引的資料無法被搜尋。如果希望修改字段類型,必須使用Reindex API進行重建索引。

copy_to

将該字段複制到目标字段,實作類似_all的作用;不會出現在_source中,隻用來搜尋

index

控制目前字段是否索引,預設為true,即記錄索引,false不記錄,即不可搜尋。

例如某些場景希望敏感資訊不用來做搜尋,可以将index設定為false,則不可以用來搜尋,也可以節省空間。

index_option用于控制反向索引記錄的内容,有4種配置:

docs隻記錄doc id

freqs記錄doc id和term frequencies

positions記錄doc id、term frequencies和term position

offsets記錄doc id、term frequencies、term position和character offsets

text類型預設配置為positions。其他預設是docs。當然記錄内容越多,占用空間越大。

null_value

當字段遇到null值時的處理政策,預設為null,即空值,此時es會忽略該值;可以通過設定該屬性設定字段的預設值。

更多常用參數可以參考:https://www.elastic.co/guide/en/elasticsearch/reference/7.1/mapping-params.html

由于部落客也是在攀登的路上,文中可能存在不當之處,歡迎各位多指教! 如果文章對您有用,那麼請點個”推薦“,以資鼓勵!

繼續閱讀