本文首發於公眾號:Hunter後端
原文連結:es筆記四之中文分詞外掛安裝與使用
前面我們介紹的操作及演示都是基於英語單詞的分詞,但我們大部分使用的肯定都是中文,所以如果需要使用分詞的操作肯定也是需要使用中分分詞。
這裡我們介紹一下如何安裝中文分詞外掛。
在介紹安裝之前,我們可以先來測試一下沒有中文分詞的分詞效果,我們先來插入一條資料:
PUT /exam/_doc/16
{
"name" : "張三丰",
"address": "一個蘋果"
}
如果是中文分詞,我們可以想到 '一個蘋果' 應該會被分為 '一個' 和 '蘋果' 這兩個詞,但是預設的分詞是無法這樣分詞的,我們可以嘗試搜尋一下:
GET /exam/_search
{
"query": {
"term": {
"address": "一個"
}
}
}
可以發現是無法搜尋到結果的。
我們可以檢視一下這條資料的 address 欄位被分詞的結果:
GET /exam/_doc/16/_termvectors?fields=address
其中,_doc 後面的 16 是我們要查詢的資料的 id,fields 後面跟著的要檢視的分詞結果的欄位名。
可以看到 一個蘋果 這個字串,被挨個分成了四個。
然後我們來安裝一下中文分詞的外掛。
安裝中文分詞外掛
在 elasticsearch 安裝的目錄下,執行下面的語句:
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.0/elasticsearch-analysis-ik-7.6.0.zip
這裡我們安裝的是 7.6.0 版本的 es,所以安裝對應的分詞外掛。
然後我們重新建立這個 index,為 address 欄位加上指定的分詞外掛:
挨個執行下面的命令:
DELETE /exam/
PUT /exam
PUT /exam/_mapping
{
"properties": {
"address": {
"type": "text",
"analyzer": "ik_max_word",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"name": {
"type": "keyword"
}
}
}
這裡,和第一次建立 mapping 的時候比,多了一行 analyzer 的定義。
然後我們再次重複上面的插入和查詢操作:
PUT /exam/_doc/16
{
"name" : "張三丰",
"address": "一個蘋果"
}
GET /exam/_search
{
"query": {
"term": {
"address": "一個"
}
}
}
可以看到,這次我們搜尋 一個,就可以查詢到資料了。
然後我們看下這條資料的 address 的分詞結果:
GET /exam/_doc/16/_termvectors?fields=address
可以看到,這次返回的結果除了單獨的 '一' 和 '個' 之外,還有被分成整體的 '一個' 和 '蘋果'。
檢視分詞結果
這裡額外介紹一下如何檢視字串的分詞。
如果我們有一個字串,想要知道它會被如何分詞,可以直接使用下面的命令:
POST /_analyze
{
"analyzer": "ik_smart",
"text": "一個蘋果"
}
其中,analyzer 是指定的分詞的外掛,如果不指定就會使用預設的分詞功能。
中文分詞外掛的github 地址如下:https://github.com/medcl/elasticsearch-analysis-ik
如果想獲取更多後端相關文章,可掃碼關注閱讀: