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比作關係型資料庫的話,那麼,對映就是建表,對映型別就是儲存引擎,欄位型別就是欄位型別