首页 > 其他分享 >ElasticSearch:集成IK分词器以及基本使用

ElasticSearch:集成IK分词器以及基本使用

时间:2022-11-09 15:05:28浏览次数:75  
标签:7.16 text ik IK elasticsearch 分词器 ElasticSearch


IK分词器的简单介绍

把一段中文划分成一个个的关键字,我们在搜索时候会把自己的语句进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配操作 ,默认的中文分词是将每个字分成一个词。目前比较流行的是ik分词器是一个好用的中文分词器。

下载IK分词器

根据你的Es的版本来下载对应版本的IK,这里我使用的是7.16.2的ES,所以就下载ik-7.16.2.zip的文件(这种版本对应的整挺好)
​​​下载网址​

​​ElasticSearch:简单介绍以及使用Docker部署ElasticSearch 和 Kibana​​

我以这篇博客为基础,在服务器新创建一个plugins文件夹,好放ik插件,然后挂载

mkdir -p /usr/local/elasticsearch/plugins/ik

新创建的文件夹也要赋予用户操作权限

chmod -R 777 /usr/local/elasticsearch/plugins/ik

使用xftp将文件拷贝到服务器的上述路径之后,解压

//解压
unzip elasticsearch-analysis-ik-7.16.2.zip
//完事之后,删除压缩包
rm -rf elasticsearch-analysis-ik-7.16.2.zip

停止上面那篇博客创建的容器并删除

docker stop 容器ID/容器名
docker rm 容器ID/容器名

ElasticSearch:集成IK分词器以及基本使用_elasticsearch

重新创建容器服务运行

docker run -itd -p 9200:9200 -p 9300:9300 -p 5601:5601 \
-v /usr/local/elasticsearch/config/jvm.options:/home/elasticsearch/elasticsearch-7.16.2/config/jvm.options \
-v /usr/local/elasticsearch/config/elasticsearch.yml:/home/elasticsearch/elasticsearch-7.16.2/config/elasticsearch.yml \
-v /usr/local/elasticsearch/data:/home/elasticsearch/elasticsearch-7.16.2/data \
-v /usr/local/elasticsearch/plugins://home/elasticsearch/elasticsearch-7.16.2/plugins \
--name EsKibana nshou/elasticsearch-kibana

查看插件

http://IP:9200/_cat/plugins

ElasticSearch:集成IK分词器以及基本使用_analyzer_02

测试IK分词器

使用kibana的Dev Tools工具来测试IK分词器

http://IP:5601/app/dev_tools#/console

IK提供了两种分词算法: ik_smart和ik_max_word

ik_smart:最少切分

请求一个分词器,填好分词要求

GET _analyze
{
"analyzer": "ik_smart",
"text": "搜索引擎"
}

ik_max_word: 最多切分

GET _analyze
{
"analyzer": "ik_max_word",
"text": "搜索引擎"
}

不过这也是看你输入的text来的,有时候最少切分和最多切分的结果差不多

ElasticSearch:集成IK分词器以及基本使用_analyzer_03


像如下句子就切分得差不多,当是一个名词的时候,像上面那样好像就切分的区别大一些

GET _analyze
{
"analyzer": "ik_smart",
"text": "我来试试这个切分算法"
}

GET _analyze
{
"analyzer": "ik_max_word",
"text": "我来试试这个切分算法"
}

自定义词典

分词算法毕竟是算法,不可能穷尽所有我们的需求。
有些我们自己的土话可能就不需要IK分词器将它分割开

如下例子不管使用那个算法都分开了

GET _analyze
{
"analyzer": "ik_smart",
"text": "三克油"
}

GET _analyze
{
"analyzer": "ik_max_word",
"text": "三克油"
}

所以我们要自定义一个三克油的词来让IK分词器别把他们分割开了

在如下目录下有着相应的配置文件

plugins/ik/config

下面.dic后缀的都是字典

ElasticSearch:集成IK分词器以及基本使用_analyzer_04


我们随便进一个main.dic看看,可以看见都是词语

ElasticSearch:集成IK分词器以及基本使用_analyzer_05


IKAnalyzer.cfg.xml 配置文件

我们修改这个配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典,对应着config目录下面的一个文档名,我这里定义为了ext_dict -->
<entry key="ext_dict">ext_dict.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

并在config 这个目录下面新建一个ext_dict.dic文件

将自定义的词语放进去

ElasticSearch:集成IK分词器以及基本使用_analyzer_06


修改文件之后,我们需要重启ElasticSearch

docker restart 容器ID/容器名

再次使用kibana 的dev tools ,不管那个算法策略都有三克油这个词

GET _analyze
{
"analyzer": "ik_smart",
"text": "三克油"
}

GET _analyze
{
"analyzer": "ik_max_word",
"text": "三克油"
}

ElasticSearch:集成IK分词器以及基本使用_analyzer_07

(写博客主要是对自己学习的归纳整理,资料大部分来源于书籍、网络资料、官方文档和自己的实践,整理的不足和错误之处,请大家评论区批评指正。同时感谢广大博主和广大作者辛苦整理出来的资源和分享的知识。)


标签:7.16,text,ik,IK,elasticsearch,分词器,ElasticSearch
From: https://blog.51cto.com/u_14020077/5836605

相关文章

  • ElasticSearch Java API之索引操作
    背景:​​ElasticSearchJava客户端连接ElasticSearch​​以这篇博客为基础​​ElasticSearch:简单介绍以及使用Docker部署ElasticSearch和Kibana​​这篇博客简单部署了E......
  • ElasticSearch Java API之文档操作
    文档Document简单介绍被索引的一条数据,索引的基本信息单元,以JSON格式来表示。比如:你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档......
  • ElasticSearch Java 客户端连接ElasticSearch
    背景:​​ElasticSearch:简单介绍以及使用Docker部署ElasticSearch和Kibana​​这篇博客简单部署了ElasticSearchElasticSearch客户端特征所有ElasticsearchAPI的强类......
  • cobalt strike stage payload 生成分析
    前言:cobaltstrikestagepayload生成分析笔记,这里主要学习cs如何进行构造payload分阶段stagepayload生成这里的话主要分析就是客户端中的aggressor.dialogs.WindowsEx......
  • Elasticsearch调优
    设计阶段调优1.根据业务增量需求,采取基于日期模板创建索引,通过rolloverAPI滚动索引;2.使用别名进行索引管理;3.每条凌晨定时对索引做force_merge操作,以释放空间。4.采取冷......
  • ASP .NET Core 使用 Serilog记录日志并输出至ElasticSearch
    Serilog添加ES配置服务端Elasticsearch+Kibana的部署参考这篇博客,版本都是当前最新版本8.5.0Serilog相关文档参考这篇博客新建一个ASP.NETCoreWeb项目,添加以下Neget......
  • docker-compose部署elasticsearch集群
    一、准备基础镜像dockerpullelasticsearch:7.3.2二、dockerfile(Dockerfile-elasticsearch),为了保护原生的镜像FROMelasticsearch:7.3.2MAINTAINERlili......
  • BUUCTF [ACTF新生赛2020]SoulLike题解(非爆破)
    查壳发现无壳。   IDA检查main函数显然先检查了输入是否以actf{开头进入sub_83A无法进入 点不进去是因为IDA限制了解析函数的长度,可以修改IDA下cfg......
  • 02-DALVIK虚拟机启动过程
    2.1init.rc启动脚本Android系统在启动时,第一个启动的进程就是init进程,也就是我们说的一号进程,我们通过下图的ps命令可以看到init进程号为1。接着,init进程根据读取/init.r......
  • ES拼音搜索分词器练习
    #拼音分词器GET_analyze{"text":"如家酒店","analyzer":"pinyin"}#ik分词器GET_analyze{"text":"如家酒店","analyzer":"ik_smart"}DELETEtestPUT/test......