es词库热更新
es词库热更新
·
环境准备
1、elasticsearch
2、ik分词器
3、nginx
修改ik陪孩子文件IKAnalyzer.cfg.xml
http://127.0.0.1:8080/es/dic
新建java项目
@RestController
@RequestMapping(“/es”)
public class EsDicController {
@GetMapping("/dic")
public String queryDic(HttpServletResponse response){
String dfg= "\"元気森林\",\"啤酒\"";
String[] array = dfg.split(",");
//获取数据库存储的词库
System.out.println("请求了词库信息");
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("柱子").append("\n");
stringBuffer.append("中华人民共和国").append("\n");
for (String s : array) {
stringBuffer.append(s).append("\n");
}
// Last-Modified、Etag 值不变词库不会更新,ik每分钟会查一词词库信息
response.setHeader("Last-Modified", 11+"");
response.setHeader("Etag",String.valueOf(11));
return stringBuffer.toString();
}
}
这是一个简单的demo,词库数据可以放到mysql中,词库数据查询mysql,可以随时改变词库数据,词库信息变化频率比较低,更新词库操作可以每天甚至几天更新一次就可以,或者加一个手动更新的接口,ik每分钟请求一次,不要每次都查数据库
nginx 配置
1、前面两部已经可以实现es的词库热更新,但是线上的的ip地址 变化的时候,ik配置文件的修改需要重启es,为了解决这个问题,我们用nginx做一个反向代理,当服务地址变更我们只需要更改nginx配置,使用/nginx -s reloa不停止服务重新加载nginx配置文件
2、配置信息
server {
listen 8000;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location /es {
proxy_pass http://127.0.0.1:8081/es/dic;
}
}
3、nginx常用命令
启动:start nginx
不停服务加载配置文件:nginx -s reload
停止服务:nginx -s stop(快速停止nginx) 或 nginx -s quit(完整有序的停止nginx)
更多推荐
已为社区贡献1条内容
所有评论(0)