附件上的模糊相似在部分单词上没有返回任何内容

时间:2015-08-18 21:34:29

标签: 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",我什么也得不到。我错过了什么?

1 个答案:

答案 0 :(得分:1)

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

  1. 将使用默认分析器分析like_text。然后,所有生成的标记将用于根据术语频率或tf-idf
  2. 查找文档

    这通常意味着输入术语将在空间和小写上分开。因此,This_is_something_I_want会被标记为this_is_something_i_want。除非您有具有此确切术语的文件,否则不会匹配任何文档。

    1. 其次,所有字词均为fuzzified。模糊搜索根据需要对单词进行多少个字符更改以匹配另一个单词来对术语进行评分。例如,要从bat转到hat,我们需要更改1个字符。
    2. 对于我们从this_is_something_i_wantthis_is_something_i_want_to_search_for的情况,我们需要进行14个字符更改(添加_to_search_for。)标准模糊搜索仅允许在处理时进行3个字符更改术语长于5或6个字符。然而,将模糊限制增加到14将产生严重偏差的结果

      因此,这些功能都不会有助于产生您所寻求的结果。

      以下是我的建议:

      1. 您可以实现一个分析下划线的分析器,类似于this。生成的标记将为['this', 'is', 'something', 'i', 'want'],可正确匹配样本案例

      2. 或者,如果您只想要一个以指定文字开头的文档,则可以使用phrase prefix查询而不是fuzzy like this。文件here