ElasticSearch实战(二十六)-IK 中文分词器
Posted 张志翔ۤ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch实战(二十六)-IK 中文分词器相关的知识,希望对你有一定的参考价值。
为什么要在elasticsearch中要使用ik这样的中文分词?因为 ES 提供的分词是英文分词,对于中文的分词就做的非常不好了,因此我们需要一个中文分词器来用于搜索和使用。
一、安装
我们可以从 官方github上下载该插件,我们下载对应于我们使用的es的版本的ik,并且我们能够看到具体的安装步骤,可以有两种安装方法。
这里我们选择第一种方式。
由于IK分词器和ES版本需要兼容,因为我们这个专栏的ES集群版本是7.x,所以我们这边用IK也使用最新的7.x版本,图示如下:
我们这边下载v7.11.1的IK分词器,我这边放上这个版本的下载地址 ,图示如下:
在所有ES节点上执行以下命令安装IK中文分词器,命令如下:
$ su elk
$ cd /opt/elasticsearch/elasticsearch-7.11.1/plugins && mkdir ik
$ cd ./ik
$ wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.11.1/elasticsearch-analysis-ik-7.11.1.zip
$ unzip elasticsearch-analysis-ik-7.11.1.zip
$ rm -rf ./elasticsearch-analysis-ik-7.11.1.zip
然后切换到 elk 用户,重新启动 ES,我们就可以使用 IK 中文分词器了,命令如下:
$ ps -aux | grep elastic
$ kill -9 进程号
$ /opt/elasticsearch/elasticsearch-7.11.1/bin/elasticsearch -d
二、使用
既然我们要使用ik中文分词器,那么就必须先在index数据库之中插入一些中文,然后再来索引一下这些中文的单词,就能看出是否成功了。首先我们创建一个静态索引,命令如下:
DELETE company-001-ik
PUT company-001-ik
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2,
"refresh_interval": "1s"
},
"mappings": {
"dynamic": "strict",
"properties": {
"companyName": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"companyID": {
"type": "integer"
}
}
}
}
然后我们插入数据到这个索引中,命令如下:
PUT company-001-ik/_doc/1
{
"companyName":"这是一个测试文档"
}
PUT company-001-ik/_doc/2
{
"companyName":"可以了解一些测试方面的东西"
}
PUT company-001-ik/_doc/3
{
"companyName":"关于分词方面的测试"
}
PUT company-001-ik/_doc/4
{
"companyName":"如果你想了解更多的内容"
}
PUT company-001-ik/_doc/5
{
"companyName":"可以查看我的博客"
}
PUT company-001-ik/_doc/6
{
"companyName":"我是张志翔"
}
GET company-001-ik/_mapping
GET company-001-ik/_search
然后我们使用分词查询,命令如下:
POST company-001-ik/_search
{
"query" : {
"match" : { "companyName" : "关于分词方面的测试,张志翔" }
},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"companyName" : {}
}
}
}
上述命令分词结果,如下所示:
{
"took" : 50,
"timed_out" : false,
"_shards" : {
"total" : 3,
"successful" : 3,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 4,
"relation" : "eq"
},
"max_score" : 3.8179197,
"hits" : [
{
"_index" : "company-001-ik",
"_type" : "_doc",
"_id" : "3",
"_score" : 3.8179197,
"_source" : {
"companyName" : "关于分词方面的测试"
},
"highlight" : {
"companyName" : [
"<tag1>关于</tag1><tag1>分词</tag1><tag1>方面的</tag1><tag1>测试</tag1>"
]
}
},
{
"_index" : "company-001-ik",
"_type" : "_doc",
"_id" : "6",
"_score" : 2.1597633,
"_source" : {
"companyName" : "我是张志翔"
},
"highlight" : {
"companyName" : [
"我是<tag1>张</tag1><tag1>志</tag1><tag1>翔</tag1>"
]
}
},
{
"_index" : "company-001-ik",
"_type" : "_doc",
"_id" : "2",
"_score" : 1.2624518,
"_source" : {
"companyName" : "可以了解一些测试方面的东西"
},
"highlight" : {
"companyName" : [
"可以了解一些<tag1>测试</tag1><tag1>方面的</tag1>东西"
]
}
},
{
"_index" : "company-001-ik",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.6682933,
"_source" : {
"companyName" : "这是一个测试文档"
},
"highlight" : {
"companyName" : [
"这是一个<tag1>测试</tag1>文档"
]
}
}
]
}
}
到此IK中文分词器介绍完成。
以上是关于ElasticSearch实战(二十六)-IK 中文分词器的主要内容,如果未能解决你的问题,请参考以下文章