es筆記四之中文分詞外掛安裝與使用

Hunter發表於2023-04-14
本文首發於公眾號: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

如果想獲取更多後端相關文章,可掃碼關注閱讀:
image.png

相關文章