Elasticsearch 常見的資料型別有哪些?
常見型別:
關鍵詞: keyword 、constant_keyword 和 wildcard數值型: long , integer , short , byte , double
布林型: boolean
日期型: date
二進位制: binary
結構化資料型別:
範圍型: integer_range , float_range , long_range , double_rangeip 地址型別: ip
軟體版本: version
文字搜尋型別:
非結構化文字 : text包含特殊標記的文字: annotated-text
自動完成建議: completion
物件和關係型別:
巢狀型別: nested 、join物件型別 : object 、flattened
空間型別:
地理座標型別 : geo_point地理形狀型別 : geo_shape
keyword 和 text 有什麼區別?
keyword 不走分詞器,而 text 會走分詞器,使用keyword 關鍵字查詢效率更高,一般在fields 中定義keyword 型別欄位
Elasticsearch 是否有陣列型別?
在 Elasticsearch 中,沒有專門的陣列資料型別。預設情況下,任何欄位都可以包含零個或多個值,但是,陣列中的所有值必須具有相同的資料型別。
Elasticsearch 怎麼修改索引欄位型別?
1、獲取源索引的資料(mapping) 並建立臨時索引:data_index_temp,
2、備份資料到臨時索引:data_index_temp
3、刪除原索引: data_index,
4、重新建立正確資料型別索引:data_index
5、再把臨時索引:data_index_temp的資料備份到新建立索引 data_index。
以上語句透過kibana的 dev_tools/console 執行。
可以在 Mapping 中直接修改欄位型別嗎?
不可以!Elasticsearch 中的 Mapping 有點類似於資料庫中的表結構定義,Mapping 中的欄位型別只能增加不能修改,否則只能reindex 重新索引或者重新進行資料建模並匯入資料。
什麼是 Nested 資料型別?有什麼用?
Elasticsearch 官方文件是這樣介紹 Nested 資料型別的:
Nested (巢狀)型別是物件資料型別的特殊版本,它允許物件陣列以一種可以相互獨立查詢的方式進行索引。
Nested 資料型別可以避免 陣列扁平化處理,多個陣列的欄位會做一個笛卡爾積,導致查詢出不存在的資料。
// 會導致查詢John White也會匹配,將型別改為nested問題解決 PUT my_index/_doc/1 { "group" : "fans", "user" : [ { "first" : "John", "last" : "Smith" }, { "first" : "Alice", "last" : "White" } ] }
將多個欄位值合併為一個欄位怎麼做?
使用 ,比如將 first_name 和 last_name 合併為 full_name ,但 full_name 不在查詢結果中展示
PUT my_index 1 { "mappings": { "properties": { "first_name": { "type": "text", "copy_to": "full_name" }, "last_name": { "type": "text", "copy_to": "full_name" }, "full_name": { "type": "text" } } } }