ElasticSearch 字段型別介紹

2022-01-15 10:47:10 字數 2707 閱讀 1455

對elasticsearch稍有了解的人都知道, 前者的字串被稱為not-analyzed字元, 而後者被稱作analyzed字串。

text:

會分詞,然後進行索引

支援模糊、精確查詢

不支援聚合

keyword:

不進行分詞,直接索引

支援模糊、精確查詢

支援聚合

string型別在elasticsearch 舊版本中使用較多,從elasticsearch 5.x開始不再支援string,由text和keyword型別替代。

當乙個欄位是要被全文搜尋的,比如email內容、產品描述,應該使用text型別。設定text型別以後,字段內容會被分析,在生成倒排索引以前,字串會被分析器分成乙個乙個詞項。text型別的字段不用於排序,很少用於聚合。

put my_index}}

}}}

}}}

ignore_above忽略長度超過256字串。

這就是造成部分欄位還會自動生成乙個與之對應的「.keyword」欄位的原因。

乙個字串字段可以對映為text欄位用於全文本搜尋,也可以對映為keyword欄位用於排序或聚合,這時候需要用到fields設定多欄位。如果業務關係中,需要該欄位支援兩種型別的查詢,可以設定為如下形式:

put my_index}}

}}}}

name.raw欄位是name欄位的keyword版本。

keyword型別適用於索引結構化的字段,比如email位址、主機名、狀態碼和標籤。如果字段需要進行過濾(比如查詢已發布部落格中status屬性為published的文章)、排序、聚合。keyword型別的字段只能通過精確值搜尋到。

在滿足需求的情況下,盡可能選擇範圍小的資料型別。比如,某個欄位的取值最大值不會超過100,那麼選擇byte型別即可。迄今為止吉尼斯記錄的人類的年齡的最大值為134歲,對於年齡字段,short足矣欄位的長度越短,索引和搜尋的效率越高。

對於float、half_float和scaled_float,-0.0和+0.0是不同的值,使用term查詢查詢-0.0不會匹配+0.0,同樣range查詢中上邊界是-0.0不會匹配+0.0,下邊界是+0.0不會匹配-0.0。

其中scaled_float,比如**只需要精確到分,price為57.34的字段縮放因子為100,存起來就是5734。

優先考慮使用帶縮放因子的scaled_float浮點型別。日期型別表示格式可以是以下幾種:

1.日期格式的字串,比如 「2018-01-13」 或 「2018-01-13

12:10:30

」2.long型別的毫秒數( milliseconds-since-the-epoch,epoch就是指unix誕生的utc時間2023年1月1日0時0分0秒)

3.integer的秒數(seconds-since-the-epoch)

elasticsearch 內部會將日期資料轉換為utc,並儲存為milliseconds-since-the-epoch的long型整數。

例子:日期格式資料

"

properties":

}

邏輯型別(布林型別)可以接受true/false/」true」/」false」值

"

properties":

}

二進位製字段是指用base64來表示索引中儲存的二進位制資料,可用來儲存二進位制形式的資料,例如影象。預設情況下,該型別的字段只儲存不索引。二進位制型別只支援index_name屬性。

在elasticsearch中,沒有專門的陣列(array)資料型別,但是,在預設情況下,任意乙個欄位都可以包含0或多個值,這意味著每個字段預設都是陣列型別,只不過,陣列型別的各個元素值的資料型別必須相同。在elasticsearch中,陣列是開箱即用的(out of box),不需要進行任何配置,就可以直接使用。

在同乙個陣列中,陣列元素的資料型別是相同的,elasticsearch不支援元素為多個資料型別:[ 10, 「some string」 ],常用的陣列型別是:

字元陣列: [ 「one」, 「two」 ]

整數陣列: productid:[

1, 2

]物件(文件)陣列:

「user」:[ , ],

elasticsearch內部把物件陣列展開為

ip型別的字段用於儲存ipv4或者ipv6的位址

put my-index}}}

put my-index/_doc/1

ipv4 的 ip 位址含有4個 bytes,而每個 byte 含有8個 digits。/16 即表示前面的 16 位的 digits,也即 192.168。我們可以這麼說任何乙個 ip 位址位於 192.168.0.0 至 192.168.255.255 都在這個範圍內。

get my-index/_search

}}

elasticsearch 大字段高亮速度慢優化

description 配置該引數後,能明顯看到高亮速度快了很多。但是,當輸入某些查詢詞時,可能會遇到如下錯誤 錯誤lucense解析欄位中的空格導致的。解決方案 把空格term,使用filter過濾掉。但是,在新增空格filter時,發現乙個問題,就是使用jieba分詞器,就算新增了如下filte...

elasticsearch欄位屬性值截斷為32位

1.問題 es中資料長度過長,表字段的長度 沒那麼長,儲存不了資料,導致報錯 2.解決方案 將es中orgid 2efc32ee89074e919afa2219e3cace53的租戶資料中,personname屬性值截斷為32位。1 索引名 addressbook user 2 查詢條件 orgid...

修改elasticsearch欄位資料型別

以下操作基於elasticsearch版本 5.4 elasticsearch最新版本7.x不適合 說明 所有操作都在elasticsearch外掛程式中進行。如果你沒有外掛程式,理會其精神,也是可以使用命令列操作的。首先需明確一點 elasticsearch中字段的資料型別無法做更新處理,這不像m...