4.資料型別

壹索007發表於2024-03-21

Elasticsearch 常見的資料型別有哪些?

常見型別:

  關鍵詞: keyword constant_keyword wildcard
  數值型: long , integer , short , byte , double
  布林型: boolean
  日期型: date
  二進位制: binary

結構化資料型別:

  範圍型: integer_range , float_range , long_range , double_range
  ip 地址型別 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"
            }
        }
    }
}                                

相關文章