关闭

Elasticsearch 5 Ik+pinyin分词配置详解

标签: elasticsearchpinyinik分词拼音分词
18664人阅读 评论(15) 收藏 举报
分类:

一、拼音分词的应用


拼音分词在日常生活中其实很常见,也许你每天都在用。打开淘宝看一看吧,输入拼音”zhonghua”,下面会有包含”zhonghua”对应的中文”中华”的商品的提示:

这里写图片描述

拼音分词是根据输入的拼音提示对应的中文,通过拼音分词提升搜索体验、加快搜索速度。下面介绍如何在Elasticsearch 5.1.1中配置和实现pinyin+iK分词。

二、IK分词器下载与安装


关于IK分词器的介绍不再多少,一言以蔽之,IK分词是目前使用非常广泛分词效果比较好的中文分词器。做ES开发的,中文分词十有八九使用的都是IK分词器。

下载地址:https://github.com/medcl/elasticsearch-analysis-ik
配置之前关闭elasticsearch,配置完成以后再重启。
IK的版本要和当前ES的版本一致,README中有说明。我使用的是ES是5.1.1,IK的版本为5.1.1(你也许会奇怪为什么IK上一个版本是1.X,下一个版本一下升到5.X?是因为Elastic官方为了统一版本号,之前es的版本是2.x,logstash的版本是2.x,同时Kibana的版本是4.x,ik的版本是1.x,这样版本很混乱。5.0之后,统一版本号,这样你使用5.1.1的es,其它软件的版本也使用5.1.1就好了)。

下载之后进入到elasticsearch-analysis-pinyin-master目录,mvn打包(没有安装maven的自行安装),运行命令:

    mvn package

打包成功以后,会生成一个target文件夹,在elasticsearch-analysis-ik-master/target/releases目录下,找到elasticsearch-analysis-ik-5.1.1.zip,这就是我们需要的安装文件。解压elasticsearch-analysis-ik-5.1.1.zip,得到下面内容:

commons-codec-1.9.jar
commons-logging-1.2.jar
config
elasticsearch-analysis-ik-5.1.1.jar
httpclient-4.5.2.jar
httpcore-4.4.4.jar
plugin-descriptor.properties

然后在elasticsearch-5.1.1/plugins目录下新建一个文件夹ik,把elasticsearch-analysis-ik-5.1.1.zip解压后的文件拷贝到elasticsearch-5.1.1/plugins/ik目录下.截图方便理解。
这里写图片描述

三、pinyin分词器下载与安装


pinyin分词器的下载地址:
https://github.com/medcl/elasticsearch-analysis-pinyin

安装过程和IK一样,下载、打包、加入ES。这里不在重复上述步骤,给出最后配置截图
这里写图片描述

四、分词测试

IK和pinyin分词配置完成以后,重启ES。如果重启过程中ES报错,说明安装有错误,没有报错说明配置成功。

4.1 IK分词测试

创建一个索引:

curl -XPUT "http://localhost:9200/index"

测试分词效果:

curl -XPOST "http://localhost:9200/index/_analyze?analyzer=ik_max_word&text=中华人民共和国"

分词结果:

   {
    "tokens": [{
        "token": "中华人民共和国",
        "start_offset": 0,
        "end_offset": 7,
        "type": "CN_WORD",
        "position": 0
    }, {
        "token": "中华人民",
        "start_offset": 0,
        "end_offset": 4,
        "type": "CN_WORD",
        "position": 1
    }, {
        "token": "中华",
        "start_offset": 0,
        "end_offset": 2,
        "type": "CN_WORD",
        "position": 2
    }, {
        "token": "华人",
        "start_offset": 1,
        "end_offset": 3,
        "type": "CN_WORD",
        "position": 3
    }, {
        "token": "人民共和国",
        "start_offset": 2,
        "end_offset": 7,
        "type": "CN_WORD",
        "position": 4
    }, {
        "token": "人民",
        "start_offset": 2,
        "end_offset": 4,
        "type": "CN_WORD",
        "position": 5
    }, {
        "token": "共和国",
        "start_offset": 4,
        "end_offset": 7,
        "type": "CN_WORD",
        "position": 6
    }, {
        "token": "共和",
        "start_offset": 4,
        "end_offset": 6,
        "type": "CN_WORD",
        "position": 7
    }, {
        "token": "国",
        "start_offset": 6,
        "end_offset": 7,
        "type": "CN_CHAR",
        "position": 8
    }, {
        "token": "国歌",
        "start_offset": 7,
        "end_offset": 9,
        "type": "CN_WORD",
        "position": 9
    }]
}

使用ik_smart分词:

curl -XPOST "http://localhost:9200/index/_analyze?analyzer=ik_smart&text=中华人民共和国"

分词结果:

{
    "tokens": [{
        "token": "中华人民共和国",
        "start_offset": 0,
        "end_offset": 7,
        "type": "CN_WORD",
        "position": 0
    }, {
        "token": "国歌",
        "start_offset": 7,
        "end_offset": 9,
        "type": "CN_WORD",
        "position": 1
    }]
}

截图方便理解:
这里写图片描述

4.2拼音分词测试

测试拼音分词:

curl -XPOST "http://localhost:9200/index/_analyze?analyzer=pinyin&text=张学友"

分词结果:

{
    "tokens": [{
        "token": "zhang",
        "start_offset": 0,
        "end_offset": 1,
        "type": "word",
        "position": 0
    }, {
        "token": "xue",
        "start_offset": 1,
        "end_offset": 2,
        "type": "word",
        "position": 1
    }, {
        "token": "you",
        "start_offset": 2,
        "end_offset": 3,
        "type": "word",
        "position": 2
    }, {
        "token": "zxy",
        "start_offset": 0,
        "end_offset": 3,
        "type": "word",
        "position": 3
    }]
}

五、IK+pinyin分词配置

5.1创建索引与分析器设置

创建一个索引,并设置index分析器相关属性:

curl -XPUT "http://localhost:9200/medcl/" -d'
{
    "index": {
        "analysis": {
            "analyzer": {
                "ik_pinyin_analyzer": {
                    "type": "custom",
                    "tokenizer": "ik_smart",
                    "filter": ["my_pinyin", "word_delimiter"]
                }
            },
            "filter": {
                "my_pinyin": {
                    "type": "pinyin",
                    "first_letter": "prefix",
                    "padding_char": " "
                }
            }
        }
    }
}'

创建一个type并设置mapping:

curl -XPOST http://localhost:9200/medcl/folks/_mapping -d'
{
    "folks": {
        "properties": {
            "name": {
                "type": "keyword",
                "fields": {
                    "pinyin": {
                        "type": "text",
                        "store": "no",
                        "term_vector": "with_positions_offsets",
                        "analyzer": "ik_pinyin_analyzer",
                        "boost": 10
                    }
                }
            }
        }
    }
}'

5.2索引测试文档

索引2份测试文档。
文档1:

curl -XPOST http://localhost:9200/medcl/folks/andy -d'{"name":"刘德华"}'

文档2:

curl -XPOST http://localhost:9200/medcl/folks/tina -d'{"name":"中华人民共和国国歌"}'

5.3测试(1)拼音分词

下面四条命命令都可以匹配”刘德华”

curl -XPOST "http://localhost:9200/medcl/folks/_search?q=name.pinyin:liu"

curl -XPOST "http://localhost:9200/medcl/folks/_search?q=name.pinyin:de"

curl -XPOST "http://localhost:9200/medcl/folks/_search?q=name.pinyin:hua"

curl -XPOST "http://localhost:9200/medcl/folks/_search?q=name.pinyin:ldh"

5.4测试(2)IK分词测试

curl -XPOST "http://localhost:9200/medcl/_search?pretty" -d'
{
  "query": {
    "match": {
      "name.pinyin": "国歌"
    }
  },
  "highlight": {
    "fields": {
      "name.pinyin": {}
    }
  }
}'

返回结果:

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 16.698704,
    "hits" : [
      {
        "_index" : "medcl",
        "_type" : "folks",
        "_id" : "tina",
        "_score" : 16.698704,
        "_source" : {
          "name" : "中华人民共和国国歌"
        },
        "highlight" : {
          "name.pinyin" : [
            "<em>中华人民共和国</em><em>国歌</em>"
          ]
        }
      }
    ]
  }
}

说明IK分词器起到了效果。

5.3测试(4)pinyin+ik分词测试:

curl -XPOST "http://localhost:9200/medcl/_search?pretty" -d'
{
  "query": {
    "match": {
      "name.pinyin": "zhonghua"
    }
  },
  "highlight": {
    "fields": {
      "name.pinyin": {}
    }
  }
}'

返回结果:

{
  "took" : 3,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 5.9814634,
    "hits" : [
      {
        "_index" : "medcl",
        "_type" : "folks",
        "_id" : "tina",
        "_score" : 5.9814634,
        "_source" : {
          "name" : "中华人民共和国国歌"
        },
        "highlight" : {
          "name.pinyin" : [
            "<em>中华人民共和国</em>国歌"
          ]
        }
      },
      {
        "_index" : "medcl",
        "_type" : "folks",
        "_id" : "andy",
        "_score" : 2.2534127,
        "_source" : {
          "name" : "刘德华"
        },
        "highlight" : {
          "name.pinyin" : [
            "<em>刘德华</em>"
          ]
        }
      }
    ]
  }
}

截图如下:
这里写图片描述

使用pinyin分词以后,原始的字段搜索要加上.pinyin后缀,搜索原始字段没有返回结果:

这里写图片描述

六、参考资料

  1. https://github.com/medcl/elasticsearch-analysis-ik
  2. https://github.com/medcl/elasticsearch-analysis-pinyin
  3. https://my.oschina.net/xiaohui249/blog/214505
5
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Elasticsearch安装中文分词插件ik

Elasticsearch安装中文分词插件ik
  • liuzhenfeng
  • liuzhenfeng
  • 2014-09-19 23:12
  • 65226

Elasticsearch安装IK分词器

安装方式大概分为两种: 自行编译;使用elasticsearch-rtf版,利用别人编译好的文件进行安装; 环境说明: 我下载的es版本是:elasticsearch-1.7.4.t...
  • zxjiayou1314
  • zxjiayou1314
  • 2016-09-04 23:02
  • 3520

Elasticsearch 中文分词器 IK 配置和使用

Elasticsearch 内置的分词器对中文不友好,会把中文分成单个字来进行全文检索,不能达到想要的结果 看一个例子curl -XGET 'http://localhost:9200/_analy...
  • jam00
  • jam00
  • 2016-10-31 15:54
  • 21069

elasticsearch-analysis-ik 分词插件安装及配置

elasticsearch-analysis-ik 安装及配置教程。
  • u010599509
  • u010599509
  • 2016-06-15 17:22
  • 3608

ELK第三篇:Elasticsearch安装IK中文分词插件

简介准备工作环境:centos7.0,Elasticsearch6.0.0下载IK插件压缩包,插件版本也是6.0.0 https://github.com/medcl/elasticsearch-a...
  • zjcjava
  • zjcjava
  • 2017-11-28 12:36
  • 201

ElasticSearch6.0配置IK分词器

1.下载IK分词器   地址:https://github.com/medcl/elasticsearch-analysis-ik/releases 2.直接解压到ElasticSearc...
  • QWERTY1994
  • QWERTY1994
  • 2017-11-30 08:45
  • 199

ElasticSearch5.3安装IK分词器并验证

ElasticSearch5.3安装IK分词器 之前使用Elasticsearch安装head插件成功了,但是安装IK分词器却失败了,貌似是ElasticSearch5.0以后就不支持直接在elast...
  • u010504064
  • u010504064
  • 2017-04-17 17:39
  • 7643

elasticsearch-analysis-ik-5.3.2 编译后zip

  • 2017-04-29 10:02
  • 4.29MB
  • 下载

ElasticSearch 安装和使用IK分词器

1、到官网下载IK分词器并且编译成jar包。 2、把IK目录下的config\ik 的所有文件都复制到elasticsearch 的config\ik 的目录下面 3、在elasticsearch的 ...
  • hhl2046
  • hhl2046
  • 2016-11-23 09:41
  • 3206

ElasticSearch2.4.2+ik分词+java简单使用

近日因工作原因使用了ElasticSearch(以下简称ES),因为是第一次使用,所以遇到了诸多困难。然而网络上的文章(主要指CSDN)绝大多数说的都是1.几的版本,与2.4版本相去甚远,并且关于Ja...
  • bipch
  • bipch
  • 2016-11-27 14:01
  • 3617
    《从Lucene到Elasticsearch:全文检索实战》
    Lucene、ES、ELK开发交流群:370734940
    Lucene、ES、ELK开发交流
    个人资料
    • 访问:874912次
    • 积分:8871
    • 等级:
    • 排名:第2493名
    • 原创:206篇
    • 转载:2篇
    • 译文:6篇
    • 评论:463条
    StackOverFlow
    http://stackoverflow.com/users/6526424
    统计
    博客专栏
    文章分类
    最新评论