Elasticsearch資料型別及其屬性
Elasticsearch資料型別及其屬性
一、資料型別
欄位型別概述
一級分類 | 二級分類 | 具體型別 |
---|---|---|
核心型別 | 字串型別 | string,text,keyword |
h | 整數型別 | integer,long,short,byte |
h | 浮點型別 | double,float,half_float,scaled_float |
h | 邏輯型別 | boolean |
h | 日期型別 | date |
h | 範圍型別 | range |
h | 二進位制型別 | binary |
複合型別 | 陣列型別 | array |
f | 物件型別 | object |
f | 巢狀型別 | nested |
地理型別 | 地理座標型別 | geo_point |
d | 地理地圖 | geo_shape |
特殊型別 | IP型別 | ip |
t | 範圍型別 | completion |
t | 令牌計數型別 | token_count |
t | 附件型別 | attachment |
t | 抽取型別 | percolator |
核心型別
1、字串型別
string型別: 在ElasticSearch 舊版本中使用較多,從ElasticSearch 5.x開始不再支援string,由text和keyword型別替代。
text 型別:當一個欄位是要被全文搜尋的,比如Email內容、產品描述,應該使用text型別。設定text型別以後,欄位內容會被分析,在生成倒排索引以前,字串會被分析器分成一個一個詞項。text型別的欄位不用於排序,很少用於聚合。
keyword
keyword型別適用於索引結構化的欄位,比如email地址、主機名、狀態碼和標籤。如果欄位需要進行過濾(比如查詢已釋出部落格中status屬性為published的文章)、排序、聚合。keyword型別的欄位只能通過精確值搜尋到。-
2、整數型別
型別 取值範圍 byte -128~127 short -32768~32767 integer -231~231-1 short -263~263-1 在滿足需求的情況下,儘可能選擇範圍小的資料型別。比如,某個欄位的取值最大值不會超過100,那麼選擇byte型別即可。迄今為止吉尼斯記錄的人類的年齡的最大值為134歲,對於年齡欄位,short足矣。欄位的長度越短,索引和搜尋的效率越高。
-
3、浮點型別
型別 取值範圍 doule 64位雙精度IEEE 754浮點型別 float 32位單精度IEEE 754浮點型別 half_float 16位半精度IEEE 754浮點型別 scaled_float 縮放型別的的浮點數 對於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浮點型別。 4、date型別
日期型別表示格式可以是以下幾種:
(1)日期格式的字串,比如 “2018-01-13” 或 “2018-01-13 12:10:30”
(2)long型別的毫秒數( milliseconds-since-the-epoch,epoch就是指UNIX誕生的UTC時間1970年1月1日0時0分0秒)
(3)integer的秒數(seconds-since-the-epoch)5、boolean型別 true和false
6、 binary型別
進位制欄位是指用base64來表示索引中儲存的二進位制資料,可用來儲存二進位制形式的資料,例如影像。預設情況下,該型別的欄位只儲存不索引。二進位制型別只支援index_name屬性。7、array型別
(1)字元陣列: [ “one”, “two” ]
(2)整數陣列: productid:[ 1, 2 ]
(3)物件(文件)陣列: “user”:[ { “name”: “Mary”, “age”: 12 }, { “name”: “John”, “age”: 10 }],
注意:lasticSearch不支援元素為多個資料型別:[ 10, “some string” ]8、 object型別
JSON物件,文件會包含巢狀的物件9、ip型別
p型別的欄位用於儲存IPv4或者IPv6的地址
二、Mapping 支援屬性
-
1、enabled:僅儲存、不做搜尋和聚合分析
"enabled":true (預設)| false
-
2、index:是否構建倒排索引(即是否分詞,設定false,欄位將不會被索引)
"index": true(預設)| false
-
3、index_option:儲存倒排索引的哪些資訊
4個可選引數: docs:索引文件號 freqs:文件號+詞頻 positions:文件號+詞頻+位置,通常用來距離查詢 offsets:文件號+詞頻+位置+偏移量,通常被使用在高亮欄位 分詞欄位預設是positions,其他預設時docs "index_options": "docs"
-
4、norms:是否歸一化相關引數、如果欄位僅用於過濾和聚合分析、可關閉
分詞欄位預設配置,不分詞欄位:預設{“enable”: false},儲存長度因子和索引時boost,建議對需要參加評分欄位使用,會額外增加記憶體消耗"norms": {"enable": true, "loading": "lazy"}
-
5、doc_value:是否開啟doc_value,使用者聚合和排序分析
對not_analyzed欄位,預設都是開啟,分詞欄位不能使用,對排序和聚合能提升較大效能,節約記憶體"doc_value": true(預設)| false
-
6、fielddata:是否為text型別啟動fielddata,實現排序和聚合分析
針對分詞欄位,參與排序或聚合時能提高效能,不分詞欄位統一建議使用doc_value"fielddata": {"format": "disabled"}
-
7、store:是否單獨設定此欄位的是否儲存而從_source欄位中分離,只能搜尋,不能獲取值
"store": false(預設)| true
-
8、coerce:是否開啟自動資料型別轉換功能,比如:字串轉數字,浮點轉整型
"coerce: true(預設)| false"
9、multifields:靈活使用多欄位解決多樣的業務需求
-
11、dynamic:控制mapping的自動更新
"dynamic": true(預設)| false | strict
1
-
12、data_detection:是否自動識別日期型別
"data_detection":true(預設)| false
dynamic和data_detection的詳解:Elasticsearch dynamic mapping(動態對映) 策略.
-
13、analyzer:指定分詞器,預設分詞器為standard analyzer
"analyzer": "ik"
-
14、boost:欄位級別的分數加權,預設值是1.0
"boost": 1.23
-
15、fields:可以對一個欄位提供多種索引模式,同一個欄位的值,一個分詞,一個不分詞
"fields": {"raw": {"type": "string", "index": "not_analyzed"}}
-
16、ignore_above:超過100個字元的文字,將會被忽略,不被索引
"ignore_above": 100
-
17、include_in_all:設定是否此欄位包含在_all欄位中,預設時true,除非index設定成no
"include_in_all": true
-
18、null_value:設定一些缺失欄位的初始化,只有string可以使用,分詞欄位的null值也會被分詞
"null_value": "NULL"
-
19、position_increament_gap:影響距離查詢或近似查詢,可以設定在多值欄位的資料上或分詞欄位上,查詢時可以指定slop間隔,預設值時100
"position_increament_gap": 0
-
20、search_analyzer:設定搜尋時的分詞器,預設跟analyzer是一致的,比如index時用standard+ngram,搜尋時用standard用來完成自動提示功能
"search_analyzer": "ik"
-
21、similarity:預設時TF/IDF演算法,指定一個欄位評分策略,僅僅對字串型和分詞型別有效
"similarity": "BM25"
-
22、trem_vector:預設不儲存向量資訊,支援引數yes(term儲存),with_positions(term+位置),with_offsets(term+偏移量),with_positions_offsets(term+位置+偏移量)對快速高亮fast vector highlighter能提升效能,但開啟又會加大索引體積,不適合大資料量用
"trem_vector": "no"
三、Mapping 欄位設定流程
相關文章
- Javascript判斷資料型別的五種方式及其特殊性JavaScript資料型別
- JavaScript的資料型別及其檢測JavaScript資料型別
- JavaScript資料型別分析及其轉換JavaScript資料型別
- Symbol 及其 屬性Symbol
- C# 隨機給一個全部資訊都未知的類型別,如何獲取該類的類名、屬性個數、屬性名、屬性的資料型別、屬性值?C#隨機資料型別
- 基本資料型別及其包裝類(一)資料型別
- 基本資料型別及其包裝類(二)資料型別
- javascript基礎(物件,物件屬性,屬性基本和引用資料型別,字面量建立物件,垃圾回收,屬性的列舉)(十三)JavaScript物件資料型別
- 定義物料型別的屬性型別
- C#資料型別及其轉換詳解C#資料型別
- javascript中的資料型別及其常見用法JavaScript資料型別
- js中為什麼基本型別資料可以使用屬性和方法JS型別
- 物件導向--內部屬性型別物件型別
- String型別的屬性和方法型別
- 產品集型別和屬性表型別
- Redis 資料型別及其使用場景 String 篇Redis資料型別
- Redis In Action 筆記(一):基本資料型別及其操作Redis筆記資料型別
- 獲取物件屬性型別、屬性名稱、屬性值的研究:反射和JEXL解析引擎物件型別反射
- MySQL 資料庫的對庫的操作及其資料型別悔鋒MySql資料庫資料型別
- 型別“Observable”上不存在屬性“map”型別
- 【全棧React】第8天: 屬性型別全棧React型別
- js資料型別之基本資料型別和引用資料型別JS資料型別
- 資料型別: 資料型別有哪些?資料型別
- Android NDK開發之旅11 JNI JNI資料型別與方法屬性訪問Android資料型別
- Redis常用資料型別及其儲存結構(原始碼篇)Redis資料型別原始碼
- 作用域、連結屬性和儲存型別型別
- Hibernate 對映xml中的屬性型別XML型別
- 強資料型別和弱資料型別資料型別
- 區別值型別資料和引用型別資料型別
- 微信使用者屬性資料:性別比例和年齡比例
- 資料型別,型別轉換資料型別
- 常見python資料型別及其相對應的函式Python資料型別函式
- Jackson序列化日期型別的屬性型別
- 資料型別資料型別
- JavaScript物件的資料屬性與訪問器屬性JavaScript物件
- java基礎學習之二:變數、基本資料型別及其對應的包裝型別Java變數資料型別
- 3. php資料型別、資料型別轉換PHP資料型別
- JAVA中基本資料型別和引用資料型別Java資料型別