悠扬随风 发表于 2024-6-11 11:58:54

Elasticsearch进阶篇(三):ik分词器的使用与项目应用

一、下载并安装

GitHub下载地址:Releases · infinilabs/analysis-ik · GitHub
1.1 已有作者编译后的包文件

选择与所需es版本相同的ik分词器,下载已经打包后的.zip文件
https://img-blog.csdnimg.cn/img_convert/4a78eababff6b694c8f5dce605c8d8a9.png
1.2 只有源代码的版本

首先下载源码解压后使用idea打开,修改es版本与分词器版本相同
https://img-blog.csdnimg.cn/img_convert/7427be6d6058cc71931b3216ae38765a.png
使用 mvn clean install 打包时报错:
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.5.1:compile (default-compile) on project elasticsearch-analysis-ik: Compilation failure
/D:/PersonalProjects/analysis-ik-7.17.11/analysis-ik-7.17.11/src/main/java/org/elasticsearch/index/analysis/IkAnalyzerProvider.java: 无法将类 org.elasticsearch.index.analysis.AbstractIndexAnalyzerProvider<T>中的构造器
AbstractIndexAnalyzerProvider应用到给定类型;
   需要: org.elasticsearch.index.IndexSettings,java.lang.String,org.elasticsearch.common.settings.Settings
   找到: java.lang.String,org.elasticsearch.common.settings.Settings
修改代码报错部门:增长indexSetting参数到super入参的第一个位置
https://img-blog.csdnimg.cn/img_convert/2fd35ac886c76e873be8fbfc07844ece.png
使用mvn clean install举行打包,注意我们所需的是/target/release目录下的.zip压缩包
https://img-blog.csdnimg.cn/img_convert/8c29dabe5a326c02d828165b18b686e0.png
1.3 安装ik分词插件

将下载大概编译后的.zip文件解压到es的安装目录下的plugins目录下,并重命名为ik
https://img-blog.csdnimg.cn/img_convert/9df89047e886f6c374c87243a466146f.png
然后启动es,查看日志可发现已经加载的ik分词器
https://img-blog.csdnimg.cn/img_convert/cb9819b2399e0d3f08ce52ab02a0315a.png
二、ik分词器的模式

IK分词器提供了两种主要的分词模式:

[*] 细粒度分词模式(ik_max_word):

[*]在这种模式下,IK分词器会尽大概地按照辞书中的词语举行最大长度匹配,将文本切分成连续的词语序列。
[*]这种模式实用于对文本举行过细的切分,会尽大概地将句子切分为最小的词语单位,可以大概得到更加准确的分词结果。

[*] 智能分词模式(ik_smart):

[*] 在智能切分模式下,IK分词器会团结辞书匹配和机器学习算法,根据文本的上下文信息举行分词,保留词语的完整性。
[*] 这种模式可以大概更好地处理惩罚一些特殊情况,如未登录词和新词等,进步了分词的准确性和实用性。

2.1 ik_smart演示

POST _analyze
{
"analyzer": "ik_smart",
"text": "中国篮球队"
}
{
    "tokens": [
      {
            "token": "中国",
            "start_offset": 0,
            "end_offset": 2,
            "type": "CN_WORD",
            "position": 0
      },
      {
            "token": "篮球队",
            "start_offset": 2,
            "end_offset": 5,
            "type": "CN_WORD",
            "position": 1
      }
    ]
}
2.2 ik_max_word演示

POST _analyze
{
"analyzer": "ik_max_word",
"text": "中国篮球队"
}
{
    "tokens": [
      {
            "token": "中国篮球",
            "start_offset": 0,
            "end_offset": 4,
            "type": "CN_WORD",
            "position": 0
      },
      {
            "token": "中国",
            "start_offset": 0,
            "end_offset": 2,
            "type": "CN_WORD",
            "position": 1
      },
      {
            "token": "篮球队",
            "start_offset": 2,
            "end_offset": 5,
            "type": "CN_WORD",
            "position": 2
      },
      {
            "token": "篮球",
            "start_offset": 2,
            "end_offset": 4,
            "type": "CN_WORD",
            "position": 3
      },
      {
            "token": "球队",
            "start_offset": 3,
            "end_offset": 5,
            "type": "CN_WORD",
            "position": 4
      }
    ]
}
2.3 standard演示

POST _analyze
{
"analyzer": "standard",
"text": "中国篮球队"
}
{
    "tokens": [
      {
            "token": "中",
            "start_offset": 0,
            "end_offset": 1,
            "type": "<IDEOGRAPHIC>",
            "position": 0
      },
      {
            "token": "国",
            "start_offset": 1,
            "end_offset": 2,
            "type": "<IDEOGRAPHIC>",
            "position": 1
      },
      {
            "token": "篮",
            "start_offset": 2,
            "end_offset": 3,
            "type": "<IDEOGRAPHIC>",
            "position": 2
      },
      {
            "token": "球",
            "start_offset": 3,
            "end_offset": 4,
            "type": "<IDEOGRAPHIC>",
            "position": 3
      },
      {
            "token": "队",
            "start_offset": 4,
            "end_offset": 5,
            "type": "<IDEOGRAPHIC>",
            "position": 4
      }
    ]
}
三、ik分词器在项目中的使用

通例的最常用的使用方式就是,数据插入存储时用 ik_max_word模式分词,而检索时,用ik_smart模式分词,即:索引时最大化的将文章内容分词,搜索时更准确的搜索到想要的结果。
建立映射示例如下:在数据被索引时我们设置"analyzer": “ik_max_word”,在检索时指定"search_analyzer": “ik_smart”
{
"properties": {
    "id": {
      "type": "long"
    },
    "title": {
      "type": "text",
      "analyzer": "ik_max_word",
      "search_analyzer": "ik_smart",
      "fields": {
      "keyword": {
          "type": "keyword"
      },
      "sort": {
          "type": "keyword",
          "normalizer": "sort_normalizer"
      }
      }
    },
    "content": {
      "type": "text",
      "analyzer": "ik_max_word",
      "search_analyzer": "ik_smart"
    }
}
}
输入检索词艺术歌曲,由于在mapping中设置了 “search_analyzer”: “ik_smart”,因此默认使用最大分词,根据bm25算分后返回结果如下
https://img-blog.csdnimg.cn/img_convert/5d79610d09d9539513c6c0b7fa15726e.png
四、ik设置文件

4.1 设置文件的说明

设置文件地址:\plugins\ik\config
https://img-blog.csdnimg.cn/img_convert/149675cb215d05668dfe52764f8c205f.png

[*] IKAnalyzer.cfg.xml:
这是IK分词器的主要设置文件,用于设置分词器的一些参数和规则。例如,可以在这个文件中指定自界说辞书、停用词表、分词模式等。
[*] ext.dic:
这是一个外部用户辞书文件,用于存放用户自界说的词语。IK分词器在举行分词时会优先使用这个辞书中的词语,可以用来补充分词器的默认辞书,进步分词准确性。
[*] stopword.dic:
这是一个停用词表文件,用于存放须要在分词过程中忽略的常用词语。停用词通常是一些没有现实语义大概在特定场景中可有可无的词语,如“的”、“是”、“在”等。
[*] quantifier.dic:
这是一个量词辞书文件,用于存放中文中常见的量词,如“个”、“只”、“张”等。这些量词在分词过程中通常会被特别处理惩罚,以确保其精确分词。
[*] main.dic:ik原生内置的中文词库,总共有27万多条,只要是这些单词,都会被分在一起,都会按照这个内里的词语去分词
[*] preposition.dic: 介词
[*] surname.dic:中国的姓氏
4.2 自界说词库

每年都会出现新的流行语大概新的词语,但是自带的词库并未收录导致被分词。我们可以使用自界说词库来办理此问题。
示例:
https://img-blog.csdnimg.cn/img_convert/329e30bdb448d97a27c0d2646b3f4996.png
新增自界说词库 diy_word.dic,同时修改设置文件,指定自界说词库的名称。保存后重启es
https://img-blog.csdnimg.cn/img_convert/5963f34bf55cf37842042b5bccba76de.png
检索结果如下:
https://img-blog.csdnimg.cn/img_convert/865a66b1f7bdf901e0e193b8bd5b218d.png
五、参考链接

ElasticSearch7.3学习(十五)----中文分词器(IK Analyzer)及自界说词库_eleasticsearch ikanalyzer已经内置了词库是干什么用-CSDN博客
ElasticSearch(ES)、ik分词器、倒排索引相关介绍 - 一剑一叶一花 - 博客园 (cnblogs.com)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Elasticsearch进阶篇(三):ik分词器的使用与项目应用