Elasticsearch - 使用“标签”索引来发现给定字符串中的所有标签

2024-05-13

我有一个 elasticsearch v2.x 集群,其“标签”索引包含大约 5000 个标签:{tagName, tagID}。给定一个字符串,是否可以查询标签索引以获取在该字符串中找到的所有标签?我不仅想要精确匹配,而且还希望能够控制模糊匹配,但又不会太慷慨。过于慷慨,只有当标签中的所有标记都在彼此一定的距离内(例如 5 个单词)找到时,标签才应该匹配。

例如,给定字符串:

Model 22340 Sound Spectrum Analyzer

以下标签应匹配:

sound analyzer sound spectrum analyzer

BUT NOT

sound meter light spectrum chemical analyzer


我认为不可能创建一个准确的弹性搜索查询来自动标记随机字符串。这基本上是一个反向查询。将标签与文档匹配的最准确方法是构建标签的查询,然后搜索文档。显然,如果您需要迭代每个标签来自动标记文档,这将非常低效。

要进行反向查询,您需要使用 Elasticsearch Percolator API:

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-percolate.html https://www.elastic.co/guide/en/elasticsearch/reference/current/search-percolate.html

该 API 非常灵活,允许您对具有多个字段的文档创建相当复杂的查询。

基本概念是这样的(假设您的标签有一个特定于应用程序的 ID 字段):

  1. 对于每个标签,为其创建一个查询,并使用过滤器注册该查询(使用标签的 ID 字段)。

  2. 要自动标记字符串,请将字符串(作为文档)传递到 Percolator,它将与所有注册的查询进行匹配。

  3. 迭代匹配。每个匹配项都包含查询的 _id。使用 _id 引用标签。

这也是一篇值得一读的好文章:https://www.elastic.co/blog/percolator-redesign-blog-post https://www.elastic.co/blog/percolator-redesign-blog-post

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Elasticsearch - 使用“标签”索引来发现给定字符串中的所有标签 的相关文章

随机推荐