Elasticsearch Mapping

不要亂摸發表於2018-11-28

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.  核心型別

字串型別

  textkeyword

數值型別

  longintegershortbytedoublefloathalf_floatscaled_float

日期型別

  date

布林型別

  boolean

二進位制型別

  binary

範圍型別

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

相關文章