es中文分词器安装

日期:2017-06-28       浏览:749

一 默认分词器

Elasticsearch中,内置了很多分词器(analyzers),例如standard (标准分词器)、english (英文分词)和chinese (中文分词)。
分词的操作也称为“分析(analysis)”. analysis过程由两个步骤的操作组成:首先将文本切分为terms(词项)以适合构建倒排索引,其次将各terms正规化为标准形式以提升其“可搜索度”。这两个步骤由分词器完成。
一个分词器通常需要由三个组件构成:字符过滤器(character filters),分词器(tokenizer)和分词过滤器(token filters)组成。
字符过滤器:在文本被切割之前进行清理操作,例如移除HTML标签,将&替换为字符等。
分词器:将文本切分为独立的词项;简单的分词器通常是根据空白及标点符号进行切分。
分词过滤器:转换字符(如将大写转为小写)、移除词项(如移除a、an、of及the等)或者添加词项(例如,添加同义词)。
分词过滤流水线(图片来源于网络,侵删)
分词过滤流水线(图片来源于网络,侵删)

测试默认分词插件

http get http://localhost:9200/_analyze?analyzer=standard&pretty=true&text=test分词测试
{
  "tokens" : [
    {
      "token" : "test",
      "start_offset" : 0,
      "end_offset" : 4,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "分",
      "start_offset" : 4,
      "end_offset" : 5,
      "type" : "<IDEOGRAPHIC>",
      "position" : 1
    },
    {
      "token" : "词",
      "start_offset" : 5,
      "end_offset" : 6,
      "type" : "<IDEOGRAPHIC>",
      "position" : 2
    },
    {
      "token" : "测",
      "start_offset" : 6,
      "end_offset" : 7,
      "type" : "<IDEOGRAPHIC>",
      "position" : 3
    },
    {
      "token" : "试",
      "start_offset" : 7,
      "end_offset" : 8,
      "type" : "<IDEOGRAPHIC>",
      "position" : 4
    }
  ]
}

二 安装中文分词ik

2.1 下载

这里用的es版本是5.3.2,所以我下载的ik分词器也是对应的5.3.2版本,下载地址:https://github.com/medcl/elasticsearch-analysis-ik

2.2 编译安装

下载完成后切换到相应的5.3.2的tags:git checkout tags/v5.3.2
进入elasticsearch-analysis-ik文件夹内执行:mvn clean package命令打包编译。
执行完以上命令会生成一个target文件夹,将target/releases文件夹内的elasticsearch-analysis-ik-5.3.2.zipcopy到es的plugins文件夹内,解压后修改文件夹名称为analysis-ik:elasticsearch-5.3.2pluginsanalysis-ik。
analysis-ik|
-commons-codec-1.9.jar
-commons-logging-1.2.jar
-elasticsearch-analysis-ik-5.3.2.jar
-httpclient-4.5.2.jar
-httpcore-4.4.4.jar
-plugin-descriptor.properties
-config|
--IKAnalyzer.cfg.xml
--...
--custom|
---...

2.3 启动测试

启动es:./elasticsearch-5.3.2/bin/elasticsearch.bat当我们看到启动控制台打印出
[2017-05-17T14:16:10,252][INFO ][o.e.p.PluginsService     ] [XCwou8Z] loaded plugin [analysis-ik]
时就表示ik插件安装成功了。
测试一下:http + get http://localhost:9200/analyze?analyzer=iksmart&pretty=true&text=test分词测试
{
  "tokens" : [
    {
      "token" : "test",
      "start_offset" : 0,
      "end_offset" : 4,
      "type" : "ENGLISH",
      "position" : 0
    },
    {
      "token" : "分词",
      "start_offset" : 4,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "测试",
      "start_offset" : 6,
      "end_offset" : 8,
      "type" : "CN_WORD",
      "position" : 2
    }
  ]
}
http + get http://localhost:9200/analyze?analyzer=ikmax_word&pretty=true&text=test分词测试
{
  "tokens" : [
    {
      "token" : "test",
      "start_offset" : 0,
      "end_offset" : 4,
      "type" : "ENGLISH",
      "position" : 0
    },
    {
      "token" : "分词",
      "start_offset" : 4,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "词",
      "start_offset" : 5,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "测试",
      "start_offset" : 6,
      "end_offset" : 8,
      "type" : "CN_WORD",
      "position" : 3
    }
  ]
}
以上两个测试结果的不同说明了:
  1. ikmaxword:会将文本做最细粒度的拆分,比如将“test分词测试”拆分成“test”、“分词”、“词”、“测试”。
  2. ik_smart:会做最粗粒度的拆分,比如将“test分词测试”拆分成“test”、“分词”、“测试”。
扫码关注有惊喜

(转载本站文章请注明作者和出处 qbian)

暂无评论

Copyright 2016 qbian. All Rights Reserved.

文章目录