API 可以验证一条查询语句是否合法。

以上请求的返回值告诉我们这条语句是非法的:

  1. {
  2. "valid" : false,
  3. "_shards" : {
  4. "total" : 1,
  5. "successful" : 1,
  6. "failed" : 0
  7. }
  8. }

<1> explain 参数可以提供语句错误的更多详情。

很显然,我们把 query 语句的 match 与字段名位置弄反了:

  1. "valid" : false,
  2. "_shards" : { ... },
  3. "explanations" : [ {
  4. "valid" : false,
  5. "error" : "org.elasticsearch.index.query.QueryParsingException:
  6. [gb] No query registered for [tweet]"
  7. } ]
  8. }

explanation 会为每一个索引返回一段描述,因为每个索引会有不同的映射关系和分析器:

  1. {
  2. "_shards" : { ... },
  3. "explanations" : [ {
  4. "index" : "us",
  5. "valid" : true,
  6. "explanation" : "tweet:really tweet:powerful"
  7. }, {
  8. "valid" : true,
  9. "explanation" : "tweet:really tweet:power"
  10. } ]

从返回的 explanation 你会看到 match 是如何为查询字符串 "really powerful" 进行查询的,
首先,它被拆分成两个独立的词分别在 tweet 字段中进行查询。