1. Mapping(映射) Mapping 是定義文檔及其包含的欄位是如何存儲和索引的過程 例如,我們用映射來定義: 哪些字元串欄位應該被當做全文欄位 哪些欄位包含數字、日期或地理位置 是否應該將文檔中所有欄位的值索引到catch-all欄位中 1.1. Mapping Type(映射類型) 每個 ...
1. Mapping(映射)
Mapping 是定義文檔及其包含的欄位是如何存儲和索引的過程
例如,我們用映射來定義:
- 哪些字元串欄位應該被當做全文欄位
- 哪些欄位包含數字、日期或地理位置
- 是否應該將文檔中所有欄位的值索引到catch-all欄位中
1.1. Mapping Type(映射類型)
每個索引都有一個映射類型,以決定文檔將被如何索引
映射類型包含兩部分:
Meta-fields
Meta-fields通常用於自定義文檔的元數據。例如,meta-fields包括文檔的 _index, _type, _id, _source等欄位
Fields 或 properties
一個映射類型包含一個欄位列表或屬性列表
1.2. Field datatypes(欄位數據類型)
每個欄位有一個數據類型,它可以是下列之一:
- 簡單類型,比如 text, keyword, date, long, double, boolean , ip
- 支持JSON層級結構的類型,比如 object 或者 nested
- 特別的類型,比如 geo_point, geo_shape, completion
1.3. Example mapping
curl -X PUT "localhost:9200/my_index" -H 'Content-Type: application/json' -d' { "mappings": { "doc": { "properties": { "title": { "type": "text" }, "name": { "type": "text" }, "age": { "type": "integer" }, "created": { "type": "date", "format": "strict_date_optional_time||epoch_millis" } } } } } '
創建一個索引名字叫“my_index”,並且添加一個映射類型叫“doc”,包含4個欄位
2. Field datatypes(欄位類型)
2.1. 核心類型
字元串類型
text , keyword
數值類型
long , integer , short , byte , double , float , half_float , scaled_float
日期類型
date
布爾類型
boolean
二進位類型
binary
範圍類型
integer_range , float_range , long_range , double_range , date_range
2.2. 複雜類型
數組類型
數組不需要一個專門的類型
對象類型
object (PS:單個JSON對象)
內嵌類型
nested(PS:JSON對象數組)
2.3. 地理類型
Geo_point類型
geo_point 用於地理位置經緯度坐標
Geo_shape類型
geo_shape 用於複雜形狀
2.4. 專門的數據類型
IP類型
ip (用於IPv4和IPv6地址)
Completion類型
completion (用於自動補全提示)
Token count 類型
token_count (用於計數字元串中的token)
mapper-murmur3
murmur3 (計算值的hashcode,並將其存儲到索引中)
過濾器類型
接受一個查詢語句
join 類型
為同一索引內的文檔定義父/子關係
3. Meta-fields(元數據欄位)
每個文檔都有與之關聯的元數據
3.1. 標識 元數據欄位
_index 文檔屬於哪個索引
_id 文檔ID
_type 文檔的映射類型
_uid 由 _type和 _id組成的一個組合欄位
3.2. 文檔來源 元數據欄位
_source 文檔的原始JSON
_size _source欄位的長度(多少位元組)
3.3. 索引 元數據欄位
_all 索引其它欄位的值,預設情況下是禁用的
_field_names 所有非空欄位
3.4. 路由 元數據欄位
_routing 一個自定義的路由值,用於分片的
3.5. 其它 元數據欄位
_meta 其它
4. 小結
如果把Elasticsearch比作關係型資料庫的話,那麼,映射就是建表,映射類型就是存儲引擎,欄位類型就是欄位類型