`
m635674608
  • 浏览: 5043398 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

es ik 分词插件 词库热加载源码分析

 
阅读更多
package org.wltea.analyzer.dic;

import java.io.IOException;

import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpHead;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

public class Monitor implements Runnable {

	private static CloseableHttpClient httpclient = HttpClients.createDefault();
	/*
	 * 上次更改时间
	 */
	private String last_modified;
	/*
	 * 资源属性
	 */
	private String eTags;
	
	/*
	 * 请求地址
	 */
	private String location; 
	
	public Monitor(String location) {
		this.location = location;
		this.last_modified = null;
		this.eTags = null;
	}
	/**
	 * 监控流程:
	 *  ①向词库服务器发送Head请求
	 *  ②从响应中获取Last-Modify、ETags字段值,判断是否变化
	 *  ③如果未变化,休眠1min,返回第①步
	 * 	④如果有变化,重新加载词典
	 *  ⑤休眠1min,返回第①步
	 */
	
	public void run() {

		//超时设置
		RequestConfig rc = RequestConfig.custom().setConnectionRequestTimeout(10*1000)
				.setConnectTimeout(10*1000).setSocketTimeout(15*1000).build();
		
		HttpHead head = new HttpHead(location);
		head.setConfig(rc);
		
		//设置请求头
		if (last_modified != null) {
			head.setHeader("If-Modified-Since", last_modified);
		}
		if (eTags != null) {
			head.setHeader("If-None-Match", eTags);
		}
		
		CloseableHttpResponse response = null;
		try {
			
			response = httpclient.execute(head);
			
			//返回200 才做操作
			if(response.getStatusLine().getStatusCode()==200){
			
				if (!response.getLastHeader("Last-Modified").getValue().equalsIgnoreCase(last_modified)
					||!response.getLastHeader("ETag").getValue().equalsIgnoreCase(eTags)) {

					// 远程词库有更新,需要重新加载词典,并修改last_modified,eTags
					Dictionary.getSingleton().reLoadMainDict();
					last_modified = response.getLastHeader("Last-Modified")==null?null:response.getLastHeader("Last-Modified").getValue();
					eTags = response.getLastHeader("ETag")==null?null:response.getLastHeader("ETag").getValue();
				}
			}else if (response.getStatusLine().getStatusCode()==304) {
				//没有修改,不做操作
				//noop
			}else{
				Dictionary.logger.info("remote_ext_dict {} return bad code {}" , location , response.getStatusLine().getStatusCode() );
			}

		} catch (Exception e) {
			Dictionary.logger.error("remote_ext_dict {} error!",e , location);
		}finally{
			try {
				if (response != null) {
					response.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
}

 

分享到:
评论

相关推荐

    ElasticSearch 重写IK分词器源码设置mysql热词更新词库1

    在本文中,我们将探讨如何利用Elasticsearch的IK分词器并对其进行源码改造,以实现热词库的动态更新,特别是通过MySQL数据库进行热词和停用词的定时更新。首先,我们要了解IK分词器的几种常用词库配置方式。 **0. ...

    elasticsearch ik 分词

    IK分词插件支持在线热更新词库,无需重启Elasticsearch服务。此外,通过设置停用词表,可以排除常见无意义词汇,提高搜索效率。 总之,Elasticsearch IK分词插件6.1.2版是处理中文文本的强大工具,它提供了灵活的...

    IK分词常用停止词库约1500个

    IK分词常用停止词库约1500个 elasticsearch analysis ik分词器常用停止词库

    elasticsearch-ik中文分词器7.6.2.zip

    在Elasticsearch中使用IK分词器,首先需要将"elasticsearch-analysis-ik-7.6.2.jar"文件放到Elasticsearch的plugins目录下。然后,通过Elasticsearch的命令行工具或配置文件启用插件。配置通常涉及以下步骤: 1. ...

    elasticsearch-analysis-ik 7.10.0 分词器

    Elasticsearch-analysis-ik 是一个专为 Elasticsearch 设计的中文分词插件,它基于 Lucene 的 IK 分词器,旨在提供高效、准确的中文分词能力。 **IK 分词器介绍** IK (Intelligent Chinese Analyzer) 是一个针对...

    ik分词器tar包 7.10.2

    IK分词器是针对Elasticsearch(ES)的一款热门中文分词插件,其全称为“Intelligent Chinese Analyzer for Elasticsearch”。它由Java编写,旨在为中文文档提供高效、准确的分词处理。版本7.10.2是IK分词器的一个...

    elasticsearch7.8.0版本的IK分词器

    在中文处理方面,IK (Intelligent Chinese) 分词器是 Elasticsearch 的一个非常重要的插件,尤其对于中文文本的索引和搜索性能提升起到了关键作用。IK 分词器针对中文的特性进行了优化,能够有效地对中文文本进行...

    elasticsearch ik 7.4.2 分词器

    **Elasticsearch IK 7.4.2 分词器** 在大数据时代,全文检索和搜索引擎技术扮演着至关重要的角色,而Elasticsearch作为一...通过不断学习和实践,你可以充分利用Elasticsearch和IK分词器来挖掘和分析海量的中文数据。

    7.17.1系列Elasticsearch的elasticsearch-analysis-ik分词器

    elasticsearch-analysis-ik 是一个常用的中文分词器,在 Elasticsearch 中广泛应用于中文文本的分析和搜索。下面是 elasticsearch-analysis-ik 分词器的几个主要特点: 中文分词:elasticsearch-analysis-ik 是基于...

    基于ik动态词库分词实现--无需重启服务

    本篇将深入探讨如何基于IK Analyzer实现动态词库分词,并且在整个过程中无需重启服务,极大地提高了系统的灵活性和效率。 首先,我们需要了解什么是IK Analyzer。它是一个开源的、适用于Java平台的全文检索分析引擎...

    ik分词器7.17.10

    - **智能分析**:ik分词器采用动态词库加载机制,能根据上下文环境进行词语切分,提高分词准确性。 - **高性能**:ik分词器采用多线程并行处理,提高了分词效率,降低了系统负载。 - **扩展性**:ik分词器支持扩展...

    Elasticsearch IK分词器扩展说明1

    "Elasticsearch IK分词器扩展说明" Elasticsearch IK分词器扩展说明是基于Elasticsearch的IK分词器的扩展,旨在实现高效的文本处理和搜索功能。IK分词器是一种基于Java实现的中文分词器,能够对中文文本进行精准的...

    elasticsearch-analysis-ik-7.4.0 ik分词器7.4.0

    **Elasticsearch 分析插件 IK 7.4.0** Elasticsearch 是一个流行的开源全文搜索引擎,广泛应用于大数据分析和全文检索场景。IK 分词器(IK Analyzer)是 Elasticsearch 中常用的中文分词组件,旨在提供高效、灵活的...

    elasticsearch-analysis-ik-7.12.1.zip

    另外,elasticsearch-analysis-ik-7.12.1.jar 是实际的插件实现文件,包含了 IK 分词器的核心代码。 **配置与使用** 在 Elasticsearch 中安装 IK 分词器,需要将 elasticsearch-analysis-ik-7.12.1.jar 文件拷贝到...

    (源码)基于Elasticsearch和IK分词器的热更新中文分词系统.zip

    通过修改IK分词器源码,实现了从MySQL数据库中自动加载新词库的功能,支持Elasticsearch集群的热更新,无需重启节点即可实时加载新词。 ## 项目的主要特性和功能 1. 热更新功能支持从MySQL数据库中自动加载新词库...

    elasticsearch-analysis-ik-7.7.1 分词器下载

    3. 启动:启动Elasticsearch服务,系统会自动加载插件。如果在启动过程中遇到问题,可能需要检查Elasticsearch的日志文件以获取错误信息。 **使用与配置** 在使用IK分词器时,需要在Elasticsearch的索引模板或者...

    elasticserach 7.17.4版本的中文 IK分词器

    **Elasticsearch 7.17.4 版本中的中文 IK 分词器** Elasticsearch 是一个流行的、开源的全文搜索引擎,它基于 Lucene 库,并提供了分布式、实时、可扩展的搜索和分析功能。在处理中文文本时,一个合适的分词器是至...

    elasticsearch-7.17.6及对应版本IK分词

    elasticsearch-7.17.6及对应版本IK分词 适合人群:elasticsearch初学者 Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elastic...

    ElasticSearch7.4.2-ik分词.zip

    使用 IK 分词插件后,Elasticsearch 可以更好地处理中文文本,例如在索引创建时,可以指定使用 IK 分词器进行字段分析,这样在搜索时,Elasticsearch 将按照分词结果进行匹配,提供更加精准的搜索结果。同时,IK ...

Global site tag (gtag.js) - Google Analytics