Elasticsearch 搜索提示+S同义词+模糊匹配

5

我正在寻找一种实现同义词和模糊匹配的自动建议功能的方法。

例如,当用户尝试搜索"replce ar"时,我的同义词列表中有ar => 音频记录。

因此,结果应包括与更改音频记录、替换音频记录等相匹配的项目。

这里我们需要模糊匹配,因为用户搜索文本中的"replace"有一个拼写错误。同义词匹配ar => 音频记录。使用正则表达式模式进行自动建议。

是否可能在单个字段中实现所有三个功能?

编辑:正则表达式+模糊匹配会出错。我没有很好地解释我需要一个正则表达式模式的需求。因此,我需要一个用于进行部分单词查找('encyclopedic'包含'cyclo')的正则表达式。

现在,在调查了我可以使用哪些选项之后,引导我到NGram Tokenizer并查看其他提示器,我发现也许短语提示器真的是我正在寻找的,所以我将尝试并告诉你。

1个回答

1
是的,您可以使用同义词和模糊匹配来进行建议。通过在语言分析器中添加同义词过滤器并将该过滤器添加到分析器中来处理同义词。然后,在为要用于建议的字段创建字段映射时,将该分析器分配给该字段即可。
至于模糊匹配,它发生在查询时。大多数基于文本的查询都支持fuzziness选项,允许您指定要允许多少个更正。默认的auto值会根据术语的长度调整更正次数,因此通常最好使用该值。 概念分析设置synonym_graph reference
{
  "analysis": {
    "filter": {
      "synonyms": {
        "type": "synonym_graph",
        "expand": "false",
        "synonyms": [
          "ar => audio record"
        ]
      }
    },
    "analyzer": {
      "synonyms": {
        "tokenizer": "standard",
        "type": "custom",
        "filter": [
          "standard",
          "lowercase",
          "synonyms"
        ]
      }
    }
  }
}

记忆映射字段 (分析器 + 映射参考)

(注意,分析器的名称与上面定义的分析器名称匹配)

{
  "properties": {
    "suggestion": {
      "type": "text",
      "analyzer": "synonyms"
    }
  }
}

概念性查询
{
  "query": {
    "match": {
      "suggestion": {
        "query": "replce ar",
        "fuzziness": "auto",
        "operator": "and"
      }
    }
  }
}

请记住,有几种不同的建议选项,因此根据您使用的选项,您可能需要调整字段映射的方式,甚至向分析器添加另一个令牌过滤器。但是,分析器只是由一系列令牌过滤器组成,因此您通常可以组合所需的任何令牌过滤器以实现目标。只需确保您了解每个过滤器正在执行的操作,以便正确排序过滤器。
如果在此过程的某个部分遇到困难,请提交另一个问题,说明您遇到的具体问题。祝你好运!

请提交另一个问题:我不明白为什么人们推荐分支?在我看来,一个主题集中得越多,就越好。 - shmuel friedman
我认为这是因为具体的问题有更好的机会得到具体的答案。例如,有人可能对回答你有关整合建议+同义词+模糊度的初始问题不感兴趣,但他们愿意帮助解决有关设置同义词的具体问题。此外,特定主题上有更多的问题,对于正在寻求该主题帮助的用户来说是更好的。 - dmbaughman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接