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即重新加载远程词库中所有的关键字,从而达到动态修改关键词的搜索功能。在实际应用中,我们还可以配置远程停用词,有效过滤掉一些政治敏感的关键词等;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值