标签归档:分词组件

Elasticsearch Analysis Ik 中文分词模块安装

Elasticsearch本身内置了很多分词器,但中文词库 chinese 效果不佳,所以需要安装三方 ik 插件实现生产需求。

什么是 IK Analyzer?

IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。从3.0版本开始,IK发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。在2012版本中,IK实现了简单的分词歧义排除算法,标志着IK分词器从单纯的词典分词向模拟语义分词衍化。

先决条件:

安装配置 Elasticsearch 搜索引擎集群

1.安装 Ik

登录到ES服务器,进入Bin目录开始安装

$ cd /usr/local/elasticsearch
$ bin/elasticsearch-plugin install //github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.6.3/elasticsearch-analysis-ik-5.6.3.zip
-> Downloading //github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.6.3/elasticsearch-analysis-ik-5.6.3.zip
[=================================================] 100%
-> Installed analysis-ik

安装成功。

2.如果卸载,请执行如下命令

$ bin/elasticsearch-plugin remove analysis-ik

3.重启ES服务

$ systemctl restart elasticsearch

4.查看启动日志

$ cat /usr/local/elasticsearch/logs/my-apprenwole.log

其中elasticsearch在启动中加载模块的时会生成以下日志记录,说明analysis-ik中文分词插件已经可以使用。

[INFO ][o.e.p.PluginsService ] [renwolenode-1] loaded plugin [analysis-ik]

5.创建一个名为index的索引

$ curl -u elastic -XPUT //10.28.204.65:9200/index
Enter host password for user 'elastic':
{"acknowledged":true,"shards_acknowledged":true,"index":"index"}

说明:

-u 是用户名
回车后会让你输入密码,默认是用户名是:elastic 密码是:changeme

6.创建一个映射

curl -u elastic -XPUT //10.28.204.65:9200/index/fulltext/_mapping -d'
{
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
}
}
}'

7.创建测试数据

curl -u elastic -XPUT //10.28.204.65:9200/index/fulltext/1 -d'
{"content":"元芳和你先后跟随于我,总共有十多年了吧,除了危险我没有给过你们什么"}
'

curl -u elastic -XPUT //10.28.204.65:9200/index/fulltext/2 -d'
{"content":"还记得吗,元芳总是开玩笑说:吃上我一顿真是不容易"}
'

curl -u elastic -XPUT //10.28.204.65:9200/index/fulltext/3 -d'
{"content":"可现在我真想把我身上所有的钱都拿出来请他吃上一顿"}
'

curl -u elastic -XPUT //10.28.204.65:9200/index/fulltext/4 -d'
{"content":"元芳总是叫我大人,可我知道,其实在他心中将我当成了父辈"}
'

curl -u elastic -XPUT //10.28.204.65:9200/index/fulltext/5 -d'
{"content":"可是我这个父辈又为他做了什么呢。生与死,我总是让他选择后者"}
'

curl -u elastic -XPUT //10.28.204.65:9200/index/fulltext/6 -d'
{"content":"幽州是这样、湖州是这样、崇州也是这样,这一次他终于没有回来,我能说什么呢,我还能说什么呢"}
'

curl -u elastic -XPUT //10.28.204.65:9200/index/fulltext/7 -d'
{"content":"元芳是为了国家,为社稷,为黎明百姓献出了生命"}
'

curl -u elastic -XPUT //10.28.204.65:9200/index/fulltext/8 -d'
{"content":"如果说此刻我心中还有一丝欣慰,那就是替元芳感到自豪"}
'

curl -u elastic -XPUT //10.28.204.65:9200/index/fulltext/9 -d'
{"content":"如果说此刻我心中还有什么比悲伤更加强烈,那就是仇恨"}
'

8.查询数据

curl -u elastic -XPOST //10.28.204.65:9200/index/fulltext/_search -d'
{
"query" : { "match" : { "content" : "如果" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}
'

9.查询返回的数据

{
"took": 21,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0.43353066,
"hits": [
{
"_index": "index",
"_type": "fulltext",
"_id": "8",
"_score": 0.43353066,
"_source": {
"content": "如果说此刻我心中还有一丝欣慰,那就是替元芳感到自豪"
},
"highlight": {
"content": [
"<tag1>如果</tag1>说此刻我心中还有一丝欣慰,那就是替元芳感到自豪"
]
}
},
{
"_index": "index",
"_type": "fulltext",
"_id": "9",
"_score": 0.43353066,
"_source": {
"content": "如果说此刻我心中还有什么比悲伤更加强烈,那就是仇恨"
},
"highlight": {
"content": [
"<tag1>如果</tag1>说此刻我心中还有什么比悲伤更加强烈,那就是仇恨"
]
}
}
]
}
}

结语:

建议通过 //10.28.204.65:5601 中的 Dev Tools 开发工具管理,kibana可视化管理真的很方便。

参考:

//github.com/medcl/elasticsearch-analysis-ik