首页 > 解决方案 > Elasticsearch Suggest+同义词+模糊性

问题描述

我正在寻找一种方法来实现具有同义词和模糊性的自动建议

例如,当用户尝试搜索“replce ar”时,我的同义词列表中有 ar => audio record

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

在这里我们需要模糊,因为“替换”(在用户的搜索文本中)有一个错字匹配 ar => 音频记录的同义词 使用正则表达式模式自动建议。

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

编辑: 正则表达式+模糊只会引发错误。我还没有很好地解释我对正则表达式模式的需求。所以,我需要一个正则表达式来进行部分单词查找('encyclopedic' 包含'cyclo')。

现在,在调查了我为此目的有哪些选择之后,将我引导到NGram Tokenizer并查看其他建议者,我发现也许Phrase 建议者确实是我正在寻找的,所以我会尝试并告诉你关于。

标签: elasticsearchfuzzy-searchsearch-suggestiontype-synonyms

解决方案


是的,您可以使用同义词和模糊性来获得建议。通过在语言分析器中添加同义词过滤器并将该过滤器添加到分析器来处理同义词。然后,当您为要用于建议的字段创建字段映射时,将该分析器分配给该字段。

至于模糊性,这发生在查询时。大多数基于文本的查询都支持一个fuzziness选项,该选项允许您指定要允许的更正次数。默认auto值会根据期限的长短调整更正的次数,因此这通常是最好的。

名义分析设置synonym_graph 参考

{
  "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"
      }
    }
  }
}

请记住,建议有几个不同的选项,因此根据您使用的选项,您可能需要调整字段的映射方式,甚至向分析器添加另一个标记过滤器。但是分析器只是由一系列标记过滤器组成,因此您通常可以组合实现目标所需的任何标记过滤器。只需确保您了解每个过滤器的作用,以便以正确的顺序获取过滤器。

如果您在此过程的一部分中遇到困难,只需提交另一个关于您遇到的特定问题的问题。祝你好运!


推荐阅读