Elasticsearch建议+同义词+模糊性

标签 elasticsearch fuzzy-search search-suggestion type-synonyms

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

例如,当用户试图搜索“replce ar”时 我的同义词列表有 ar => 录音

所以,结果应该包括匹配的项目 改变录音 更换录音 等等,

这里我们需要模糊性,因为“replace”(在用户的搜索文本中)有错别字 同义词匹配 ar => audio record 使用正则表达式模式自动建议。

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

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

现在,经过调查what options do i have为此,将我引导至 NGram Tokenizer并查看其他建议者,我发现也许 Phrase suggester确实是我正在寻找的东西,所以我会尝试并告诉你。

最佳答案

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

至于模糊性,那是在查询时发生的。大多数基于文本的查询都支持 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"
        ]
      }
    }
  }
}

概念场映射 ( Analyzer + Mapping reference )

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

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

概念查询

{
  "query": {
    "match": {
      "suggestion": {
        "query": "replce ar",
        "fuzziness": "auto",
        "operator": "and"
      }
    }
  }
}

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

如果您在此过程中遇到困难,只需针对您遇到的具体问题提交另一个问题。祝你好运!

关于Elasticsearch建议+同义词+模糊性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54866687/

相关文章:

elasticsearch - 将分数添加到 elasticsearch 完成建议器输入

sql-update - 更新elasticsearch中所有记录中的字段

ruby-on-rails - 根据searchkick中的两个唯一字段(与SQL DISTINCT相同)获取结果

elasticsearch - Elasticsearch-如何在升级后删除卡住的持久设置

elasticsearch - 使用先前存在的索引的新映射创建新索引

java - JTextField 的自动建议

elasticsearch - 无法使用nest和elasticsearch批量创建文档读取字符串错误。 “Unexpected token: StartObject. Path ' items [0] .create.error'”

java - 在 Lucene-4.x 中将有效负载提升与 FuzzyQuery 结合使用

c# - super 模糊名称检查?

lucene - 像这样模糊和像这样模糊之间的区别?