elasticsearch 同义词管理热更新

这篇具有很好参考价值的文章主要介绍了elasticsearch 同义词管理热更新。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

项目有需要做一个同义词搜索的功能,就去研究了下es的同义词搜索功能,踩了不少坑记录下

同义词本地文件读取方式

如果只是需要同义词搜索,不需要管理和更新,es本体就能支持,我踩的坑基本也不在这,就不具体说了,参考这个就好了https://blog.csdn.net/qq_40592041/article/details/108006994

使用(dynamic-synonym)插件远程热词更新

拉取仓库代码

插件仓库地址https://github.com/bells/elasticsearch-analysis-dynamic-synonym
gitee有克隆的仓库,github连不上可以去gitee找找

根据自己的es版本打包

查询es版本直接请求es ip+端口就行

http://127.0.0.1:9200/

返回的json version里面就是版本

{
  "name" : "e8d7d490ec4f",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "Hf1KFT2bSnaW00s9eLSK4Q",
  "version" : {
    "number" : "7.4.2",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "2f90bbf7b93631e52bafb59b3b049cb44ec25e96",
    "build_date" : "2019-10-28T20:40:44.881551Z",
    "build_snapshot" : false,
    "lucene_version" : "8.2.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

找到pom文件修改version版本和es版本一致
elasticsearch 同义词管理热更新,elasticsearch,搜索引擎,es,同义词搜索
这个时候有个问题,部分版本回出现打包失败的问题,第一种解决方案是去git提交历史里找最接近的版本,比如我是7.4.2版本,我找的就是支持7.7.0的提交记录,回滚代码到对应记录,在改version为7.4.2打包
elasticsearch 同义词管理热更新,elasticsearch,搜索引擎,es,同义词搜索
打包后运行发现还是有问题,会报NoSuchMethodError,说output不存在,于是我把git记录往后推,到了改版本前,这个时候打包也会报output找不到的问题,这个时候把代码里报错的outputs(),改成outputs,不是调方法,而是掉对象,在打包就行了
打完包后在\target\releases文件夹中有个压缩包,解压上传到es的plugins文件夹里新建的dynamic-synonym文件夹就行
然后重启es,我这边是docker部署的,直接docker restart就行

服务端代码

我这边为了测试是给的死数据,后续需要按需修改,一开始我以为只要有放回就行,后来发现还需要对head做处理才行

 @GetMapping("/getActive")
    public String getActiveEsSynonyms(HttpServletRequest request, HttpServletResponse response) {
        String result = "";
        String eTag = request.getHeader("If-None-Match");
        String modified = request.getHeader("If-Modified-Since");
        String currentDate = DateUtils.getTime();

        System.out.println("加载ik同义词,上次同义词:" + eTag + ",上次修改时间:" + modified + ",当前日期:" + currentDate);

//        if (!currentDate.equals(modified)) {

            String oldSynonym = 2+"";


//            System.out.println("加载ik同义词,当前同义词数:"+2);
//            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 = "苹果,手机\nns,游戏机";
//            }
//        }
        //更新时间
        response.setHeader("Last-Modified", modified);
        response.setHeader("ETag", eTag);
        response.setHeader("Content-Type", "text/plain");
        return result;
    }

设置es索引

如果是新建索引直接新建就好

PUT test
{
	"settings": {
		"index": {
			"number_of_shards": "3",
			"number_of_replicas": "1",
			"max_result_window": "200000",
			"analysis": {
				"filter": {
					"remote_synonym": {
						"type": "dynamic_synonym",
						"synonyms_path": "http://ip:port/synonyms/getActive",
						"interval": 30
					},
					"local_synonym": {
						"type": "dynamic_synonym",
						"synonyms_path": "synonym.txt"
					}
				},
				"analyzer": {
					"ik_max_syno": {
						"type": "custom",
						"tokenizer": "ik_max_word",
						"filter": [
							"remote_synonym"
						]
					}
				}
			}
		}
	},
	"mappings": {
		"properties": {
			"keyword": {
				"type": "text",
				"analyzer": "ik_max_syno"
			}
		}
	}
}

如果是已有索引要修改,我的操作是先新建一个结构一样的索引,在把数据复制过去,在删除原索引,新建原索引,数据复制回去,删除新索引
删除索引命令

DELETE test

数据复制命令

POST _reindex
{
  "source": {
    "index": "原索引"
  },
  "dest": {
    "index": "目标索引"
  }
}

测试

添加数据后测试,搜索苹果能出现手机就说明没问题了文章来源地址https://www.toymoban.com/news/detail-825921.html

到了这里,关于elasticsearch 同义词管理热更新的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elasticsearch同义词自定义词库未生效原因

    检查文件及目录是否存在 所有节点配置完之后都要重启 检查测试脚本是否正确的,我遇到的问题就是脚本不正确但是确能执行,就是拿不到正确结果 错误脚本: 正确脚本:

    2024年02月11日
    浏览(26)
  • Elasticsearch:词干、Shingles 和同义词过滤器

    分词器生成的分词可能需要进一步丰富或增强,例如小写(或大写)标记、提供同义词、开发词干词、删除撇号或标点符号等。 分词过滤器对分词进行处理以执行此类转换。 Elasticsearch 提供了将近 50 个分词过滤器,正如你可以想象的那样,在这里讨论所有这些过滤器是不可

    2024年02月03日
    浏览(27)
  • 【ES】Elasticsearch:词干、Shingles 和同义词过滤器

    分词器生成的分词可能需要进一步丰富或增强,例如小写(或大写)标记、提供同义词、开发词干词、删除撇号或标点符号等。 分词过滤器对分词进行处理以执行此类转换。 Elasticsearch 提供了将近 50 个分词过滤器,正如你可以想象的那样,在这里讨论所有这些过滤器是不可

    2024年02月05日
    浏览(31)
  • 使用阿里云试用Elasticsearch学习:3.6 处理人类语言——同义词

    词干提取是通过简化他们的词根形式来扩大搜索的范围,同义词 通过相关的观念和概念来扩大搜索范围。 也许没有文档匹配查询 “英国女王“ ,但是包含 “英国君主” 的文档可能会被认为是很好的匹配。 用户搜索 “美国” 并且期望找到包含 美利坚合众国 、 美国 、 美

    2024年04月10日
    浏览(32)
  • Elasticsearch教程(35) ik中文分词器+pinyin拼音分词器+同义词

    闲来无事,发现上一篇ES博客还是 去年9月份 写的中文ik分词器 pinyin 首字母 search_as_you_type 组合使用,该篇文章还挖了一个 大坑 没有填,快一年了,是时候填下坑了。 针对股票查询这个特点场景,再结合一般使用者的搜索习惯,暂时确定如下7种期望效果。 上一篇博客Elast

    2023年04月09日
    浏览(33)
  • 同义词替换-批量自动同义词替换软件

    同义词替换,今天给大家分享一款免费的同义词替换器,支持各种同义词替换。一个同义词可以替换多种同义词。同时还支持同义词文章替换详细参考图片 如何优化网站是每个专业SEO人员都熟悉的问题,也是每天必须做的功课之一。接下来,我们来谈谈网站中的高索引

    2024年02月09日
    浏览(27)
  • Oracle系列十二:视图、记录、同义词、序列

    (1)基本概念 Oracle视图是数据库中的一种特殊对象,它是一个虚拟的表,不存储数据,而是基于一个或多个表的查询结果而创建的。视图可以看作是一个 存储在数据库中的查询结果集 ,具有表的特性,包含一系列带有名称的列和行数据, 可以被查询、修改和删除 等。 视图

    2024年02月03日
    浏览(26)
  • Oracle存过-对象权限创建回收、同义词创建删除

    Oracle存过-对象权限创建回收、同义词创建删除

    2024年02月15日
    浏览(29)
  • docker-compose安装es以及ik分词同义词插件

    目录 1 前言 2 集成利器Docker 2.1 Docker环境安装 2.1.1 环境检查 2.1.2 在线安装 2.1.3 离线安装 2.2 Docker-Compose的安装 2.2.1 概念简介 2.2.2 安装步骤 2.2.2.1 二进制文件安装 2.2.2.2 离线安装 2.2.2.3 yum安装 3 一键安装ES及Kibana 3.1 yml文件的编写 3.1.1 elasticsearch.yml配置 3.1.2 kibana.yml配置 3.2 一键

    2024年04月23日
    浏览(32)
  • ​ES elasticsearch-analysis-dynamic-synonym​连接数据库动态更新synonym近义词

            在很多搜索场景中,我们希望能够搜索出搜索词相关的目标,同时也希望能搜索出其近义词相关的目标。例如在商品搜索中,搜索“ 瓠瓜 ”,也希望能够搜索出“ 西葫芦 ”,但“ 西葫芦 ”商品名称因不含有“ 瓠瓜 ”,导致无法搜索出来。         此时就

    2024年02月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包