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

2023-11-19

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();
			}
		}
	}
	
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

es ik 分词插件 词库热加载源码分析 的相关文章

  • new做了哪些事?

    new做了哪些事 function Parent this name Person const p new Parent 创建一个空对象 将对象的原型 proto 指向构造函数的prototype原型对象 将构造函数的this指向当前对象
  • 使用xshell-ssh连接服务器,报错:Xshell Socket error Event: 32 Error: 10053

    XShell连接CentOS系统时 报出Xshell Socket error Event 32 Error 10053 错误 有点烦人 操作 用SSH工具连接linux电脑出现的问题 Read from socket failed Con
  • 多益网络_网络安全的未来日益激烈的信息控制之战

    多益网络 Over two decades ago Alphabet CEO Eric Schmidt noted The Internet is the first thing that humanity has built that h
  • 内核虚拟化KVM/QEMU——guest os,qemu,kvm的运行流程

    内核虚拟化KVM QEMU guest os qemu kvm的运行流程 这里主要介绍基于x86平台的Guest Os Qemu Kvm工作流程 如图 通过KVM APIs可以将qemu的command传递到kvm 1 创建VM syste
  • 问题 对于二分类问题,当训练集中正负样本非常不均衡时,如何处理数据以更好 地训练分类模型?

    为什么很多分类模型在训练数据不均衡会出现问题 本质原因是模型在训练时优化的目标函数和人们测试时使用的评价标准不一致 这种不一致可能是训练数据的样本分布和测试数据的不一致 例如训练时优化的整个训练集 正负比例1 99 的正确率 而测试的时候期
  • JavaScript [数组去重] 的部分方法总结

    参考了文章 JavaScript数组去重 12种方法 史上最全 有部分改动 删去了一些没用的代码 替换了部分for循环 一 利用ES6 Set去重 ES6中最常用 function arrayRemoveSame arr return Ar
  • 二手房各项税费计算公式

    北京的房屋类型有很多种 有商品房 公房 一类经适房 二类经适房 两限房 现针对这些类型的房子列一下二手房购置过程中 需要考虑的税费 一 各类房源简介 1 商品房 正规从售楼处买的房源 2 公房 单位分的房子 由于不知道原值 所以个税按 网签
  • sbrk/brk函数用法

    头文件unistd h sbrk brk函数重新指定数据段的结束位置 sbrk 0 获得当前数据段结束地址 sbrk 增量 增量可正 可负 可为0 都返回原来数据段的结束地址 失败返回 1 brk 地址 返回0或 1 通过重新指定数据段新的
  • Matlab导入Excel数据快速绘图

    现在使用Matalb绘图越来越多 不会这个绘图技能感觉都要被时代抛弃了 所以 本文主要是介绍怎么用Matlab导入Excel数据快速绘图 目录 一 基本使用 二 细致调节 1 颜色选项 2 形状选项 3 网格线选项 一 基本使用 事先 建议
  • Python爬虫进阶--js逆向

    目标网址 aHR0cHM6Ly93d3cuZG5zLmNvbS9sb2dpbi5odG1s 抓包定位 首先抓包看请求 这里 password 和 email 都经过加密了 token 可以在页面上找到 从这里进去搜索 直接搜索 passwo
  • 【赠书活动|第六期《强化学习:原理与Python实战》】

    文章目录 RLHF是什么 RLHF适用于哪些任务 RLHF和其他构建奖励模型的方法相比有何优劣 什么样的人类反馈才是好的反馈 RLHF算法有哪些类别 各有什么优缺点 RLHF采用人类反馈会带来哪些局限 如何降低人类反馈带来的负面影响 图书简
  • 打卡C语言学习第十三天

    对之前所学内容复习和补充 练习函数书写
  • ruoyi登录流程

    首先加载登录界面会发送验证码请求和获取Cookie 会调用created函数 Getcode是获取验证码 GetCookie是获取cookie GetCodeImg函数会调用ajax发送请求给后端 后端GetMapping接口接收到请求后执
  • 搜狐2012.9.15校园招聘会笔试题

    一 不定项选择题 1 以下程序的打印结果是 include
  • Android SurfaceView

    下面就贴上一个小程序代码 主要运用SurfaceView来实现在屏幕上画一个圆 你可以通过按方向键和触摸屏幕来改变圆的位置 代码 Activity java view plain copy print package com view im
  • TypeError: 'function' object is not subscriptable

    报错 function object is not subscriptable 原因是Hi是个匿名函数 应该用 而不是 改成 即可 像这种问题TypeError function object is not subscriptable 一般
  • 迷宫问题java老鼠走迷宫(回溯法,递归,二维数组)(超级容易理解)

    回溯法迷宫问题 思路 利用回溯法和递归思想解决 findWay 方法就是专门来找出迷宫的路径 如果找到 就返回 true 否则返回 false map 就是二维数组 即表示迷宫 i j 就是老鼠的位置 初始化的位置为 1 1 因为我们是递归
  • mysql索引实现

    目前大部分数据库系统及文件系统都采用B Tree B树 或其变种B Tree B 树 作为索引结构 B Tree是数据库系统实现索引的首选数据结构 在MySQL中 索引属于存储引擎级别的概念 不同存储引擎对索引的实现方式是不同的 本文主要讨
  • Ubuntu下无法看到共享文件夹的解决办法

    1 输入以下指令 确定共享文件夹是否设置成功 vmware hgfsclient 若是设置成功 会输出贡献文件夹的名字 2 如果已经设置了共享文件夹 请输入下列指令 如果之前没有命令包则先执行sudo apt get install ope
  • 在linux下如何查看局域网的所有主机的ip地址

    策略 用nmap对局域网扫描一遍 然后查看arp缓存表就可以知道局域内ip对应的mac了 nmap比较强大也可以直接扫描mac地址和端口 执行扫描之后就可以 cat proc net arp查看arp缓存表了 或者使用命令arp a 参考

随机推荐

  • 【Goland】巧妙用批量替换Replace

    今天想提一嘴 IDE 的一个功能 就是批量替换 Replace in Path 大家可以按快键键 commnd 进入 Preference 然后搜索 Keymap 也就是快键键 然后搜索 Replace 找到批量替换的快键键 因为快键键就是
  • C# 处理异常

    using System using System Collections Generic using System Linq using System Text namespace Ch13CardLib public class Car
  • YAML 文件语法学习

    一 概述 YAML是一个类似 XML JSON 的标记性语言 YAML 强调以数据为中心 并不是以标识语言为重点 YAML 是一种较为人性化的数据序列化语言 可以配合目前大多数编程语言使用 YAML 的语法比较简洁直观 特点是使用空格来表达
  • 解决打印org.apache.http.wire,org.apache.http.headers日志的问题

    最近在调试接口的过程中 发现使用httpClient的时候 控制台输出了很多org apache http wire org apache http headers相关的日志 不便于我观察自己调试业务过程中输出的日志 内容如下 10 02
  • 如何把一张照片用PS做成漫画风格

    如何把一张照片用PS做成漫画风格 原素材 漫画天空 1 打开ps 打开素材 然后按住ctrl j 复制一个图层 并修改好名字 如下图操作 2 执行 滤镜 滤镜库 干画笔 如图所示 三个参数分别是 0 10 2 3 执行 滤镜 Camera
  • Box2D C++ 教程-查询 World

    声明 本文翻译自Box2D C tutorial World querying 仅供学习参考 查询World 通常你可能想知道在给定的场景中都有哪些实体 例如有一个炸弹爆炸了 周围的所有实物都会受到不同程度的破坏 那么在RTS 译者注 Re
  • java计算机毕业设计景区在线购票系统源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计景区在线购票系统源码 mysql数据库 系统 lw文档 部署 java计算机毕业设计景区在线购票系统源码 mysql数据库 系统 lw文档 部署 本源码技术栈 项目架构 B S架构 开发语言 Java语言 开发软件 i
  • 【转】结构体中Char a[0]用法——柔性数组

    有如下定义 typedef struct char a char b 0 其中元素Char b 0 叫做柔性数组 主要用于使结构体包含可变长字段 详细内容如下 柔性数组 柔性数组结构成员 C99中 结构中的最后一个元素允许是未知大小的数组
  • css hover 控制其他元素_CSS学习小结

    css语法 Selector Dcclaration Selector Property Value CSS注释 注释 CSS Selector 选择器 id class id id class class 插入样式表 外部样式表 内部样式
  • 深入浅出SQL(6)-聪明的表设计

    该系列文章系个人读书笔记及总结性内容 任何组织和个人不得转载进行商业活动 聪明的表设计 为什么要规范化 本章多是理论 请注意理解 我们到目前为止创建的表 都没有经过仔细考虑 随着数据的越来越多 我们需要考虑的更多 好让现在的WHERE子句简
  • Linux——date

    命令简介 date 根据给定格式显示日期或设置系统日期时间 print or set the system date and time 指令所在路径 bin date 命令语法 date OPTION FORMAT date u utc u
  • python计算机视觉编程(四)图像到图像的映射

    图像到图像的映射 原理 仿射变换 仿射变换是一种二维坐标到二维坐标之间的线性变换 相同平面 它保持了二维图形的 平直性 直线经过变换之后依然是直线 和 平行性 二维图形之间的相对位置关系保持不变 平行线依然是平行线 且直线上点的位置顺序不变
  • VB中Shell和ShellExecute函数的使用方法和区别

    写了一个vb的程序 用来把原来写的几个vb和vc的程序整合起来 就是使用Shell函数 结果发现 vc的程序可以很好的显示 但vb写的却一运行就最小化了 仔细查看了一下以下文章 才发现原来shell函数的默认显示模式是windowstyle
  • java公用包共享_tomcat中设置多项目共享jar;类包

    随着服务器上的tomcat部署的项目越来越多 最近在部署一个新的项目的时候出现内存溢出的错误 Exception in thread main java lang OutOfMemoryError PermGen space at java
  • 对java和面向对象的理解?

    java是一款编程语言 是面向对象很有力的影响代表 面向对象 讲社会 实际生活中所有可见的事务抽象对象 用属性和方法来描述 划分模块化引入到java面向对象 方便后期的重复利用和扩展 解决人类的需求 聪明的设计者 灌入人的思维来解决问题 可
  • OSI七层模型和TCP/IP五层模型

    一 OSI七层模型 七层模型从下往上依次为物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 各层功能如图所示 应用层 与其它计算机进行通讯的一个应用 它是对应应用程序的通信服务的 例如 一个没有通信功能的自处理程序就不能执行通信的
  • python 使用pyinstaller 打包xpinyin 问题

    打包之后 启动错误 提示 mandarin dat 未找到 于是 找到这个文件 于打包好的pin exe放一起 再次运行还是这样 查资料说 修改 pyinstaller 的hook 测试失败 转战修改源代码 增加一个函数如果 默认查找的路径
  • 2021前端开发面试题:面试中该如何与HR谈薪资?

    问题 面试中该如何与HR谈薪资 解析 HR与你谈论薪资经常有如下套路 HR 您期望的薪资是多少 你 25K OK 你已经被HR成功套路 这个时候你的最高价就是25K了 然后HR会顺着这个价往下砍 所以你最终的薪资 般都会低于25K 等你接到
  • JS获取当前网站路径的参数值

    如果要获取当前网站路径的参数值 那么可以通过这个例子来实现 比如获取页面的 id 5 page 4 代码如下
  • es ik 分词插件 词库热加载源码分析

    package org wltea analyzer dic import java io IOException import org apache http client config RequestConfig import org