一尘不染

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

elasticsearch

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

例如,给定字符串:

Model 22340 Sound Spectrum Analyzer

以下标记应匹配:

sound analyzer sound spectrum analyzer

但不是

sound meter light spectrum chemical analyzer


阅读 252

收藏
2020-06-22

共1个答案

一尘不染

我认为不可能创建能够自动标记随机字符串的准确的Elasticsearch查询。这基本上是一个反向查询。将标签与文档匹配的最准确方法是构造对标签的查询,然后搜索文档。显然,如果您需要遍历每个标签以自动为文档添加标签,则效率将非常低下。

要执行反向查询,您想使用Elasticsearch Percolator API:

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

该API非常灵活,可让您在具有多个字段的文档中创建相当复杂的查询。

基本概念是这样的(假设您的代码具有应用特定的ID字段):

  1. 对于每个标签,为其创建查询,然后使用过滤器的ID字段向渗滤器注册该查询。

  2. 要自动标记字符串,请将您的字符串(作为文档)传递给Percolator,后者将与所有已注册的查询匹配。

  3. 遍历比赛。每个匹配项都包含查询的_id。使用_id引用标记。

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

2020-06-22