ElasticSearch - 将查询匹配与通配符相结合

时间:2015-03-30 02:24:41

标签: json elasticsearch wildcard

我仍然对ElasticSearch很新,但我现在正试图解决为什么我也无法将通配符查询与匹配混合起来。

以此JSON主体为例

{
    "size":"10",
    "from":0,
    "index":"example",
    "type":"logs",
    "body":{
        "query":{
            "match":{
                "account":"1234"
            },
            "wildcard":{
                "_all":"*test*"
            }
        },
        "sort":{
            "timestamp":{
                "order":"desc"
            }
        }
    }
}

返回错误" SearchPhaseExecutionException [无法执行阶段[查询],所有分片都失败; " (完全转储:http://pastebin.com/uJJZm8fQ

但是,如果我从请求正文中删除通配符或匹配键 - 它会按预期返回结果。 我一直在阅读文档,但我根本找不到任何相关内容。 起初我认为它与_all参数有关,但即使我明确指定了一个键,也会出现相同的结果。

在我假设我应该使用' bool'运算符,或类似的东西混合我的查询类型,有什么解释吗?

1 个答案:

答案 0 :(得分:1)

例外说它不理解字段“索引”。查询Elasticsearch时,请在URL中包含索引名称和类型。 match查询中没有通配符搜索。 query_string查询中存在通配符搜索。

match

您的查询应该是这样的
POST /example/logs/_search
{
  "size": 10,
  "from": 0,
  "query" : {
    "match": {
      "account": "1234"
    }
  },
  "sort": {
    "timestamp" : {
      "order": "desc"
  }
} 

或类似query_string

POST /example/logs/_search
{
  "size": 10,
  "from": 0,
  "query" : {
    "query_string": {
      "default_field": "account",
      "query": "*1234*"
    }
  },
  "sort": {
    "timestamp" : {
      "order": "desc"
  }
}

编辑:添加wildcard查询的示例:

POST /example/logs/_search
{
  "size": 10,
  "from": 0,
  "query" : {
    "wildcard": "*test*"
  },
  "sort": {
    "timestamp" : {
      "order": "desc"
  }
}