1. 程式人生 > 實用技巧 >ElasticSearch中text和keyword型別的區別

ElasticSearch中text和keyword型別的區別

es從2.X版本一下子跳到了5.X版本,將string型別變為了過期型別,取而代之的是text和keyword資料型別,一直到現在最新的6以上版本。接下來就看看這兩個欄位的區別。 按照官方文件的闡述,text型別的資料被用來索引長文字,例如電子郵件主體部分或者一款產品的介紹,這些文字會被分析,在建立索引文件之前會被分詞器進行分詞,轉化為片語。經過分詞機制之後es允許檢索到該文字切分而成的詞語,但是text型別的資料不能用來過濾、排序和聚合等操作。 keyword型別的資料可以滿足電子郵箱地址、主機名、狀態碼、郵政編碼和標籤等資料的要求,不進行分詞,常常被用來過濾、排序和聚合。

綜上,可以發現text型別在儲存資料的時候會預設進行分詞,並生成索引。而keyword儲存資料的時候,不會分詞建立索引,顯然,這樣劃分資料更加節省記憶體。

這樣,我們映射了某一個欄位為keyword型別之後,就不用設定任何有關分詞器的事情了,該型別就是預設不分詞的文字資料型別。而對於text型別,我們還可以設定它的分詞型別,如下:

PUT /zk_test/info/_mapping
{
  "info":{
    "properties":{
      "address":{"type":"text","analyzer":"standard"}
    }
  }
}

analyzer 還有中文分詞 chinese,英文分詞 english 等引數。

另外,我們在像之前2.X版本中一樣設定分詞使用"index":"not_analyzed"配置時,會有提醒,提示"index"引數只有false和true兩個值。

在5以上的版本中,“index”引數用來配置該欄位是否可以被用來搜尋,true可以通過搜尋該欄位檢索到文件,false為否,配置分詞器,用analyzer引數。