在弹性搜索中,q = joh *返回一个正确的集合,但是匹配的jSON:joh *不是

时间:2015-11-26 14:14:32

标签: elasticsearch

当我拨打此网址时:

http://192.168.x.x:9200/identities/work/_search?q=joh*

ES正在返回有限的(5)一组匹配,从人名John和Johnny等的一些索引开始。这似乎是正确的结果。

但是当我将这个JSON发送给ES时:

{
  "query": {
    "match": {
      "_all": "joh*"
    }
  }
}

我得到的结果甚至无法用逻辑解释。看起来很随机,也有很多索引(数百,不是很多johns和johnny的;)

这不等同于上面提到的网址吗?我做错了什么?

1 个答案:

答案 0 :(得分:0)

当您调用以下网址时,ES隐含的是创建query_string查询而不是match查询

http://192.168.x.x:9200/identities/work/_search?q=joh*

因此等效的JSON查询将是:

{
  "query": {
    "query_string": {
      "query": "joh*"
    }
  }
}

此外,match查询不像joh*那样处理通配符,*被视为真实字符,而不是通配符。