Elasticsearch安装ik分词插件

前置条件

  • 如果发现问题请留言
    如果有发现不正确的地方,欢迎留言指正,感激不尽!
  • 已安装好Elasticsearch
    本次安装插件版本为7.3.1,需与elasticsearch版本一致, elasticsearch安装在/home/elk/elasticsearch-7.3.1下.如果你想安装一个7.3.1版本的elasticsearch,可以参照Centos7安装Elasticsearch&Kibana进行安装
  • 已安装好kibana
    本教程中的kibana安装在home/elk/kibana-7.3.1-linux-x86_64下,使用kibana的dev tool执行相关分词验证操作
  • 已下载好ik分词插件
    本次安装插件包为elasticsearch-analysis-ik-7.3.1.zip
    官方下载地址找到相应版本进行下载
  • 系统及操作用户等
    本次安装操作系统为Centos7,用户为elk,已经有专门存放软件包的目录/home/elk/soft ,本教程中kibana访问地址为192.168.1.14:5601

插件安装

插件上传

通过xftp工具将分词插件包elasticsearch-analysis-ik-7.3.1.zip上传到虚拟机的/home/elk/soft目录下
Elasticsearch安装ik分词插件_第1张图片

插件安装

以下命令全部使用elk用户操作

# 停止es服务
jps |grep Elasticsearch|awk {'print $1'}|xargs kill
# 确认es服务已停止,使用jps找不到Elsaticsearch进程则说明正确停止
jps |grep Elasticsearch
# 插件安装,执行以下命令进行安装,在提示时输入y,然后回车
 ~/elasticsearch-7.3.1/bin/elasticsearch-plugin install file:///home/elk/soft/elasticsearch-analysis-ik-7.3.1.zip
 # 查看已安装插件
 ~/elasticsearch-7.3.1/bin/elasticsearch-plugin list

Elasticsearch安装ik分词插件_第2张图片

插件配置

ik分词插件自定义词典支持本地词库远程词库
本地词库:使用~/elasticsearch-7.3.1/config/analysis-ik/目录下的文件作为词典
远程词库:使用url指定扩展词典

本地词库配置

# 创建一个自定义扩展词文件
touch ~/elasticsearch-7.3.1/config/analysis-ik/my_extra.dic
# 创建一个停用词文件
touch ~/elasticsearch-7.3.1/config/analysis-ik/my_stopword.dic
# 编辑ik分词器配置文件
vim ~/elasticsearch-7.3.1/config/analysis-ik/IKAnalyzer.cfg.xml

按照以下内容进行配置



<properties>
        <comment>IK Analyzer 扩展配置comment>
        
        <entry key="ext_dict">my_extra.dicentry>
         
        <entry key="ext_stopwords">my_stopword.dicentry>
properties>

上面的配置指定了一个自定义词典文件my_extra.dic,一个自定义停用词文件my_stopword.dic

远程词库配置

官方配置连接

远程词库支持热词动态刷新

  • 更新条件
    http 请求需要返回两个头部(header),一个是 Last-Modified,一个是 ETag,这两者都是字符串类型,只要有一个发生变化,该插件就会去抓取新的分词进而更新词库。
  • 返回内容要求
    http 请求返回的内容格式是一行一个分词,换行符用 \n 即可。
# 安装nginx,你也可以安装apache,或者使用其他机器上安装的nginx或apache
yum install -y epel-release
yum install -y nginx
# 默认情况下nginx网页根目录为/usr/share/nginx/html
# 创建目录/usr/share/nginx/html/ik
mkdir -p /usr/share/nginx/html/ik
# 创建自定义词典文件和自定义停用词文件
touch /usr/share/nginx/html/ik/my_extra.dic
touch /usr/share/nginx/html/ik/my_stopword.dic
# 设置开机启动(可以不设置开机启动)  
systemctl enable nginx
# 启动nginx
systemctl start nginx
# 验证词典文件可以访问,如果下面两条命令没有任何返回表明nginx启动成功且分词文件(目前无内容)可以访问
curl http://192.168.1.14/ik/my_extra.dic
curl http://192.168.1.14/ik/my_stopword.dic
# 编辑ik分词器配置文件
vim ~/elasticsearch-7.3.1/config/analysis-ik/IKAnalyzer.cfg.xml

按照以下内容进行配置



<properties>
        <comment>IK Analyzer 扩展配置comment>
        
        <entry key="remote_ext_dict">http://192.168.1.14/ik/my_extra.dicentry>
        
        <entry key="remote_ext_stopwords">http://192.168.1.14/ik/my_stopword.dicentry>
properties>

上面的配置指定了一个自定义词典文件http://192.168.1.14/ik/my_extra.dic
一个自定义停用词文件http://192.168.1.14/ik/my_extra.dic

插件测试

# 启动es
~/elasticsearch-7.3.1/bin/elasticsearch -d
# 启动kibana 此种方式启动会有相关日志输出
~/kibana-7.3.1-linux-x86_64/bin/kibana &

访问kibana地址192.168.1.14:5601并点击主页面中的开发工具图标
Elasticsearch安装ik分词插件_第3张图片

默认分词测试

测试仅针对本地词库进行了测试,远程词库测试与本地词库测试基本一致,只是不需要重启es.

在开发工具左边执行以下命令

GET _analyze
{
  "analyzer": "ik_smart",
  "text": ["ElasticSearch是一个基于Lucene的搜索服务器"]
}

返回内容如下

{
  "tokens" : [
    {
      "token" : "elasticsearch",
      "start_offset" : 0,
      "end_offset" : 13,
      "type" : "ENGLISH",
      "position" : 0
    },
    {
      "token" : "是",
      "start_offset" : 13,
      "end_offset" : 14,
      "type" : "CN_CHAR",
      "position" : 1
    },
    {
      "token" : "一个",
      "start_offset" : 14,
      "end_offset" : 16,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "基于",
      "start_offset" : 16,
      "end_offset" : 18,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
      "token" : "lucene",
      "start_offset" : 18,
      "end_offset" : 24,
      "type" : "ENGLISH",
      "position" : 4
    },
    {
      "token" : "的",
      "start_offset" : 24,
      "end_offset" : 25,
      "type" : "CN_CHAR",
      "position" : 5
    },
    {
      "token" : "搜索",
      "start_offset" : 25,
      "end_offset" : 27,
      "type" : "CN_WORD",
      "position" : 6
    },
    {
      "token" : "服务器",
      "start_offset" : 27,
      "end_offset" : 30,
      "type" : "CN_WORD",
      "position" : 7
    }
  ]
}

可见初始分词效果还是不错的.

自定义扩展词测试

比如我们希望将搜索服务器作为一个词处理,还希望过滤掉这个词

# 添加一个自定义词汇,多个词汇用换行分隔
echo 搜索服务器 > ~/elasticsearch-7.3.1/config/analysis-ik/my_extra.dic
# 添加一个自定义停用词,多个用换行分隔
echo> ~/elasticsearch-7.3.1/config/analysis-ik/my_stopword.dic

在这里插入图片描述
目前本地词库(本地文件)方式不支持词库热更新需要重启es,才会生效

# 停止es服务
jps |grep Elasticsearch|awk {'print $1'}|xargs kill
# 确认es服务已停止,使用jps找不到Elsaticsearch进程则说明正确停止
jps |grep Elasticsearch
# 启动es
~/elasticsearch-7.3.1/bin/elasticsearch -d

在开发工具中再次执行以下命令

GET _analyze
{
  "analyzer": "ik_smart",
  "text": ["ElasticSearch是一个基于Lucene的搜索服务器"]
}

返回内容如下

{
  "tokens" : [
    {
      "token" : "elasticsearch",
      "start_offset" : 0,
      "end_offset" : 13,
      "type" : "ENGLISH",
      "position" : 0
    },
    {
      "token" : "是",
      "start_offset" : 13,
      "end_offset" : 14,
      "type" : "CN_CHAR",
      "position" : 1
    },
    {
      "token" : "一个",
      "start_offset" : 14,
      "end_offset" : 16,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "基于",
      "start_offset" : 16,
      "end_offset" : 18,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
      "token" : "lucene",
      "start_offset" : 18,
      "end_offset" : 24,
      "type" : "ENGLISH",
      "position" : 4
    },
    {
      "token" : "搜索服务器",
      "start_offset" : 25,
      "end_offset" : 30,
      "type" : "CN_WORD",
      "position" : 5
    }
  ]
}

发现返回结果中已经将搜索服务器作为一个词处理,并且去除了

你可能感兴趣的:(数据库)