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 中文分词器的主要内容,如果未能解决你的问题,请参考以下文章

《自然语言处理实战入门》 文本检索 ---- 文本查询实例:ElasticSearch 配置ik 分词器及使用

ElasticSearch实战(二十三)-数据删除

ElasticSearch实战(二十二)-数据写入

ElasticSearch实战(二十)-使用别名索引设计

ElasticSearch实战(二十九)-分页查询

ElasticSearch实战(二十九)-分页查询