Elasticsearch Mapping 详解
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比作關系型數據庫的話,那么,映射就是建表,映射類型就是存儲引擎,字段類型就是字段類
總結
以上是生活随笔為你收集整理的Elasticsearch Mapping 详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工业界推荐系统实用分析技巧
- 下一篇: OCPC 广告算法在凤凰新媒体的实践探索