在Elasticsearch中,为什么我的查询字符串过度匹配?

时间:2019-03-04 23:22:25

标签: elasticsearch

我要插入数据如下:

PUT my_index2/doc/1
{
  "key": "party",
  "str_val": "THE TWITTER INC"
}

PUT my_index2/doc/2
{
  "key": "party",
  "str_val": "twitter inc"
}

此查询:

POST my_index2/_search
{
  "query": {
    "query_string": {
      "default_field": "str_val",
      "query": "*twitter*"
    }
  }
}

正确返回两个结果。如果我将查询略微更改为:

POST my_index2/_search
{
  "query": {
    "query_string": {
      "default_field": "str_val",
      "query": "*the twitter*"
    }
  }
}

我希望只有一个结果,因为*the twitter*应该只匹配“ THE TWITTER INC”,而不匹配“ twitter inc”。但是返回了两个结果。

为什么我的搜索返回的匹配太多?

1 个答案:

答案 0 :(得分:2)

这是因为query_stringdefault_operatorOR。您始终可以使用explain:true来知道如何返回结果。如下所示:

POST my_index2/_search
{
  "query": {
    "query_string": {
      "default_field": "str_val",
      "query": "*the twitter*"
    }
  },
  "explain": true
}

对于您的情况,您需要明确提及AND以仅返回两个词都匹配的文档,即thetwitter

 POST my_index2/_search
    {
      "query": {
        "query_string": {
          "default_field": "str_val",
          "query": "*the twitter*",
           "default_operator": "AND"
        }
      }
    }