在 Elasticsearch 中更新同义词:同义词 synonyms API 简介

2024-01-23 05:10

本文主要是介绍在 Elasticsearch 中更新同义词:同义词 synonyms API 简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:Carlos Delgado

在上一篇文章中,我们讨论了同义词及其对于提供出色搜索体验的重要性。 使用同义词可以通过以下方式改善搜索结果:

  • 查找与搜索查询使用相似词的文档
  • 使特定领域的词汇更加用户友好,以便用户使用熟悉的单词找到结果
  • 纠正常见的拼写错误或拼写错误

搜索结果需要随着时间的推移而变化。 新商品开始销售,新趋势改变了用户搜索的内容,新术语成为搜索域的一部分。 我们的搜索体验也必须不断发展。

作为改进搜索体验的一部分,保持同义词更新非常重要。 Elasticsearch® 中引入了新的同义词 synonym API,以帮助管理同义词并无缝更新它们。

此 API 简化了您更新同义词的工作流程,并提供与你的流程和工具更好的集成。

请注意:Synonym API 适用于 Elasticsearch 8.10 版本之后。

以前的同义词更新过程

正如博客文章中详细解释的,Elasticsearch 中的同义词是使用 synonym 和 synonym graph  token filter 定义的。 然后,这些 token 过滤器将作为文本字段分析的一部分包含在内。

我们已经可以通过在 synonym token 过滤器中配置同义词文件来更新搜索分析器的同义词 - 例如:

PUT /synonym_test
{"settings": {"index": {"analysis": {"analyzer": {"synonym_analyzer": {"tokenizer": "whitespace","filter": ["my_synonyms"]}},"filter": {"my_synonyms": {"type": "synonym","synonyms_path": "my_synonyms.txt","updateable": true}}}}}
}

更多关于同义词的使用,请阅读:

  • Elasticsearch:如何在 Elasticsearch 中正确使用同义词功能

  • Elasticsearch:使用同义词 synonyms 来提高搜索效率

synonym_path 定义存储同义词文件的文件路径(相对于 Elasticsearch 配置文件)。 同义词文件包含同义词规则,必须分发到集群中的所有 Elasticsearch 节点。

要更新同义词,我们需要更新每个集群节点上的同义词文件,然后使用 reload search analyzers API 为每个使用同义词文件作为其同义词标记过滤器的索引重新加载搜索分析器。

为什么要添加同义词 API?

当前更新同义词的方式涉及以下几个步骤:

  • 我们需要将同义词文件上传到 Elasticsearch 集群中的每个节点。 Elastic Cloud 用户可以上传自定义捆绑包来执行此操作。
  • 我们的同义词 token 过滤器必须配置正确的路径(该路径可以是绝对路径,也可以是相对于 Elasticsearch 配置目录的路径)。
  • 同义词文件必须在每个节点上更新并保持同步。
  • 需要为使用同义词文件的每个索引调用 Reload search analyzers API。

这是可行的,但它涉及基础设施工作,例如上传文件、保持文件最新和同步,以及了解每个同义词文件的使用位置。

使用 synonyms API

与之前基于文件的同义词更新方法相比,使用同义词 API 具有许多优点:

  • 提供基于 API 的同义词定义机制
  • 为分析过程提供自动重载机制
  • 允许细粒度同义词管理 - 你可以替换同义词集上的所有规则或单个同义词规则

定义同义词集

同义词集是要应用的一组同义词。 你可以根据需要添加任意数量的同义词集。

每个同义词集使用同义词规则定义同义词。 每个规则使用 Solr 格式定义一组同义词单词以及它们之间的显式等价项。

创建同义词集是使用创建或更新同义词集 API 完成的:

PUT _synonyms/my-synonyms-set
{"synonyms_set": [{"id": "pc","synonyms": "pc => personal computer"},{"id": "computer","synonyms": "computer,laptop"}]
}

此 API 请求创建一个带有标识符 my-synonyms-set 的新同义词集,它定义了两个同义词规则:

  • 一个带有标识符 “pc” 的同义词规则,将单词 “pc” 扩展为 “personal computer”,但反之则不然
  • 一条带有标识符 “computer” 的同义词规则,指定 “computer” 和 “laptop” 是等效的

配置同义词集

创建后,你的同义词集可以用作 synonym 或 synoynm graph token 滤器的一部分。

使用 synonyms_set 配置选项来指定在上一步中创建的同义词集标识符:

PUT /synonym_set_test
{"settings": {"index": {"analysis": {"analyzer": {"synonym_analyzer": {"tokenizer": "whitespace","filter": ["my_synonyms"]}},"filter": {"my_synonyms": {"type": "synonym","synonyms_set": "my-synonyms-set","updateable": true}}}}}
}

你的同义词已准备好可供使用! 分析器将检索配置的同义词集中定义的同义词,并将它们应用到您使用它的字段。

更新同义词集

你可以通过更新所有同义词规则来更新同义词集:

PUT _synonyms/my-synonyms-set
{"synonyms_set": [{"id": "pc","synonyms": "pc => personal computer"},{"id": "computer","synonyms": "computer, pc, laptop, desktop"}]
}

或者,你可以管理单独的同义词规则。 由于每个规则都有一个标识符,因此你可以创建、删除或更新单个同义词规则:

PUT _synonyms/my-synonyms-set/computer
{"synonyms": "computer, pc, laptop, desktop"
}

就是这样! 使用同义词集的索引将自动重新加载分析器。 你的搜索体验将可以访问更新后的同义词,无需执行进一步的步骤。

试试看!

管理你的搜索体验的同义词从未如此简单! 你现在可以使用新的 synonym API 来定义同义词并通过自动重新加载所需的分析器来更新同义词,而不是使用文件并更新每个文件和关联的索引分析器。

一探究竟! 立即创建 Elastic Cloud 集群并开始定义同义词。

我们很乐意听到您的反馈 - 加入我们的讨论论坛或社区 Slack 频道中的对话。

这篇关于在 Elasticsearch 中更新同义词:同义词 synonyms API 简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/635329

相关文章

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

hdu1689(线段树成段更新)

两种操作:1、set区间[a,b]上数字为v;2、查询[ 1 , n ]上的sum 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdl

hdu 1754 I Hate It(线段树,单点更新,区间最值)

题意是求一个线段中的最大数。 线段树的模板题,试用了一下交大的模板。效率有点略低。 代码: #include <stdio.h>#include <string.h>#define TREE_SIZE (1 << (20))//const int TREE_SIZE = 200000 + 10;int max(int a, int b){return a > b ? a :

AI行业应用(不定期更新)

ChatPDF 可以让你上传一个 PDF 文件,然后针对这个 PDF 进行小结和提问。你可以把各种各样你要研究的分析报告交给它,快速获取到想要知道的信息。https://www.chatpdf.com/

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

GIS图形库更新2024.8.4-9.9

更多精彩内容请访问 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信:digital_twin123 Cesium 本期发布了1.121 版本。重大新闻,Cesium被Bentley收购。 ✨ 功能和改进 默认启用 MSAA,采样 4 次。若要关闭 MSAA,则可以设置scene.msaaSamples = 1。但是通过比较,发现并没有多大改善。

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下