当前位置: 首页 > 编程日记 > 正文

requirednew基于xml配置日志不回滚_Elasticsearch配置IK分词器的远程词库

1a6dff68b2b3d28563ee4436163c0827.png

在生活中很多很多地方都涉及到了全文检索,最常见的就好比日常使用到的百度搜索等搜索引擎,也都是基于全文检索来实现的;全文检索种类较多,就好比Elasticsearch、Sorl等。

为Ealsticsearch配置词库,可以很好的解决生活中的关键字检索的匹配度,为Elasticsearch配置远程词库的话,我们就可以实现动态的添加搜索关键字进行匹配了,就好比使用百度搜索关键字"器词分"这个关键字,我们直接在百度上搜索,基本上是搜索不到任何结果的;

我们先安装好elasticsearch,然后安装IK分词器,我们的es版本和ik的版本可以通过ik分词器的git地址上看到

medcl/elasticsearch-analysis-ik​github.com
6361ef39deaeabcef247bb87a331601b.png

bd6b903dc7c86e121532302887d27201.png

我们把es和ik分词器安装完毕后,即可开始配置词库,在es中默认有提供一些词库,过滤一些语气词等;在安装的es的根路径下有一个pluginsikconfig路径,下面有一个IKAnalyzer.cfg.xml配置xml,打开后可以看到

0f5f5dfecc0c3001f43114bdfe27bbd4.png


在这里,我们就可以为IK分词器配置远程词库了,首先,在服务器上某个地方创建一个.dic结尾的文件,然后通过nginx获取到当前文件的访问url;以我这边的测试代码为例;

我在服务器的根路径下的/date路径下建立了一个my_origin_ik.dic文件,然后配置nginx,在nginx配置一个service块,如下:

server
{listen 80;server_name **.**.**.230;location /dic/ {alias /data/;}
}


然后我们通过这个地址看一下能否访问到当前文件,地址如下:http://**.**.**.230/dic/my_origin_ik.dic,通过浏览器可以直接获取到我们配置的远程词库文件;

接下来,我们修改IK分词器的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><!--用户可以在这里配置自己的扩展字典 --><entry key="ext_dict">my_ik.dic</entry><!--用户可以在这里配置自己的扩展停止词字典--><entry key="ext_stopwords"></entry><!--用户可以在这里配置远程扩展字典 --><entry key="remote_ext_dict">http://**.**.**.230/dic/my_origin_ik.dic</entry><!--用户可以在这里配置远程扩展停止词字典--><!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

我们将远程词库的地址配置到key为remote_ext_dict的标签中,然后启动es,观察es的启动日志信息

[2019-12-07T13:46:24,903][INFO ][o.e.n.Node               ] [es-node] initializing ...
[2019-12-07T13:46:24,955][INFO ][o.e.e.NodeEnvironment    ] [es-node] using [1] data paths, mounts [[/ (rootfs)]], net usable_space [72.6gb], net total_space [98.3gb], types [rootfs]
[2019-12-07T13:46:24,955][INFO ][o.e.e.NodeEnvironment    ] [es-node] heap size [494.9mb], compressed ordinary object pointers [true][2019-12-07T13:46:26,898][INFO ][o.e.p.PluginsService     ] [es-node] loaded plugin [analysis-ik][2019-12-07T13:46:35,384][INFO ][o.e.n.Node               ] [es-node] started
[2019-12-07T13:46:35,434][INFO ][o.w.a.d.Monitor          ] try load config from /data/elasticsearch-6.3.0/config/analysis-ik/IKAnalyzer.cfg.xml
[2019-12-07T13:46:35,435][INFO ][o.w.a.d.Monitor          ] try load config from /data/elasticsearch-6.3.0/plugins/ik/config/IKAnalyzer.cfg.xml
[2019-12-07T13:46:35,634][INFO ][o.w.a.d.Monitor          ] [Dict Loading] /data/elasticsearch-6.3.0/plugins/ik/config/my_ik.dic
[2019-12-07T13:46:35,634][INFO ][o.w.a.d.Monitor          ] [Dict Loading] http://**.**.**.230/dic/my_origin_ik.dic
[2019-12-07T13:46:36,128][WARN ][o.e.x.s.a.s.m.NativeRoleMappingStore] [es-node] Failed to clear cache for realms [[]]
[2019-12-07T13:46:36,143][INFO ][o.e.l.LicenseService     ] [es-node] license [e8f**710-aa**-4951-860a-779****8a] mode [basic] - valid
[2019-12-07T13:46:36,210][INFO ][o.e.g.GatewayService     ] [es-node] recovered [2] indices into cluster_state
[2019-12-07T13:46:36,588][INFO ][o.e.c.r.a.AllocationService] [es-node] Cluster health status changed from [RED] to [YELLOW] (reason: [shards started [[kstore][0]] ...]).

通过启动日志,可以看到es在启动的时候有加载两个分词器的配置信息,一个是es默认的分词器,另外一个就是我们安装的IK分词器,然后还加载了本次的词库my_ik.dic以及远程词库my_origin_ik.dic;因为此时远程词库中还没有任何内容,所以加载不到任何信息;

安装好ES和ik分词器之后,我们通过head插件可以查看和访问es的数据信息,这里我们可以测试指定IK分词器对关键字进行分词处理,查看分词结果;打开head插件,然后我们在复合查询页面进行分词查看,输入关键字进行粗粒度分析查看关键字“安装器词分”查看结果

_analyze  POST请求
{"analyzer": "ik_smart","text": "安装器词分"
}

输出如下:

{"tokens": [{"token": "安装","start_offset": 0,"end_offset": 2,"type": "CN_WORD","position": 0},{"token": "器","start_offset": 2,"end_offset": 3,"type": "CN_CHAR","position": 1},{"token": "词","start_offset": 3,"end_offset": 4,"type": "CN_CHAR","position": 2},{"token": "分","start_offset": 4,"end_offset": 5,"type": "CN_CHAR","position": 3}]
}

可以看到,我们输入的内容"安装器词分"被ik分词器分词成为了 "安装"、"器"、"词"、"分" 四个关键字了;这时候,我们尝试着在远程词库中配置关键字 "器词分"之后再看看效果呢;

找到我们的远程词库文件,vim打开后进行编辑,添加 "器词分"关键字后进行保存,这时候再查看elasticsearch的日志,会发现,此时添加的关键字已经被es所加载了,日志信息如下:

[2019-12-07T14:01:45,758][INFO ][o.w.a.d.Monitor          ] 重新加载词典...
[2019-12-07T14:01:45,838][INFO ][o.w.a.d.Monitor          ] 器词分
[2019-12-07T14:01:45,838][INFO ][o.w.a.d.Monitor          ] 重新加载词典完毕...

我们再回到head插件后,再次提交请求查看一下效果,可以看到,此时ik分词器已经成功生效了,关键字"安装器词分"已经被分析为两个关键字了,分别是"安装"、"器词分";如下图所示:

e3861c21ede5db976fba6372069affd7.png

只要当远程词库的数据发生变动后,es即重新加载远程词库中所有的关键字,从而达到动态修改关键词的搜索功能。在实际应用中,我们还可以配置远程停用词,有效过滤掉一些政治敏感的关键词等;

相关文章:

PS切图篇(一)---界面设置

#工作区设置 四大主要面板&#xff1a;信息 字符 图层 历史记录 打开必要属性&#xff1a; 选择工具设置 选择图层的方式&#xff1a;ctrl鼠标左击想选择的图层转载于:https://www.cnblogs.com/yinzf/p/5339873.html

简单解决用VS编写hello world时命令行一闪而过

一、在return 0;前一行加一个getchar(); 二、使用项目模板为 windows 桌面向导 c 3、命令行控制台一闪而过。这是我们使用空文件夹加载的项目&#xff0c;默认不是控制台应用程序&#xff0c;新建控制台程序&#xff0c;或者在代码中加入system(“pause”);这种通过代码人为的…

粒子群算法(1)----粒子群简要

一、历史粒子群算法从复杂适应系统衍生PSO算法&#xff08;Complex Adaptive System,CAS&#xff09;。CAS理论于1994年正式提出&#xff0c;CAS中的成员称为主体。比方研究鸟群系统&#xff0c;每一个鸟在这个系统中就称为主体。主体有适应性&#xff0c;它能够与环境及其它的…

Android Studio Day03-2(常用操作)

&#xff08;1&#xff09;选择文本 1.CtrlA 选中全文 2.在将光标置于任意的单词中时按住CtrlW&#xff0c;选中整个词 继续按CtrlW 选中的区域将扩大&#xff0c;扩大至包含任意数量的相邻的单词 按CtrlwShift 进行区域的缩小 &#xff08;2&#xff09;Undo和Redo&…

Blender数字雕刻终极指南学习教程

CGBoost–Blender中的3D雕刻大师–数字雕刻终极指南 大小&#xff1a;29G 含课程项目文件 Master 3D Sculpting in Blender – The Ultimate Guide to Digital Sculpting 本课程教你所有重要的Blender雕刻基础知识&#xff0c;以及如何仅使用免费工具从头开始创建令人惊叹的3D雕…

生产指挥调度系统_市安全生产应急救援指挥中心将大型装载机械设备储备信息纳入应急指挥调度系统...

为拓展应急救援力量体系&#xff0c;发挥社会力量在开展全市重特大突发事件应急救援中的重要作用&#xff0c;近日&#xff0c;市安全生产应急救援指挥中心在加强应急指挥信息平台“一网七库”建设的基础上&#xff0c;成功对接甘肃省非道路移动机械监管平台&#xff0c;做到数…

java.sql.Exception:setString 只能处理少于 32766 个字符的字符串

java.sql.Exception:setString 只能处理少于 32766 个字符的字符串 解决方式是 : 升级ojdbc的版本, 将原来的 ojdbc14_10.2.0.2.0.jar 升级到 ojdbc6_11.2.0.1.0.jar这边行方用的是 oracle版本是 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0maven 安装到本地…

无需自己输入include这些的方法

使用项目模板为 windows 桌面向导 c 不用空白项 直接默认 不用勾选其他

第二次团队冲刺2

实现了查询的webservice服务端&#xff0c;做了查询时等待界面&#xff0c;对查询速度做了一点优化。 还写了一个入馆须知模块&#xff0c;介绍图书馆借阅规则。 还有借阅个人信息没做出来&#xff0c;还没进行界面优化。 转载于:https://www.cnblogs.com/318abc/p/4569576.htm…

Android StudioDay03-3(键盘导航)

Android Studio Day03-3(键盘导航) (1)打开Select In 快捷键&#xff1a;altF1 如下图&#xff1a; &#xff08;2&#xff09;打开Class CtrlN Class操作允许用后导航到特定的JAVA类&#xff09;&#xff0c;因此此操作也只能在Java文件中使用。 Android studio已…

虚幻中的风格化环境制作学习教程

Learn Squared-Tyler Smith-虚幻中的风格化环境 信息: 像AAA游戏开发者一样在虚幻引擎中创建风格化的环境。行业领先的游戏艺术家泰勒史密斯将教你在虚幻引擎中构建美丽的实时世界的规划、构建、集成和优化阶段使用多种巧妙的技术。 大小解压后&#xff1a;22G 时长6h 13m 19…

【转】oracle PLSQL基础学习

【转】oracle PLSQL基础学习 --oracle 练习&#xff1b;/**************************************************PL/SQL编程基础***************************************************************/--firstday--》》》数据类型-- Create tablecreate table T_CSCUSTOMER( CUST_NO…

python如何创建不同元素的矩阵_python – 如何在数据帧中创建矩阵元素的数...

我在.TXT文件中有3个参数’A’,’B’,’C’的数据集,在我用2420矩阵打印后,我需要收集’A’,’B’,’C’的第一个元素熊猫数据帧中的长数组,然后是每个第二个元素,然后是第3个,直到第480个元素为止. 所以我的数据在文本文件中是这样的&#xff1a; 我的数据是txt文件如下&#…

wps多窗口打开

在wps中打开wps文档不在一个窗口的方法如下&#xff1a; 1、启动wps文档&#xff0c;点击wps文字→选项&#xff0c;在弹出的选项对话框点击视图选项卡&#xff0c;勾选 在任务栏中显示所有窗口&#xff1b;

RHEL7.0系列 修改字符终端分辨率

由于是在VM里面安装的&#xff0c;完了之后终端界面的分辨率非常高&#xff0c;很难操作 因为RHEL7用了grub2&#xff0c;而不再是grub了&#xff0c;在grub2中要修改的文件是/boot/grub2/grub.cfg; 这里有一张分辨率的对照表&#xff08;在grub.cfg中添加vgaask,系统重启后就会…

Java Day01-1

1.JAVA语言介绍 &#xff08;1&#xff09;特点&#xff1a;可移植性&#xff0c;平台无关性&#xff0c;面相对性&#xff0c;健壮性&#xff0c;分布式&#xff0c;多线程 &#xff08;2&#xff09;版本&#xff1a;JavaSE&#xff08;标准版&#xff09;、JavaME&#xf…

Autocad 3D 完全学习教程

Autocad 3D 完全学习教程 你会学到什么 如何使用AutoCAD三维基本特征 了解如何在AutoCAD中创建和开发三维模型 准备实体、网格和曲面几何图形 不同的命令2d和3D 要求 不需要事先了解 18章 63节讲座 全长5小时7分 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译…

[转]JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分

首先这是现在最基本的分层方式&#xff0c;结合了SSH架构。modle层就是对应的数据库表的实体类。Dao层是使用了Hibernate连接数据库、操作数据库&#xff08;增删改查&#xff09;。Service层&#xff1a;引用对应的Dao数据库操作&#xff0c;在这里可以编写自己需要的代码&…

springmvc工作流程简单易懂_三极管的结构和工作特性,简单易懂

今天&#xff0c;我们来认识另一种十分重要的半导体器件&#xff1a;三极管。生活中&#xff0c;授课、集会、维持秩序等场合需要用到扩音器、音响等设备&#xff0c;这些设备之所以能够放大声音是因为它们都包含放大器&#xff0c;而放大器的核心部件就是三极管。那三极管究竟…

多个excel文件(内含多个工作表)查找

1.在父目录查找处输入关键词 2.将找到的文件进去查找-工作簿

git ssh key创建和github使用

github拉代码需要ssh验证 git是分布式的代码管理工具&#xff0c;远程的代码管理是基于ssh的&#xff0c;所以要使用远程的git则需要ssh的配置。一 、设置git&#xff1a;设置git的user name和email&#xff1a;$ git config --global user.name "xxx"$ git config -…

C语言常见面试题:什么是变量?变量有哪些作用?

变量是编程中的一个基本概念,其定义和用法因编程语言和上下文而异。但通常来说,变量是用于存储数据的容器,这些数据可以是数字、文本、布尔值等。总的来说,变量在编程中扮演着重要的角色,它们使得我们能够有效地存储、操作和使用数据。不同的编程语言和上下文可能会对变量的具体定义和使用方式有所不同,但上述作用是通用的。总的来说,变量和常量都是编程中重要的概念,它们各自有其特定的用途和特性。在编程中正确地使用它们可以帮助我们更好地组织和控制程序的行为。变量和常量在编程中都是重要的概念,但它们之间存在明显的区别。

Java Day01-2

一、字节码的解释 字节码&#xff1a;是一种在Java运行系统&#xff08;JVM&#xff09;中执行的更高度优化的指令集。 C/C 是一种编译型的语言; 文件经过编辑&#xff0c;编译&#xff0c;执行之后生成的是一种.exe的可执行文件。 Java&#xff1a;是一种解释型的语言&…

SparkSQL和Hadoop(面向数据科学家和大数据分析师)

了解HDFS命令、Hadoop、Spark SQL、SQL查询、ETL和数据分析| Spark Hadoop集群虚拟机|完全解决的问题 你会学到什么 作为本课程的一部分&#xff0c;学生将获得在Spark Hadoop环境中工作的实践经验&#xff0c;该环境是免费且可下载的。 学生将有机会在沙箱环境中使用Hadoop集…

uva 401.Palindromes

题目链接&#xff1a;https://uva.onlinejudge.org/index.php?optioncom_onlinejudge&Itemid8&pageshow_problem&problem342 题目意思&#xff1a;给出一段字符串&#xff08;大写字母数字组成&#xff09;。判断是否为回文串 or 镜像串 or 回文镜像串 or 什么都不…

python解压_python解压缩

解压缩 如果我们给出一个列表&#xff0c;我们需要一次性取出多个值&#xff0c;我们是不是可以用下面的方式实现呢&#xff1f; name_list [chen, python, jason] x name_list[0] y name_list[1] z name_list[2] print(fx:{x}, y:{y}, z:{z}) #输出&#xff1a; x:chen, y…

用Construct 2制作入门小游戏~

今天在软导课上了解到了Construct 2这个神器&#xff0c;本零基础菜鸟决定尝试做一个简单的小游戏&#xff08;实际上是入门的教程啊 首先呢&#xff0c;肯定是到官网下载软件啊&#xff0c;点击我下载~ 等安装完毕后我便按照新手教程开始捣鼓了 ①先下载素材&#xff08;准…

zabbix 客户端安装

zabbix 客户端安装zabbix版本为&#xff1a;zabbix-2.4.5Linux 客户端安装1.防火墙开启iptables -A INPUT -p tcp --dport 10050 -j ACCEPTiptables -A INPUT -p udp --dport 10050 -j ACCEPT2.安装zabbix####zabbix 安装包可去zabbix.com 官网上下载tar zxvf zabbix-2.4.5.tar…

Java Day02-1

一、变量和常量 &#xff08;1&#xff09;java中的变量 1.使用标识符为变量取名字 2.变量声明的时候要给出它是八大类型中的哪一种类型&#xff0c;然后根据具体的类型为其分配适合的空间 3.变量就是可以变化的量&#xff0c;他里面的内容可以改变&#xff0c;本身自己是属…

Unity与C#创建一个3D平台游戏 Learn to Create a 3D Platformer Game with Unity C#

游戏开发变得容易了。使用Unity学习C#并创建您自己的3D平台&#xff01; 你会学到什么 学习现代通用编程语言C#。 了解Unity中3D开发的功能 发展强大的可转移的解决问题的技能 了解游戏开发过程 了解面向对象编程在实践中是如何工作的 MP4 |视频:h264&#xff0c;1280720 |音…