ToB企服应用市场:ToB评测及商务社交产业平台

标题: Elasticsearch进阶篇(三):ik分词器的使用与项目应用 [打印本页]

作者: 悠扬随风    时间: 2024-6-11 11:58
标题: Elasticsearch进阶篇(三):ik分词器的使用与项目应用
一、下载并安装

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

选择与所需es版本相同的ik分词器,下载已经打包后的.zip文件

1.2 只有源代码的版本

首先下载源码解压后使用idea打开,修改es版本与分词器版本相同

使用 mvn clean install 打包时报错:
  1. [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.5.1:compile (default-compile) on project elasticsearch-analysis-ik: Compilation failure
  2. [ERROR] /D:/PersonalProjects/analysis-ik-7.17.11/analysis-ik-7.17.11/src/main/java/org/elasticsearch/index/analysis/IkAnalyzerProvider.java:[13,9] 无法将类 org.elasticsearch.index.analysis.AbstractIndexAnalyzerProvider<T>中的构造器
  3. AbstractIndexAnalyzerProvider应用到给定类型;
  4. [ERROR]   需要: org.elasticsearch.index.IndexSettings,java.lang.String,org.elasticsearch.common.settings.Settings
  5. [ERROR]   找到: java.lang.String,org.elasticsearch.common.settings.Settings
复制代码
修改代码报错部门:增长indexSetting参数到super入参的第一个位置

使用mvn clean install举行打包,注意我们所需的是/target/release目录下的.zip压缩包

1.3 安装ik分词插件

将下载大概编译后的.zip文件解压到es的安装目录下的plugins目录下,并重命名为ik

然后启动es,查看日志可发现已经加载的ik分词器

二、ik分词器的模式

IK分词器提供了两种主要的分词模式:
2.1 ik_smart演示

  1. POST _analyze
  2. {
  3.   "analyzer": "ik_smart",
  4.   "text": "中国篮球队"
  5. }
复制代码
  1. {
  2.     "tokens": [
  3.         {
  4.             "token": "中国",
  5.             "start_offset": 0,
  6.             "end_offset": 2,
  7.             "type": "CN_WORD",
  8.             "position": 0
  9.         },
  10.         {
  11.             "token": "篮球队",
  12.             "start_offset": 2,
  13.             "end_offset": 5,
  14.             "type": "CN_WORD",
  15.             "position": 1
  16.         }
  17.     ]
  18. }
复制代码
2.2 ik_max_word演示

  1. POST _analyze
  2. {
  3.   "analyzer": "ik_max_word",
  4.   "text": "中国篮球队"
  5. }
复制代码
  1. {
  2.     "tokens": [
  3.         {
  4.             "token": "中国篮球",
  5.             "start_offset": 0,
  6.             "end_offset": 4,
  7.             "type": "CN_WORD",
  8.             "position": 0
  9.         },
  10.         {
  11.             "token": "中国",
  12.             "start_offset": 0,
  13.             "end_offset": 2,
  14.             "type": "CN_WORD",
  15.             "position": 1
  16.         },
  17.         {
  18.             "token": "篮球队",
  19.             "start_offset": 2,
  20.             "end_offset": 5,
  21.             "type": "CN_WORD",
  22.             "position": 2
  23.         },
  24.         {
  25.             "token": "篮球",
  26.             "start_offset": 2,
  27.             "end_offset": 4,
  28.             "type": "CN_WORD",
  29.             "position": 3
  30.         },
  31.         {
  32.             "token": "球队",
  33.             "start_offset": 3,
  34.             "end_offset": 5,
  35.             "type": "CN_WORD",
  36.             "position": 4
  37.         }
  38.     ]
  39. }
复制代码
2.3 standard演示

  1. POST _analyze
  2. {
  3.   "analyzer": "standard",
  4.   "text": "中国篮球队"
  5. }
复制代码
  1. {
  2.     "tokens": [
  3.         {
  4.             "token": "中",
  5.             "start_offset": 0,
  6.             "end_offset": 1,
  7.             "type": "<IDEOGRAPHIC>",
  8.             "position": 0
  9.         },
  10.         {
  11.             "token": "国",
  12.             "start_offset": 1,
  13.             "end_offset": 2,
  14.             "type": "<IDEOGRAPHIC>",
  15.             "position": 1
  16.         },
  17.         {
  18.             "token": "篮",
  19.             "start_offset": 2,
  20.             "end_offset": 3,
  21.             "type": "<IDEOGRAPHIC>",
  22.             "position": 2
  23.         },
  24.         {
  25.             "token": "球",
  26.             "start_offset": 3,
  27.             "end_offset": 4,
  28.             "type": "<IDEOGRAPHIC>",
  29.             "position": 3
  30.         },
  31.         {
  32.             "token": "队",
  33.             "start_offset": 4,
  34.             "end_offset": 5,
  35.             "type": "<IDEOGRAPHIC>",
  36.             "position": 4
  37.         }
  38.     ]
  39. }
复制代码
三、ik分词器在项目中的使用

通例的最常用的使用方式就是,数据插入存储时用 ik_max_word模式分词,而检索时,用ik_smart模式分词,即:索引时最大化的将文章内容分词,搜索时更准确的搜索到想要的结果。
建立映射示例如下:在数据被索引时我们设置"analyzer": “ik_max_word”,在检索时指定"search_analyzer": “ik_smart”
  1. {
  2.   "properties": {
  3.     "id": {
  4.       "type": "long"
  5.     },
  6.     "title": {
  7.       "type": "text",
  8.       "analyzer": "ik_max_word",
  9.       "search_analyzer": "ik_smart",
  10.       "fields": {
  11.         "keyword": {
  12.           "type": "keyword"
  13.         },
  14.         "sort": {
  15.           "type": "keyword",
  16.           "normalizer": "sort_normalizer"
  17.         }
  18.       }
  19.     },
  20.     "content": {
  21.       "type": "text",
  22.       "analyzer": "ik_max_word",
  23.       "search_analyzer": "ik_smart"
  24.     }
  25.   }
  26. }
复制代码
输入检索词艺术歌曲,由于在mapping中设置了 “search_analyzer”: “ik_smart”,因此默认使用最大分词,根据bm25算分后返回结果如下

四、ik设置文件

4.1 设置文件的说明

设置文件地址:\plugins\ik\config

4.2 自界说词库

每年都会出现新的流行语大概新的词语,但是自带的词库并未收录导致被分词。我们可以使用自界说词库来办理此问题。
示例:

新增自界说词库 diy_word.dic,同时修改设置文件,指定自界说词库的名称。保存后重启es

检索结果如下:

五、参考链接

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4