IK分詞器的安裝與使用IK分詞器建立索引

以前咱們建立索引,查詢數據,都是使用的默認的分詞器,分詞效果不太理想,會把text的字段分紅一個一個漢字,而後搜索的時候也會把搜索的句子進行分詞,因此這裏就須要更加智能的分詞器IK分詞器了。git

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

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

第二: 解壓-->將文件複製到 es的安裝目錄/plugin/ik下面便可,完成以後效果以下:app

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

第三:重啓ElasticSearch測試

第四:測試效果spa

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

複製代碼
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分詞器以後,結果以下:orm

複製代碼
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
    }
  ]
}
複製代碼

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

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
    }
  ]
}
複製代碼
相關文章
相關標籤/搜索