網上有介紹說可以直接用plugin -install medcl/elasticsearch-analysis-ik的辦法,但是我執行下來的效果只是將插件的源碼下載下來,elasticsearch只是將其作為壹個_site插件看待。
所以只有執行maven並將打包後的jar文件拷貝到上級目錄。(否則在定義mapping的analyzer的時候會提示找不到類的錯誤)。
由於IK是基於字典的分詞,所以還要下載IK的字典文件,在medcl的elasticsearch-RTF中有,可以通過這個地址下載:
/downloads/medcl/elasticsearch-analysis-ik/ik.zip
下載之後解壓縮到config目錄下。到這裏,妳可能需要重新啟動下elasticsearch,好讓下壹部定義的分詞器能立即生效。
二、分詞定義
分詞插件準備好之後就可以在elasticsearch裏定義(聲明)這個分詞類型了(自帶的幾個類型,比如standred則不需要特別定義)。跟其他設置壹樣,分詞的定義也可以在系統級(elasticsearch全局範圍),也可以在索引級(只在當前index內部可見)。系統級的定義當然是指在conf目錄下的
elasticsearch.yml文件裏定義,內容大致如下:
index:
analysis:
analyzer:
ikAnalyzer:
alias: [ik]
type: org.elasticsearch.index.analysis.IkAnalyzerProvider
或者 index.analysis.analyzer.ik.type : "ik"
因為個人喜好,我並沒有這麽做, 而是定義在了需要使用中文分詞的index中,這樣定義更靈活,也不會影響其他index。
在定義analyze之前,先關閉index。其實並不需要關閉也可以生效,但是為了數據壹致性考慮,還是先執行關閉。(如果是線上的系統需要三思)
curl -XPOST /medcl/elasticsearch-analysis-ik,下載分詞器源碼,然後進入下載目錄,執行命令:mvn clean package,打包生成elasticsearch-analysis-ik-1.2.5.jar。將這個jar拷貝到ES_HOME/plugins/analysis-ik目錄下面,如果沒有該目錄,則先創建該目錄。
2、ik目錄拷貝
將下載目錄中的ik目錄拷貝到ES_HOME/config目錄下面。
3、分詞器配置
打開ES_HOME/config/elasticsearch.yml文件,在文件最後加入如下內容:
index:
analysis:
analyzer:
ik:
alias: [ik_analyzer]
type: org.elasticsearch.index.analysis.IkAnalyzerProvider
ik_max_word:
type: ik
use_smart: false
ik_smart:
type: ik
use_smart: true
或
index.analysis.analyzer.default.type: ik
ok!插件安裝已經完成,請重新啟動ES,接下來測試ik分詞效果啦!
三、ik分詞測試
1、創建壹個索引,名為index。
curl -XPUT http://localhost:9200/index
2、為索引index創建mapping。
curl -XPOST http://localhost:9200/index/fulltext/_mapping -d'
{
"fulltext": {
"_all": {
"analyzer": "ik"
},
"properties": {
"content": {
"type" : "string",
"boost" : 8.0,
"term_vector" : "with_positions_offsets",
"analyzer" : "ik",
"include_in_all" : true
}
}
}
}'
3、測試
curl 'http://localhost:9200/index/_analyze?analyzer=ik&pretty=true' -d '
{
"text":"世界如此之大"
}'
顯示結果如下:
{
"tokens" : [ {
"token" : "text",
"start_offset" : 4,
"end_offset" : 8,
"type" : "ENGLISH",
"position" : 1
}, {
"token" : "世界",
"start_offset" : 11,
"end_offset" : 13,
"type" : "CN_WORD",
"position" : 2
}, {
"token" : "如此",
"start_offset" : 13,
"end_offset" : 15,
"type" : "CN_WORD",
"position" : 3
}, {
"token" : "之大",
"start_offset" : 15,
"end_offset" : 17,
"type" : "CN_WORD",
"position" : 4
} ]
}