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
    }
  ]
}
复制代码
相关文章
相关标签/搜索