對於Elasitcsearch來說,index相當於資料庫,type相當於資料表,這在前面介紹ES時有提到,而Mapping就相當於資料表的結構
下面是Elasticsearch常見的數據類型
.text: 一般的String,會被分詞並丟進到排索引中
.keyword: 一般的String,但不會被分詞直接丟到倒排索引中
.integer: 32-bit整數,範圍是-2的31次方~2的31次方減1
・long: 64-bit整數,範圍是-2的63次方~2的63次方減1
.double: 64-bit雙精度浮點數
・float: 32-bit單精度浮點數
.boolean: True/False
.date: 格式化時間,以milliseconds為單位 #yyyy-MM-dd HH:mm:ss
下面是Mapping的使用格式
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"age": {
"type": "integer"
},
"email": {
"type": "keyword"
},
"birthday": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"
},
"height": {
"type": "float"
},
"weight": {
"type": "float"
}
}
}
}
分詞:
王小明 變成 →"王", "小", "明"⇢倒排索引
不分詞:
王小明 變成→"王小明"⇢倒排索引
ES有很多的分詞器,這邊先做一些簡單的介紹,如果後面有機會的話再對分詞器做多一點介紹
以上面的mapping舉例,假設現在有一筆資料的name叫做“王小明”,你希望當你搜尋“王”時,“王小明”能夠被找出來,那name的type就要使用text,再換另一個例子來說,假設現在有一筆資料的email為“test@gmail.com”,你不希望當你搜尋“t”時,“test@gmail.com”很簡單就被找出來,畢竟可能還會有很多其他包含“t”的email,這樣搜尋出來的資料量可能會太大,這時候email的type就是用keyword,必須搜尋整個“test@gmail.com”,那筆資料才會被搜尋出來
上面就是大致上mapping的格式,大家要先記好Mapping的格式(不然沒辦法建立一個好的index,
之後再教大家如何用python把Mapping PUT到Elasticsearch的index上
下篇會告訴大家一些可以進階應用的數據類型結構:object