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比作關系型數據庫的話,那么,映射就是建表,映射類型就是存儲引擎,字段類型就是字段類型