ElasticSearch配合mysql实现同义词热更新

ElasticSearch配合mysql实现同义词热更新

第一次写博客,elasticsearch网上的资料实在太少了,在网上翻了很多资料,自己在做的时候,由于版本原因,插件集成出现了很多问题,在这里我总结一下,希望对大家有帮助,谢谢支持

使用环境
elasticsearch6.1.2
mysql
同义词插件6.1.4 同义词插件下载地址

安装插件
地址: https://github.com/bells/elasticsearch-analysis-dynamic-synonym
*下载插件时,必须选择比较接近的版本下载,版本相差太多,集成插件会出现不兼容问题
比如我使用的版本为6.1.2,我下载的是6.1.4版本的

作者提供的插件包版本比较少,要想获得对应的插件包,则需要自己编译
ElasticSearch配合mysql实现同义词热更新_第1张图片

编译说明
1.打开plugin/DynamicSynonymPlugin.java将第40行 @Override 注释掉即可
vim /elasticsearch-analysis-dynamic-synonym-master/src/main/java/com/bellszhu/elasticsearch/plugin/DynamicSynonymPlugin.java
2.修改pom.xml文件,将6.1.4全部修改为6.1.2
3.最后切换到elasticsearch-analysis-dynamic-synonym-master目录,执行mvn clean package编译打包
*如果没安装maven环境,则需要先安装,并且使用阿里云国内镜像
http://blog.csdn.net/fenglailea/article/details/53304479
编译成功之后: 编译成功后文件位置:elasticsearch-analysis-dynamic-synonym-master/target/releases/elasticsearch-analysis-dynamic-synonym-6.1.2.zip
4.将插件包移动到 mv /elasticsearch-6.1.2/plugins/dynamic-synonym 进行解压,并重启es

插件支持两种方式,远程静态文件和远程访问接口
远程访问接口
注意:
1.在数据库中创建同义词表
在这里插入图片描述
2.编写查询同义词接口
说明:
* 这个http请求需要返回两个头部,一个是 Last-Modified,一个是 ETag,只要有一个发生变化,该插件就会去获取新的同义词来更新相应的同义词。
只要 PHP 返回的 ETAG 是 weak ETAG,那么就一切都会正常起来了。而所谓的 weak ETAG,也就是弱 ETAG,它是相对于正常 ETAG 而言的,表现形式就是 ETAG 前面加上 W/注:nginx 在开启了 gzip 之后,如果有 ETAG 则会调用 ngx_http_clear_etag 将其清除,解决的办法很简单:
W/“db8b38e8a3257a2f195b727eceb2c5d3”

/*
* 查询跟踪任务列表
* */
@RequestMapping(value = "/synonym",produces="application/json;charset=utf-8")
@ResponseBody
public String list(HttpServletResponse response,
                 HttpServletRequest request) {
    List s = sysSynonymService.selectAllSysSynonym();
    //查询最大更新时间
    Date updateDate = sysSynonymService.selectMaxUpdateTime();
    response.setHeader("ETag" ,s.size() + "" );
    response.setHeader("Last-Modified" ,updateDate.getTime() + "" );
    //response.setCharacterEncoding("UTF-8");
    response.setContentType("text/plain;charset=UTF-8");
    String result = "";
    for (String s1 : s) {
        result += s1+"\n";
    }
    return result;
}

接口返回的数据格式如下
ElasticSearch配合mysql实现同义词热更新_第2张图片
同义词设置

{\n" +
        "    \"settings\" : {\n" +
        "        \"analysis\" : {\n" +
        "            \"analyzer\" : {\n" +
        "                \"synonym\" : {\n" +
        "                    \"tokenizer\" : \"ik_max_word\",\n" +
        "                    \"filter\" : [\"remote_synonym\"]\n" +
        "               }\n" +
        "            },\n" +
        "            \"filter\" : {\n" +
        "                \"remote_synonym\" : {\n" +
        "                    \"type\" : \"dynamic_synonym\",\n" +
        "                    \"synonyms_path\" : \"http://127.0.0.1:8080/ht/easybiiweb/synonym/synonym\",\n" +
        "                    \"interval\": 60\n" +
        "                }\n" +
        "            }\n" +
        "        }\n" +
        "    }\n" +
        "}

注意:在调用接口时,很有可能会报一下错误
ElasticSearch配合mysql实现同义词热更新_第3张图片
解决方法http://blog.yourtion.com/java-access-denied-socketpermission-solution.html

你可能感兴趣的:(java)