查询可以变得非常的复杂,尤其和不同的分析器与不同的字段映射结合时,理解起来就有点困难了。不过 validate-query API 可以用来验证查询是否合法。

1.不合法的查询(索引不存在):

GET /test/_validate/query?explain

请求体: 

{
    "query": {
        "match": {
            "title": "first"
        }
    }
}

 响应体:

{
    "error": {
        "root_cause": [
            {
                "type": "index_not_found_exception",
                "reason": "no such index [test]",
                "resource.type": "index_or_alias",
                "resource.id": "test",
                "index_uuid": "_na_",
                "index": "test"
            }
        ],
        "type": "index_not_found_exception",
        "reason": "no such index [test]",
        "resource.type": "index_or_alias",
        "resource.id": "test",
        "index_uuid": "_na_",
        "index": "test"
    },
    "status": 404
}

【Elasticsearch 权威指南学习笔记】验证查询_字段

2.合法的查询

GET /website/_validate/query?explain

请求体:

{
    "query": {
        "match": {
            "title": "first"
        }
    }
}

 响应体:

{
    "_shards": {
        "total": 1,
        "successful": 1,
        "failed": 0
    },
    "valid": true,
    "explanations": [
        {
            "index": "website",
            "valid": true,
            "explanation": "title:first"
        }
    ]
}

【Elasticsearch 权威指南学习笔记】验证查询_mysql_02