nest - 附件上的此类模糊词在部分单词上不返回任何内容

标签 nest elasticsearch

我有这样的映射:

    {
      "doc": {
        "mappings": {
          "mydocument": {
            "properties": {
              "file": {
                "type": "attachment",
                "path": "full",
                "fields": {
                  "file": {
                    "type": "string",
                    "store": true,
                    "term_vector": "with_positions_offsets"
                  },
                  "author": {
...

当我搜索一个完整的单词时,我得到的结果是:
  "query": {
        "fuzzy_like_this" : {
          "fields" : ["file"],
          "like_text" : "This_is_something_I_want_to_search_for",
          "max_query_terms" : 12
        }
    },
  "highlight" : {
    "number_of_fragments" : 3,
    "fragment_size" : 650,
    "fields" : {
      "file" : {  }
    }
  }   

但是,如果将搜索词更改为"This_is_something_I_want",我什么也没得到。我想念什么?

最佳答案

要实现部分匹配,我们必须首先了解fuzzy like this的功能,然后决定要返回部分匹配的内容。 fuzzy like this将执行2个关键功能。

  • 将使用默认分析器分析like_text。然后,所有产生的 token 将用于根据词频或tf-idf
  • 查找文档

    这通常意味着输入项将在空间上分割并小写。因此,This_is_something_I_want将标记为this_is_something_i_want。除非您拥有带有确切术语的文件,否则没有文件匹配。
  • 其次,所有术语均为fuzzified。模糊搜索根据一个单词要匹配另一个单词需要进行多少次字符更改来对术语评分。例如,要从bat转换为hat,我们将需要更改1个字符。

  • 对于从this_is_something_i_wantthis_is_something_i_want_to_search_for的情况,我们将需要进行14个字符的更改(添加_to_search_for。)当使用超过5或6个字符的术语时,标准模糊搜索仅允许进行3个字符的更改。但是,将模糊限制提高到14会产生严重的偏差结果

    因此,这些功能都无法帮助您找到想要的结果。

    这是我的建议:
  • 您可以实现一个类似于this的下划线拆分分析器。然后产生的 token 将是['this', 'is', 'something', 'i', 'want'],可以正确匹配到示例案例
  • 或者,如果只需要一个以指定文本开头的文档,则可以使用phrase prefix查询代替fuzzy like this。文档here
  • 关于nest - 附件上的此类模糊词在部分单词上不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32082971/

    相关文章:

    javascript - 如何从 d3 节点层次结构创建 ul-li 列表?

    elasticsearch - Elasticsearch Soundex匹配查询-NEST

    c# - 索引= FieldIndexOption.No与OptOut = true?

    elasticsearch - Elastic Search Master 容灾

    ElasticSearch (Nest) 条款的条款子聚合 - 未按预期工作

    elasticsearch - Elasticsearch错误解释验证API

    elasticsearch - Elasticsearch:如何通过属性中的项目数来计算文档数?

    elasticsearch - ElasticSearch忽略只有一个字母的单词

    geolocation - Elasticsearch 结果中的返回距离?

    elasticsearch - 在ElasticSearch(Nest)中,如果未配置父字段,则无法指定父