iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 6
0
Elastic Stack on Cloud

Python&Elasticsearch 入門系列 第 6

IT鐵人第6天 認識Elasticsearch Mapping(1)

對於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有很多的分詞器,這邊先做一些簡單的介紹,如果後面有機會的話再對分詞器做多一點介紹

如何決定該使用text還是keyword

以上面的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


上一篇
IT鐵人第5天 建立圖形介面elasticsearch-head、Kibana
下一篇
IT鐵人第7天 認識Elasticsearch Mapping(2) object
系列文
Python&Elasticsearch 入門30

尚未有邦友留言

立即登入留言