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

作者:Carlos Delgado

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

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

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

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

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

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

以前的同义词更新过程

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

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

bash 复制代码
1.  PUT /synonym_test
2.  {
3.    "settings": {
4.      "index": {
5.        "analysis": {
6.          "analyzer": {
7.            "synonym_analyzer": {
8.              "tokenizer": "whitespace",
9.              "filter": ["my_synonyms"]
10.            }
11.          },
12.          "filter": {
13.            "my_synonyms": {
14.              "type": "synonym",
15.              "synonyms_path": "my_synonyms.txt",
16.              "updateable": true
17.            }
18.          }
19.        }
20.      }
21.    }
22.  }

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

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

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

为什么要添加同义词 API?

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

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

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

使用 synonyms API

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

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

定义同义词集

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

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

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

markdown 复制代码
1.  PUT _synonyms/my-synonyms-set
2.  {
3.    "synonyms_set": [
4.      {
5.        "id": "pc",
6.        "synonyms": "pc => personal computer"
7.      },

9.      {
10.        "id": "computer",
11.        "synonyms": "computer,laptop"
12.      }
13.    ]
14.  }

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

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

配置同义词集

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

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

bash 复制代码
1.  PUT /synonym_set_test
2.  {
3.    "settings": {
4.      "index": {
5.        "analysis": {
6.          "analyzer": {
7.            "synonym_analyzer": {
8.              "tokenizer": "whitespace",
9.              "filter": ["my_synonyms"]
10.            }
11.          },
12.          "filter": {
13.            "my_synonyms": {
14.              "type": "synonym",
15.              "synonyms_set": "my-synonyms-set",
16.              "updateable": true
17.            }
18.          }
19.        }
20.      }
21.    }
22.  }

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

更新同义词集

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

markdown 复制代码
1.  PUT _synonyms/my-synonyms-set
2.  {
3.    "synonyms_set": [
4.      {
5.        "id": "pc",
6.        "synonyms": "pc => personal computer"
7.      },
8.      {
9.        "id": "computer",
10.        "synonyms": "computer, pc, laptop, desktop"
11.      }
12.    ]
13.  }

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

arduino 复制代码
1.  PUT _synonyms/my-synonyms-set/computer
2.  {
3.    "synonyms": "computer, pc, laptop, desktop"
4.  }

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

试试看!

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

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

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

相关推荐
ly21st1 小时前
elasticsearch安全认证
安全·elasticsearch
Mitch3111 小时前
【漏洞复现】CVE-2014-3120 & CVE-2015-1427 Expression Injection
运维·web安全·elasticsearch·docker·apache
开心最重要(*^▽^*)3 小时前
Metricbeat安装教程——Linux——Metricbeat监控ES集群
linux·elasticsearch
叫我DPT3 小时前
Elasticsearch 数据存储底层机制详解
elasticsearch·搜索引擎·全文检索
努力的布布3 小时前
Elasticsearch-索引的批量操作
大数据·elasticsearch·搜索引擎·全文检索
斑驳竹影4 小时前
ElasticSearch存储引擎
大数据·elasticsearch·搜索引擎
努力的布布8 小时前
Elasticsearch-模糊查询
大数据·elasticsearch·搜索引擎
m0_7482370510 小时前
Monorepo pnpm 模式管理多个 web 项目
大数据·前端·elasticsearch
java1234_小锋12 小时前
ElasticSearch如何做性能优化?
大数据·elasticsearch·性能优化
LI JS@你猜啊1 天前
Elasticsearch 集群
大数据·服务器·elasticsearch