安裝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型別不能分詞)