一、下载elasticsearch-analysis-dynamic-synonym

同义词插件

本人当前执行安装的是7.6.2。7.x安装方式都是一样的

github官方下载地址
如果官方地址无法打开可以点击此处

  • 下载的内容是一个es插件,此插件需要自己手动编辑成自己es对应的版本(貌似当前插件版本是es7.7.0)

  • pom.xml 文件中修改 version版本号

  • 在进行maven打包 mvn package

  • 打包后的插件地址:elasticsearch-analysis-dynamic-synonym-master\target\releases
    例如我的

  • es的插件目录下创建dynamic-synonym文件夹,并将此文件拷贝并解压到/elasticsearch/plugins/dynamic-synonym目录下

  • 重启es即可

二、创建请求接口

可以查看源码文件 RemoteSynonymFile.isNeedReloadSynonymMap()

接口返回200并且header中“Last-Modified”与“ETag”发生改变才会更新同义词

@RequestMapping("/synonym")public String synonym (HttpServletRequest request, HttpServletResponse response) {String result = "";String eTag = request.getHeader("If-None-Match");String modified = request.getHeader("If-Modified-Since");String currentDate = DateUtil.formateDate(new Date(), "yyyyMMdd");log.info("加载ik同义词,上次同义词:{},上次修改时间:{},当前日期:{},redisKey={}",eTag,modified,currentDate,redisKey);if(!currentDate.equals(modified)) {String oldSynonym = synonymService.count()+ "";log.info("加载ik同义词,当前同义词数:{}",oldSynonym);if(!oldSynonym.equals(eTag)) {// 获取数据库同义词List<Synonym> all = synonymService.all();StringBuilder words = new StringBuilder();for (Synonym synonym : all) {// 可以使用“=>”方式或者直接“,”分割形式,自行考虑应用场景String theWord = StringUtils.join(synonym.getWords()," => ",synonym.getSynonymWords());words.append(theWord);words.append("\n");}eTag = oldSynonym;modified = currentDate;result = words.toString();}}//更新时间response.setHeader("Last-Modified", modified);response.setHeader("ETag", eTag);response.setHeader("Content-Type", "text/plain");return result;}

三、创建索引测试

配置说明:

  • type:dynamic_synonym或dynamic_synonym_graph 必须
  • synonyms_path:与弹性配置文件或URL相关的文件路径,必须
  • interval:刷新同义词文件的秒间隔,默认值:60,可选
  • ignore_case:忽略同义词文件中的大小写,默认值:false,可选
  • expand:展开,默认:true,可选
  • lenient:导入同义词时对异常抛出的宽大处理,默认值:false,可选
  • format:同义词文件格式,默认:“”,可选。对于WordNet结构,可以将其设置为“WordNet”

更新机制

  • 本地文件:由文件的修改时间决定,如果它已经改变了同义词wil
  • 远程文件:读取http header中Last-Modified 和 ETag 。如果其中一个发生了更改,则将重新加载同义词。
  • 注意:文件编码应该是utf-8文本文件。

kibana工具创建索引

PUT demo
{"aliases" : {},"mappings" : {"properties" : {"article" : {"type" : "text","analyzer" : "ik_max_custom","search_analyzer" : "ik_smart"}}},"settings" : {"index" : {"number_of_shards" : "1","max_result_window" : "500000","analysis" : {"filter" : {"limit_len" : {"type" : "length","min" : "1"},"my_synonym": {"type": "dynamic_synonym","synonyms_path":"http://localhost/synonym","interval": 30}},"analyzer" : {"ik_max_custom" : {"filter" : ["limit_len"],"char_filter" : ["html_strip"],"tokenizer" : "ik_max_word"},"ik_smart": {"type":      "custom","tokenizer": "ik_smart","char_filter": [],"filter": ["my_synonym"]}}},"number_of_replicas" : "1"}}
}
  • 如同义词
  • 同义词方式:房屋,房地产 => 房屋,房地产
GET demo/_analyze
{"analyzer" :  "ik_smart", "text" : "房屋"}

结果:

{"tokens" : [{"token" : "房屋","start_offset" : 0,"end_offset" : 3,"type" : "SYNONYM","position" : 0},{"token" : "房地产","start_offset" : 0,"end_offset" : 3,"type" : "SYNONYM","position" : 0}]
}

ElasticSearch7.x IK 动态同义词/近义词动态加载同义词/近义词 dynamic_synonym相关推荐

  1. jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法

    博客分类: jquery-easyui jQueryAjax框架HTML  现象: AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout ...

  2. python加载谷歌word2vec现成词向量

    第一步,下载谷歌word2vec现成词向量   在以下网址下载即可,大小~1.5G https://drive.google.com/file/d/0B7XkCwpI5KDYNlNUTTlSS21pQ ...

  3. 实践:jieba分词和pkuseg分词、去除停用词、加载预训练词向量

    一:jieba分词和pkuseg分词 原代码文件 链接:https://pan.baidu.com/s/1J8kmTFk8lec5ubfwBaSnLg 提取码:e4nv 目录: 1:分词介绍: 目标: ...

  4. asp.net 动态创建TextBox控件 如何加载状态信息

    接着上文Asp.net TextBox的TextChanged事件你真的清楚吗? 这里我们来说说状态数据时如何加载的. 虽然在Control中有调用状态转存的方法,但是这里有一个判断条件 if (_c ...

  5. scrapy爬取动态网页_scrapy_splash 爬取 js 加载网页初体验

    最近打算学习 scrapy_splash 来爬取 js 加载的动态网页 selenium 实在太慢了,不在迫不得已的情况下并不推荐使用 下面,直接开始吧 目标网站 JD 某商品 环境需求 已安装 do ...

  6. 使用Visual Studio来创建动态库/静态库,并加载

    使用Visual Studio来创建动态库 第一步新建一个控制台程序 第二步去掉SDL安全开发周期,以及选中创建DLL空项目 在资源管理器中添加.h和.cpp文件 在.h文件里可以写上函数的声明: # ...

  7. vue动态路由变化页面不重新加载问题,实现方式比较简单,就是有点鸡贼

    由于使用了动态路由,有时候页面需根据路由来动态变化,整个页面需要重新加载,但是地址指向同一个,这边用了一个比较取巧的方式 将整个页面封装成一个子组件 children => formTe,参数可 ...

  8. Gensim加载GloVe提供的词向量的诸多Bug之终极解决

    1.先来瞅瞅Gensim提供的词向量长啥样(glove.6B.300d.txt): 2.源文件->W2V的文件->序列化 import _pickle from gensim.models ...

  9. 在线词云加载慢,有水印?作为程序员,教你如何使用Java,Python和JS生成词云!

    声明:本文转载huaairen作者一文<制作词云库图片>,如有侵权,请联系删除. 前言 某天心血来潮,想搞搞词云这玩意,网上很多在线生成词云的网站,但是加载都比较慢,或者有水印,再或者是无 ...

最新文章

  1. 开源库libuuid简介及使用
  2. php+php-fom+nginx配置参数调优详解
  3. 安卓用于组件传递参数的对象是_入门篇:7.组件2:Android Service-service的数据传递与通信...
  4. [LeetCode]LRU Cache有个问题,求大神解答【已解决】
  5. 文件字节输出流 java
  6. 2021-06-01 深入分析锁升级流程的基础
  7. java实验二 类和对象
  8. ffplay 源码 option 部分阅读ing
  9. 多线程lambda数据捕获
  10. CCAI 2017 | 日本理化学研究所杉山将:弱监督机器学习的研究进展
  11. MySQL 报错记录
  12. mcc mnc 运营商对应表_在南非怎么选手机的移动电话运营商?
  13. 获取邮箱的DNS和MX 工具类
  14. 还在一节一节数链条吗?使用SOLIDWORKS参数化设计自动计算链条节数
  15. AMP—Rover移植
  16. 英皇考级——听力测试的训练方法
  17. CheatMaker教学进阶之一 - 基地址与指针
  18. S3C6410(OK6410开发板介绍)
  19. 单文件、多文件上传 - Tomcat
  20. Swift5 10.初始化Initialization(待深究)

热门文章

  1. 在WooCommerce中设置最低结账要求
  2. 【网站搭建】Godaddy如何转移域名
  3. linux更改硬盘紧急模式,linux 急救模式 和 single模式
  4. win7和win2008 r2下配置IIS7(ASP.net运行环境)
  5. was英文读音_英语单词was怎么读,was的音标是什么,was是什么意思 - 音标网
  6. Pytorch之DataLoader Dataset、datasets、models、transforms的认识和学习
  7. 王道数据结构笔记(6)-图论
  8. 智能手机会让人丧失“性趣”?
  9. 计算机云教室管理制度,《中云中学专用教室管理制度》一.doc
  10. Windows 实现桌面截屏并保存为.jpg