match_phrase查询的模糊行为

时间:2016-05-16 19:52:54

标签: elasticsearch elasticsearch-2.0

几天前我遇到了这个“问题”。我在索引中运行了match_phrase查询。一切都如预期,直到我用多个单词名词进行相同的搜索(在我使用单个单词名词之前,例如:大学)。我做了一个拼写错误,搜索没有工作(找不到),如果我删除了一个单词(让我们说拼写正确的单词),搜索工作(找到)。

这里有我做的例子:

设置

PUT index1
{
  "mappings": {
    "myType": {
      "properties": {
        "field1": {
          "type": "string",
          "analyzer": "standard"
        }
      }
    }
  }
}

POST index1/myType/1
{
  "field1": "Commercial Banks"
}

案例1:单名词搜索

GET index1/myType/_search
{
  "query": {
    "match": {
      "field1": {
        "type": "phrase", 
        "query": "comersial",
        "fuzziness": "AUTO"
      }
    }
  }
}

{
  "took": 16,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0.19178303,
    "hits": [
      {
        "_index": "index1",
        "_type": "myType",
        "_id": "1",
        "_score": 0.19178303,
        "_source": {
          "field1": "Commercial Banks"
        }
      }
    ]
  }
}

案例2:多名词搜索

GET index1/myType/_search
{
  "query": {
    "match": {
      "field1": {
        "type": "phrase", 
        "query": "comersial banks",
        "fuzziness": "AUTO"
      }
    }
  }
}

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 0,
    "max_score": null,
    "hits": []
  }
}

那么,在第二种情况下,为什么在执行match_phrase查询时我找不到文档?有什么我想念的吗? 这些结果只是让我怀疑我所知道的。 我是否错误地使用模糊搜索?我不确定这是不是问题,或者我不理解这种行为。

非常感谢您提前阅读我的问题。我希望你能帮助我。

1 个答案:

答案 0 :(得分:2)

短语查询不支持模糊。

目前,ES对此保持沉默,即它允许您指定参数,但不会警告您不支持该参数。存在pull request (#18322)(与issue #7764相关)可以解决此问题。合并到ES 5后,此查询将出错。

在5.0的breaking changes文档中,我们可以看到这不会得到支持:

  

如果multi_matchfuzzinesscross_fields类型使用phrase,则phrase_prefix查询将失败。对于这些类型的multi_match之前,此参数未被记录并被静默忽略。