elasticsearch权威指南 学习22

elasticsearch权威指南-- getting start 第七章 Full Body Search(6)

Validating Queries

queries会随着业务的增长变的复杂,特别是当我们当我们把analyzers和field mapping结合在一起的时候,同时也会使json结构的查询变得很难懂,所以validate-query API就是用来检查我们的查询是否正确。

curl -XPOST 10.0.0.164:9200/stats/_validate/query -d’
{
     “query”: {
          “filtered”: {
               “filter”: {
                    “exists”: {
                         “field”: “title”
                    }
               }
           }
     }
}
响应:
{

“valid”: true,

  • “_shards”: {
    • “total”: 1,
    • “successful”: 1,
    • “failed”: 0

    }

}
这个响应告诉我们这个查询是否正确。
同样我们也可以通过一个explain参数看出具体的错误:
curl -XPOST 10.0.0.164:9200/stats/_validate/query?explain -d’
{
     “query”: {
          “filtered”: {
               “exists”: {
                    “field”: “title”
               }
          }
     }
}
响应:

{

  • “valid”: false,
  • “_shards”: {
    • “total”: 1,
    • “successful”: 1,
    • “failed”: 0

    },

  • “explanations”: [
    • {
      • “index”: “stats”,
      • “valid”: false,
      • “error”: “org.elasticsearch.index.query.QueryParsingException: [stats] [filtered] query does not support [exists]“

      }

    ]

}
我们可以通过error字段看到具体的错误。
Understanding Queries

使用explain参数可以让我们看到一个正常人能看懂的错误描述,这对于排查我们的query很有帮助。

官网给的一个例子:

GET /_validate/query?explain
{
     “query”: {
          “match” : {
               “tweet” : “really powerful”
          }
     }
}
响应:
{
     “valid” : true,
     “_shards” : { … },
     “explanations” : [ {
     "index" : "us",
     "valid" : true,
     "explanation" : "tweet:really tweet:powerful"
     }, {
     "index" : "gb",
     "valid" : true,
     "explanation" : "tweet:realli tweet:power"
     } ]
}

响应中我们可以看到每一个index的响应情况,因为每一个索引可能有不同的mapping或者analyzers。

通过上面那个返回结果我们也可以看到各个索引是如何对查询字符串进行分词的。比如对really,powerful是如何进行匹配的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>