elasticsearch hanlp插件远程词典配置

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 简要讲述elasticsearch hanlp插件中配置远程词典的操作以及一些注意点

背景

在使用elasticsearch的过程中,总会遇到与分词相关的需求,这里将针对常用的elasticsearch hanlp(后面统称为 es hanlp)分词插件进行讲解演示配置自定义业务字典,提高es hanlp分词的准确性,同时也提高查询效率。关于es hanlp通过更改关键词文件配置自定义词典的内容可以参考文章:https://developer.aliyun.com/article/1163240,本文主要是讲述另外一种自定义词典内容的操作,配置远程词典。

远程词典配置

新增远程词典文件

es hanlp关于远程词典的文件配置方式参考官方文档即可,文档地址:https://github.com/KennFalcon/elasticsearch-analysis-hanlp/tree/master,这里我把远程词典文件放在我们的腾讯云上面,主要是因为es hanlp 在加载远程词典文件时需要通过response header判断Last-Modified和 ETag来确定远程文件是否有变动,进而决定是否需要加载更新;而腾讯云返回的文件是直接带有Last-Modified和 ETag,这里可以看一下我的文件响应的response

image.png

符合官方文档要求的远程词典文件返回两个头部(header),一个是 Last-Modified,一个是 ETag

image.png

说明:这里说明一下,如果这两个属性都没有变化的话,es hanlp插件是不会热更新关键词的;

另外,如果大家想要使用腾讯云COS作为远程词典文件存放位置的话,需要注意必须要用文件的原始请求地址,不能用有CDN缓存的地址,这样才能达到1分钟热更新的目的。比如

http://存储桶名.cos.ap-beijing.myqcloud.com/ei-dongao/mywords.txt

远程词典文件准备好之后就可以修改es hanlp 远程配置文件hanlp-remote.xml了

修改hanlp-remote.xml

找到hanlp-remote.xml配置文件路径ES_HOME/config/analysis-hanlp

image.png

修改hanlp-remote.xml,增加远程词典配置

image.png

这里配置好远程词典路径之后需要重启es,因为改动了配置文件嘛,后续更改远程配置文件的内容时就无需重启es了,因为你没有改动es的配置文件。

自动加载词典

配置完成远程词典内容后,无需重启es,等待1分钟后,词典自动加载。

[2023-04-24T13:29:16,636][INFO ][c.h.d.ExtMonitor         ] [ei-test-es-node190] hanlp custom dictionary isn't modified, so no need reload
[2023-04-24T13:29:17,163][INFO ][c.h.d.RemoteMonitor      ] [ei-test-es-node190] load hanlp remote custom dict path: http://存储桶名.cos.ap-beijing.myqcloud.com/ei-dongao/mywords.txt
[2023-04-24T13:29:17,623][INFO ][c.h.d.RemoteMonitor      ] [ei-test-es-node190] finish load hanlp remote custom dict path: http://存储桶名.cos.ap-beijing.myqcloud.com/ei-dongao/mywords.txt

比如我在远程词典中增加关键词

腾讯云文件管理

加载完成之后我们可以开始测试是否生效。

注:多台es服务器配置时,需保证指向相同的远程词典路径,保证加载关键词文件的一致

远程词典测试

在远程词典测试之前,我们需要对我们的索引开启远程词典,这需要配置自定义分词,并开启远程词典加载开关,es hanlp 自定义分词配置参考博文:https://developer.aliyun.com/article/1163285

1.当我们使用hanlp默认词典配置的时候我们测试

POST _analyze
{
"text": "初级会计指南在这里",
"analyzer": "hanlp"}

返回结果是

{
"tokens" : [
    {
"token" : "初级",
"start_offset" : 0,
"end_offset" : 2,
"type" : "b",
"position" : 0    },
    {
"token" : "会计",
"start_offset" : 2,
"end_offset" : 4,
"type" : "nnt",
"position" : 1    },
    {
"token" : "指南",
"start_offset" : 4,
"end_offset" : 6,
"type" : "n",
"position" : 2    },
    {
"token" : "在",
"start_offset" : 6,
"end_offset" : 7,
"type" : "p",
"position" : 3    },
    {
"token" : "这里",
"start_offset" : 7,
"end_offset" : 9,
"type" : "rzs",
"position" : 4    }
  ]
}

2.我们使用自定义分词配置,开启远程词典

PUT test
{
"settings": {
"analysis": {
"analyzer": {
"hanlp_dongao": {
"tokenizer": "hanlp_analyzer"        }
      },
"tokenizer": {
"hanlp_analyzer": {
"type": "hanlp",
"enable_stop_dictionary": true,
"enable_custom_config":true,
"enable_remote_dict":true
        }
      }
    }
  }
}

然后配置关键词

初级会计

等待远程词典加载完成后再次用开启了远程词典的索引测试

image.png

加载完成之后再次验证

POST test/_analyze
{
"text": "初级会计指南在这里",
"analyzer": "hanlp_dongao"}

分词结果

{
"tokens" : [
    {
"token" : "初级会计",
"start_offset" : 0,
"end_offset" : 4,
"type" : "n",
"position" : 0    },
    {
"token" : "指南",
"start_offset" : 4,
"end_offset" : 6,
"type" : "n",
"position" : 1    }
  ]
}

可以看到已经将【初级会计】分成一个词了。

这里有一点需要说明,新增加关键词的话,热加载完成之后es分词就可以按照增加的关键词进行分词,但是删除关键词的话,还是会按之前增加的关键词进行分词,可能是es hanlp插件有缓存机制,也可能是插件版本的问题,我用的是匹配es版本6.7.1的hanlp插件,最新的版本可能不会存在这个问题,但是鉴于升级es改动较大,为了不影响业务只能采用当下版本对应的hanlp插件。这一点在使用es hanlp插件时需要考虑在内。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
2月前
|
数据可视化 Java Windows
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
本文介绍了如何在Windows环境下安装Elasticsearch(ES)、Elasticsearch Head可视化插件和Kibana,以及如何配置ES的跨域问题,确保Kibana能够连接到ES集群,并提供了安装过程中可能遇到的问题及其解决方案。
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
|
1天前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
8 5
|
29天前
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
98 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
|
1月前
|
运维 监控 数据可视化
大数据-171 Elasticsearch ES-Head 与 Kibana 配置 使用 测试
大数据-171 Elasticsearch ES-Head 与 Kibana 配置 使用 测试
54 1
|
3月前
|
存储 Ubuntu Oracle
在Ubuntu 14.04上安装和配置Elasticsearch的方法
在Ubuntu 14.04上安装和配置Elasticsearch的方法
42 0
|
3月前
|
存储 安全 Java
在CentOS 7上安装和配置Elasticsearch的方法
在CentOS 7上安装和配置Elasticsearch的方法
225 0
|
2月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
3月前
|
数据可视化 Docker 容器
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
这篇文章提供了通过Docker安装Elasticsearch和Kibana的详细过程和图解,包括下载镜像、创建和启动容器、处理可能遇到的启动失败情况(如权限不足和配置文件错误)、测试Elasticsearch和Kibana的连接,以及解决空间不足的问题。文章还特别指出了配置文件中空格的重要性以及环境变量中字母大小写的问题。
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
|
3月前
|
JSON 自然语言处理 数据库
Elasticsearch从入门到项目部署 安装 分词器 索引库操作
这篇文章详细介绍了Elasticsearch的基本概念、倒排索引原理、安装部署、IK分词器的使用,以及如何在Elasticsearch中进行索引库的CRUD操作,旨在帮助读者从入门到项目部署全面掌握Elasticsearch的使用。
|
3月前
|
Ubuntu Oracle Java
如何在 Ubuntu VPS 上安装 Elasticsearch
如何在 Ubuntu VPS 上安装 Elasticsearch
37 0

热门文章

最新文章

下一篇
无影云桌面