1. 程式人生 > >安裝IK分詞器及自定義擴充套件分詞

安裝IK分詞器及自定義擴充套件分詞

1.為什麼用ik分詞器?

因為Elasticsearch中預設的標準分詞器分詞器對中文分詞不是很友好,會將中文詞語拆分成一個一箇中文的漢子。因此引入中文分詞器-es-ik外掛。

 傳統分詞器:可以看到把奧迪當做兩個詞進行搜尋了,注意analyzer為"standard"

2. Linux安裝ik分詞器

① 下載es的IK外掛,命名改為ik外掛,把解壓好的ik包上傳到伺服器

② 重啟elasticsearch即可生效(就這麼兩步)

③ 驗證ik分詞器,可以看到奧迪為一個詞,注意analyzer為ik_smart

④ 不足:像王者榮耀這種最近比較火的熱詞,預設ik分詞器是沒有的

可以看到"王者榮耀"被分成了王者和榮耀兩個詞

解決辦法:自定義擴充套件字典

3. 自定義分詞

① 首先關閉elasticsearch,並進入ik下的config目錄

 在config下新建一個custom目錄,新建new_word.dic

 加入我們想加的詞,wq:

② 把上面新建的檔案配置到/config下的IKAnalyzer.cfg.xml檔案

③ 驗證,啟動elasticsearch

此時再輸入王者榮耀,則不會被分開

4. 文件對映

① 定義

已經把ElasticSearch的核心概念和關係資料庫做了一個對比,索引(index)相當於資料庫,型別(type)相當於資料表,對映(Mapping)相當於資料表的表結構。ElasticSearch中的對映(Mapping)用來定義一個文件,可以定義所包含的欄位以及欄位的型別、分詞器及屬性等等。

文件對映就是給文件中的欄位指定欄位型別、分詞器。

使用GET myes/user/_mapping

② 對映的分類

    動態對映

我們知道,在關係資料庫中,需要事先建立資料庫,然後在該資料庫例項下建立資料表,然後才能在該資料表中插入資料。而ElasticSearch中不需要事先定義對映(Mapping),文件寫入ElasticSearch時,會根據文件欄位自動識別型別,這種機制稱之為動態對映。

    靜態對映

在ElasticSearch中也可以事先定義好對映,包含文件的各個欄位及其型別等,這種方式稱之為靜態對映。

③ 基本型別

字串:string,string型別包含 text 和 keyword

text:該型別被用來索引長文字,在建立索引前會將這些文字進行分詞,轉化為詞的組合,建立索引;允許es來檢索這些詞,text型別不能用來排序和聚合。

keyword:該型別不需要進行分詞,可以被用來檢索過濾、排序和聚合,keyword型別自讀那隻能用本身來進行檢索(不可用text分詞後的模糊檢索)

注意: keyword型別不能分詞,Text型別可以分詞查詢

數值型:long、integer、short、byte、double、float

日期型:date

布林型:boolean

二進位制型:binary

陣列型別:(Array datatype)

④ 之前的方式,查詢出來的name是text型別,age和sex均為long型別(即動態對映)

put myes/user/1
{
    "name":"zhangsan",
    "age":20,
    "sex":0
}

⑤ 如果想靜態對映,即建立文件型別並且指定型別,可以這樣:

     1> 新建一個索引myes2,並指定型別

     2> 查詢myes2/user的對映型別

③ 由於上面的name為text型別,所以可以模糊查詢(text型別可以分詞查詢

如果上面的name為keyword型別,則不可以模糊查詢,即查奧迪查不出來,必須是精確查詢( keyword型別不能分詞