ElasticSearch(六):IK分詞器的安裝與使用IK分詞器創建索引


之前我們創建索引,查詢數據,都是使用的默認的分詞器,分詞效果不太理想,會把text的字段分成一個一個漢字,然后搜索的時候也會把搜索的句子進行分詞,所以這里就需要更加智能的分詞器IK分詞器了。

1. ik分詞器的下載和安裝,測試

第一: 下載地址:https://github.com/medcl/elasticsearch-analysis-ik/releases ,這里你需要根據你的Es的版本來下載對應版本的IK,這里我使用的是6.3.2的ES,所以就下載ik-6.3.2.zip的文件。

第二: 解壓-->將文件復制到 es的安裝目錄/plugin/ik下面即可,完成之后效果如下:

到這里已經完成了,不需要去elasticSearch的 elasticsearch.yml 文件去配置。

第三:重啟ElasticSearch

第四:測試效果

未使用ik分詞器的時候測試分詞效果:

POST book/_analyze
{
  "text": "我是中國人"
}
//結果是:
{
  "tokens": [
    {
      "token": "我",
      "start_offset": 0,
      "end_offset": 1,
      "type": "<IDEOGRAPHIC>",
      "position": 0
    },
    {
      "token": "是",
      "start_offset": 1,
      "end_offset": 2,
      "type": "<IDEOGRAPHIC>",
      "position": 1
    },
    {
      "token": "中",
      "start_offset": 2,
      "end_offset": 3,
      "type": "<IDEOGRAPHIC>",
      "position": 2
    },
    {
      "token": "國",
      "start_offset": 3,
      "end_offset": 4,
      "type": "<IDEOGRAPHIC>",
      "position": 3
    },
    {
      "token": "人",
      "start_offset": 4,
      "end_offset": 5,
      "type": "<IDEOGRAPHIC>",
      "position": 4
    }
  ]
}

使用IK分詞器之后,結果如下:

POST book_v6/_analyze
{
  "analyzer": "ik_max_word",
  "text": "我是中國人"
}
//結果如下:
{
  "tokens": [
    {
      "token": "我",
      "start_offset": 0,
      "end_offset": 1,
      "type": "CN_CHAR",
      "position": 0
    },
    {
      "token": "是",
      "start_offset": 1,
      "end_offset": 2,
      "type": "CN_CHAR",
      "position": 1
    },
    {
      "token": "中國人",
      "start_offset": 2,
      "end_offset": 5,
      "type": "CN_WORD",
      "position": 2
    },
    {
      "token": "中國",
      "start_offset": 2,
      "end_offset": 4,
      "type": "CN_WORD",
      "position": 3
    },
    {
      "token": "國人",
      "start_offset": 3,
      "end_offset": 5,
      "type": "CN_WORD",
      "position": 4
    }
  ]
}

對於上面兩個分詞效果的解釋:

1. 如果未安裝ik分詞器,那么,你如果寫 "analyzer": "ik_max_word",那么程序就會報錯,因為你沒有安裝ik分詞器

2. 如果你安裝了ik分詞器之后,你不指定分詞器,不加上  "analyzer": "ik_max_word" 這句話,那么其分詞效果跟你沒有安裝ik分詞器是一致的,也是分詞成每個漢字。

2. 創建指定分詞器的索引

索引創建之后就可以使用ik進行分詞了,當你使用ES搜索的時候也會使用ik對搜索語句進行分詞,進行匹配。

PUT book_v5
{
  "settings":{
    "number_of_shards": "6",
    "number_of_replicas": "1",  
     //指定分詞器  
    "analysis":{   
      "analyzer":{
        "ik":{
          "tokenizer":"ik_max_word"
        }
      }
    }
  },
  "mappings":{
    "novel":{
      "properties":{
        "author":{
          "type":"text"
        },
        "wordCount":{
          "type":"integer"
        },
        "publishDate":{
          "type":"date",
          "format":"yyyy-MM-dd HH:mm:ss || yyyy-MM-dd"
        },
        "briefIntroduction":{
          "type":"text"
        },
        "bookName":{
          "type":"text"
        }
      }
    }
  }
}            

關於ik分詞器的分詞類型(可以根據需求進行選擇):

ik_max_word:會將文本做最細粒度的拆分,比如會將“中華人民共和國國歌”拆分為“中華人民共和國,中華人民,中華,華人,人民共和國,人民,人,民,共和國,共和,和,國國,國歌”,會窮盡各種可能的組合;

ik_smart:會做最粗粒度的拆分,比如會將“中華人民共和國國歌”拆分為“中華人民共和國,國歌”。如下:

POST book_v6/_analyze
{
  "analyzer": "ik_smart",
  "text": "我是中國人"
}
//結果
{
  "tokens": [
    {
      "token": "我",
      "start_offset": 0,
      "end_offset": 1,
      "type": "CN_CHAR",
      "position": 0
    },
    {
      "token": "是",
      "start_offset": 1,
      "end_offset": 2,
      "type": "CN_CHAR",
      "position": 1
    },
    {
      "token": "中國人",
      "start_offset": 2,
      "end_offset": 5,
      "type": "CN_WORD",
      "position": 2
    }
  ]
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM