1、 什麼是mapping
PUT /myindex/article/1
{
"post_date": "2018-05-10",
"title": "Java",
"content": "java is the best language",
"author_id": 119
}
PUT /myindex/article/2
{
"post_date": "2018-05-12",
"title": "html",
"content": "I like html",
"author_id": 120
}
PUT /myindex/article/3
{
"post_date": "2018-05-16",
"title": "es",
"content": "Es is distributed document store",
"author_id": 110
}
GET /myindex/article/_search?q=2018-05
GET /myindex/article/_search?q=2018-05-10
GET /myindex/article/_search?q=html
GET /myindex/article/_search?q=java
#查看es自動創建的mapping
GET /myindex/article/_mapping
es自動創建了index,type,以及type對應的mapping(dynamic mapping)
什麼是映射:mapping定義了type中的每個字段的數據類型以及這些字段如何分詞等相關屬性
{
"myindex": {
"mappings": {
"article": {
"properties": {
"author_id": {
"type": "long"
},
"content": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"post_date": {
"type": "date"
},
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
創建索引的時候,可以預先定義字段的類型以及相關屬性,這樣就能夠把日期字段處理成日期,把數字字段處理成數字,把字符串字段處理字符串值等
支持的數據類型:
(1)核心數據類型(Core datatypes)
字符型:string,string類型包括
text 和 keyword
text類型被用來索引長文本,在建立索引前會將這些文本進行分詞,轉化爲詞的組合,建立索引。允許es來檢索這些詞語。text類型不能用來排序和聚合。
Keyword類型不需要進行分詞,可以被用來檢索過濾、排序和聚合。keyword 類型字段只能用本身來進行檢索
數字型:long, integer, short, byte, double, float
日期型:date
布爾型:boolean
二進制型:binary
(2)複雜數據類型(Complex datatypes)
數組類型(Array datatype):數組類型不需要專門指定數組元素的type,例如:
字符型數組: [ "one", "two" ]
整型數組:[ 1, 2 ]
數組型數組:[ 1, [ 2, 3 ]] 等價於[ 1, 2, 3 ]
對象數組:[ { "name": "Mary", "age": 12 }, { "name": "John", "age": 10 }]
對象類型(Object datatype):_ object _ 用於單個JSON對象;
嵌套類型(Nested datatype):_ nested _ 用於JSON數組;
(3)地理位置類型(Geo datatypes)
地理座標類型(Geo-point datatype):_ geo_point _ 用於經緯度座標;
地理形狀類型(Geo-Shape datatype):_ geo_shape _ 用於類似於多邊形的複雜形狀;
(4)特定類型(Specialised datatypes)
IPv4 類型(IPv4 datatype):_ ip _ 用於IPv4 地址;
Completion 類型(Completion datatype):_ completion _提供自動補全建議;
Token count 類型(Token count datatype):_ token_count _ 用於統計做了標記的字段的index數目,該值會一直增加,不會因爲過濾條件而減少。
mapper-murmur3
類型:通過插件,可以通過 _ murmur3 _ 來計算 index 的 hash 值;
附加類型(Attachment datatype):採用 mapper-attachments
插件,可支持_ attachments _ 索引,例如 Microsoft Office 格式,Open Document 格式,ePub, HTML 等。
支持的屬性:
“store”:false//是否單獨設置此字段的是否存儲而從_source字段中分離,默認是false,只能搜索,不能獲取值
“index”: true//分詞,不分詞是:false
,設置成false,字段將不會被索引
“analyzer”:“ik”//指定分詞器,默認分詞器爲standard analyzer
“boost”:1.23//字段級別的分數加權,默認值是1.0
“doc_values”:false//對not_analyzed字段,默認都是開啓,分詞字段不能使用,對排序和聚合能提升較大性能,節約內存
“fielddata”:{“format”:“disabled”}//針對分詞字段,參與排序或聚合時能提高性能,不分詞字段統一建議使用doc_value
“fields”:{“raw”:{“type”:“string”,“index”:“not_analyzed”}} //可以對一個字段提供多種索引模式,同一個字段的值,一個分詞,一個不分詞
“ignore_above”:100 //超過100個字符的文本,將會被忽略,不被索引
“include_in_all”:ture//設置是否此字段包含在_all字段中,默認是true,除非index設置成no選項
“index_options”:“docs”//4個可選參數docs(索引文檔號) ,freqs(文檔號+詞頻),positions(文檔號+詞頻+位置,通常用來距離查詢),offsets(文檔號+詞頻+位置+偏移量,通常被使用在高亮字段)分詞字段默認是position,其他的默認是docs
“norms”:{“enable”:true,“loading”:“lazy”}//分詞字段默認配置,不分詞字段:默認{“enable”:false},存儲長度因子和索引時boost,建議對需要參與評分字段使用 ,會額外增加內存消耗量
“null_value”:“NULL”//設置一些缺失字段的初始化值,只有string可以使用,分詞字段的null值也會被分詞
“position_increament_gap”:0//影響距離查詢或近似查詢,可以設置在多值字段的數據上火分詞字段上,查詢時可指定slop間隔,默認值是100
“search_analyzer”:“ik”//設置搜索時的分詞器,默認跟ananlyzer是一致的,比如index時用standard+ngram,搜索時用standard用來完成自動提示功能
“similarity”:“BM25”//默認是TF/IDF算法,指定一個字段評分策略,僅僅對字符串型和分詞類型有效
“term_vector”:“no”//默認不存儲向量信息,支持參數yes(term存儲),with_positions(term+位置),with_offsets(term+偏移量),with_positions_offsets(term+位置+偏移量) 對快速高亮fast vector highlighter能提升性能,但開啓又會加大索引體積,不適合大數據量用
映射的分類:
(1)動態映射:
當ES在文檔中碰到一個以前沒見過的字段時,它會利用動態映射來決定該字段的類型,並自動地對該字段添加映射。
可以通過dynamic設置來控制這一行爲,它能夠接受以下的選項:
true:默認值。動態添加字段
false:忽略新字段
strict:如果碰到陌生字段,拋出異常
dynamic設置可以適用在根對象上或者object類型的任意字段上。
POST /lib2
#給索引lib2創建映射類型
{
"settings":{
"number_of_shards" : 3,
"number_of_replicas" : 0
},
"mappings":{
"books":{
"properties":{
"title":{"type":"text"},
"name":{"type":"text","index":false},
"publish_date":{"type":"date","index":false},
"price":{"type":"double"},
"number":{"type":"integer"}
}
}
}
}
POST /lib
#給索引lib創建映射類型
{
"settings":{
"number_of_shards" : 3,
"number_of_replicas" : 0
},
"mappings":{
"books":{
"properties":{
"title":{"type":"text"},
"name":{"type":"text","index":false},
"publish_date":{"type":"date","index":false},
"price":{"type":"double"},
"number":{
"type":"object",
"dynamic":true
}
}
}
}
}