Elasticsearch數(shù)據(jù)類型及其屬性
一郑兴、數(shù)據(jù)類型
字段類型概述
一級分類 | 二級分類 | 具體類型 |
---|---|---|
核心類型 | 字符串類型 | string,text,keyword |
h | 整數(shù)類型 | integer,long,short,byte |
h | 浮點(diǎn)類型 | double,float,half_float,scaled_float |
h | 邏輯類型 | boolean |
h | 日期類型 | date |
h | 范圍類型 | range |
h | 二進(jìn)制類型 | binary |
復(fù)合類型 | 數(shù)組類型 | array |
f | 對象類型 | object |
f | 嵌套類型 | nested |
地理類型 | 地理坐標(biāo)類型 | geo_point |
d | 地理地圖 | geo_shape |
特殊類型 | IP類型 | ip |
t | 范圍類型 | completion |
t | 令牌計(jì)數(shù)類型 | token_count |
t | 附件類型 | attachment |
t | 抽取類型 | percolator |
核心類型
1矮台、字符串類型
string類型: 在ElasticSearch 舊版本中使用較多,從ElasticSearch 5.x開始不再支持string姻僧,由text和keyword類型替代。
text 類型:當(dāng)一個(gè)字段是要被全文搜索的傲须,比如Email內(nèi)容、產(chǎn)品描述趟脂,應(yīng)該使用text類型泰讽。設(shè)置text類型以后,字段內(nèi)容會被分析昔期,在生成倒排索引以前已卸,字符串會被分析器分成一個(gè)一個(gè)詞項(xiàng)。text類型的字段不用于排序硼一,很少用于聚合累澡。
keyword
keyword類型適用于索引結(jié)構(gòu)化的字段,比如email地址般贼、主機(jī)名愧哟、狀態(tài)碼和標(biāo)簽。如果字段需要進(jìn)行過濾(比如查找已發(fā)布博客中status屬性為published的文章)哼蛆、排序蕊梧、聚合。keyword類型的字段只能通過精確值搜索到腮介。-
2肥矢、整數(shù)類型
類型 取值范圍 byte -128~127 short -32768~32767 integer -231~231-1 short -263~263-1 在滿足需求的情況下,盡可能選擇范圍小的數(shù)據(jù)類型叠洗。比如甘改,某個(gè)字段的取值最大值不會超過100旅东,那么選擇byte類型即可。迄今為止吉尼斯記錄的人類的年齡的最大值為134歲十艾,對于年齡字段抵代,short足矣。字段的長度越短疟羹,索引和搜索的效率越高主守。
-
3禀倔、浮點(diǎn)類型
類型 取值范圍 doule 64位雙精度IEEE 754浮點(diǎn)類型 float 32位單精度IEEE 754浮點(diǎn)類型 half_float 16位半精度IEEE 754浮點(diǎn)類型 scaled_float 縮放類型的的浮點(diǎn)數(shù) 對于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鞋既,比如價(jià)格只需要精確到分力九,price為57.34的字段縮放因子為100,存起來就是5734
優(yōu)先考慮使用帶縮放因子的scaled_float浮點(diǎn)類型邑闺。 4跌前、date類型
日期類型表示格式可以是以下幾種:
(1)日期格式的字符串,比如 “2018-01-13” 或 “2018-01-13 12:10:30”
(2)long類型的毫秒數(shù)( milliseconds-since-the-epoch陡舅,epoch就是指UNIX誕生的UTC時(shí)間1970年1月1日0時(shí)0分0秒)
(3)integer的秒數(shù)(seconds-since-the-epoch)5抵乓、boolean類型 true和false
6、 binary類型
進(jìn)制字段是指用base64來表示索引中存儲的二進(jìn)制數(shù)據(jù)靶衍,可用來存儲二進(jìn)制形式的數(shù)據(jù)灾炭,例如圖像。默認(rèn)情況下颅眶,該類型的字段只存儲不索引蜈出。二進(jìn)制類型只支持index_name屬性。7涛酗、array類型
(1)字符數(shù)組: [ “one”, “two” ]
(2)整數(shù)數(shù)組: productid:[ 1, 2 ]
(3)對象(文檔)數(shù)組: “user”:[ { “name”: “Mary”, “age”: 12 }, { “name”: “John”, “age”: 10 }]铡原,
注意:lasticSearch不支持元素為多個(gè)數(shù)據(jù)類型:[ 10, “some string” ]8、 object類型
JSON對象商叹,文檔會包含嵌套的對象9眷蜈、ip類型
p類型的字段用于存儲IPv4或者IPv6的地址
二、Mapping 支持屬性
-
1沈自、enabled:僅存儲酌儒、不做搜索和聚合分析
"enabled":true (缺省)| false
-
2枯途、index:是否構(gòu)建倒排索引(即是否分詞忌怎,設(shè)置false籍滴,字段將不會被索引)
"index": true(缺省)| false
-
3榴啸、index_option:存儲倒排索引的哪些信息
4個(gè)可選參數(shù): docs:索引文檔號 freqs:文檔號+詞頻 positions:文檔號+詞頻+位置孽惰,通常用來距離查詢 offsets:文檔號+詞頻+位置+偏移量,通常被使用在高亮字段 分詞字段默認(rèn)是positions鸥印,其他默認(rèn)時(shí)docs "index_options": "docs"
-
4勋功、norms:是否歸一化相關(guān)參數(shù)、如果字段僅用于過濾和聚合分析库说、可關(guān)閉
分詞字段默認(rèn)配置狂鞋,不分詞字段:默認(rèn){“enable”: false},存儲長度因子和索引時(shí)boost潜的,建議對需要參加評分字段使用骚揍,會額外增加內(nèi)存消耗"norms": {"enable": true, "loading": "lazy"}
-
5、doc_value:是否開啟doc_value啰挪,用戶聚合和排序分析
對not_analyzed字段信不,默認(rèn)都是開啟,分詞字段不能使用亡呵,對排序和聚合能提升較大性能抽活,節(jié)約內(nèi)存"doc_value": true(缺省)| false
-
6锰什、fielddata:是否為text類型啟動fielddata下硕,實(shí)現(xiàn)排序和聚合分析
針對分詞字段,參與排序或聚合時(shí)能提高性能歇由,不分詞字段統(tǒng)一建議使用doc_value"fielddata": {"format": "disabled"}
-
7卵牍、store:是否單獨(dú)設(shè)置此字段的是否存儲而從_source字段中分離,只能搜索沦泌,不能獲取值
"store": false(默認(rèn))| true
-
8糊昙、coerce:是否開啟自動數(shù)據(jù)類型轉(zhuǎn)換功能,比如:字符串轉(zhuǎn)數(shù)字谢谦,浮點(diǎn)轉(zhuǎn)整型
"coerce: true(缺适臀)| false"
9、multifields:靈活使用多字段解決多樣的業(yè)務(wù)需求
-
11回挽、dynamic:控制mapping的自動更新
"dynamic": true(缺拭涣)| false | strict
1
-
12、data_detection:是否自動識別日期類型
"data_detection":true(缺是)| false
dynamic和data_detection的詳解:Elasticsearch dynamic mapping(動態(tài)映射) 策略.
-
13祭刚、analyzer:指定分詞器,默認(rèn)分詞器為standard analyzer
"analyzer": "ik"
-
14、boost:字段級別的分?jǐn)?shù)加權(quán)涡驮,默認(rèn)值是1.0
"boost": 1.23
-
15暗甥、fields:可以對一個(gè)字段提供多種索引模式,同一個(gè)字段的值捉捅,一個(gè)分詞撤防,一個(gè)不分詞
"fields": {"raw": {"type": "string", "index": "not_analyzed"}}
-
16、ignore_above:超過100個(gè)字符的文本棒口,將會被忽略寄月,不被索引
"ignore_above": 100
-
17、include_in_all:設(shè)置是否此字段包含在_all字段中无牵,默認(rèn)時(shí)true漾肮,除非index設(shè)置成no
"include_in_all": true
-
18、null_value:設(shè)置一些缺失字段的初始化合敦,只有string可以使用初橘,分詞字段的null值也會被分詞
"null_value": "NULL"
-
19验游、position_increament_gap:影響距離查詢或近似查詢充岛,可以設(shè)置在多值字段的數(shù)據(jù)上或分詞字段上,查詢時(shí)可以指定slop間隔耕蝉,默認(rèn)值時(shí)100
"position_increament_gap": 0
-
20崔梗、search_analyzer:設(shè)置搜索時(shí)的分詞器,默認(rèn)跟analyzer是一致的垒在,比如index時(shí)用standard+ngram蒜魄,搜索時(shí)用standard用來完成自動提示功能
"search_analyzer": "ik"
-
21、similarity:默認(rèn)時(shí)TF/IDF算法场躯,指定一個(gè)字段評分策略谈为,僅僅對字符串型和分詞類型有效
"similarity": "BM25"
-
22、trem_vector:默認(rèn)不存儲向量信息踢关,支持參數(shù)yes(term存儲)伞鲫,with_positions(term+位置),with_offsets(term+偏移量)签舞,with_positions_offsets(term+位置+偏移量)對快速高亮fast vector highlighter能提升性能秕脓,但開啟又會加大索引體積,不適合大數(shù)據(jù)量用
"trem_vector": "no"