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

标签 elasticsearch elasticsearch-2.0

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

例如,给定字符串:

Model 22340 Sound Spectrum Analyzer

以下标记应匹配:
sound analyzer sound spectrum analyzer
但不是
sound meter light spectrum chemical analyzer

最佳答案

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

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

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

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

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

  • 为每个标签创建一个查询,然后使用渗滤器(使用标签的ID字段)注册该查询。
  • 要自动标记字符串,请将您的字符串(作为文档)传递给Percolator,后者将与所有已注册的查询匹配。
  • 遍历比赛。每个匹配项都包含查询的_id。使用_id引用标记。

  • 这也是一篇不错的文章:https://www.elastic.co/blog/percolator-redesign-blog-post

    关于elasticsearch - Elasticsearch-使用 “tags”索引发现给定字符串中的所有标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37889680/

    相关文章:

    elasticsearch - 如何在像Elastic这样的搜索引擎中使用许多联接来管理SQL查询?

    elasticsearch - 有没有办法自动导出一段时间内的kibana可视化数据?

    elasticsearch-2.0 - bool 查询不支持过​​滤器

    elasticsearch - 如何记录所有对 ElasticSearch 的请求?

    ubuntu - 无法从主机操作系统访问 Vagrant VM 中的 Elasticsearch 2.0

    elasticsearch - 编写Elasticsearch 2.1脚本没有这样的属性:doc

    ElasticSearch:inner_hits 和 hightlight_query

    elasticsearch - elasticsearch如何使用滚动获取以前的数据

    elasticsearch - Elasticsearch 中的分组数据,两个键具有相同的值

    laravel - 如何将流明日志发送到 ELK