我正在尝试使用_validate API,它拒绝将无效查询作为发送到_search API时提交的确切正文。 _validate请求体是否需要以某种方式有所不同?
对于“解释”结果,我得到的结论是“没有为[字段]注册查询"。删除返回字段列表,它抱怨过滤器。
以下是一个例子:
curl -s -XGET 'http://localhost:9200/4af9aae4-7ec1-458d-8c50-692ddb0f2c6d/msg,file,file-info/_validate/query?explain=true' -d '{"fields":["id"],"filter":{"not":{"and":[{"numeric_range":{"msg-size":{"gte":1000}}},{"query":{"prefix":{"content-type.verbatim":"application/"}}}]}}}' | python -mjson.tool
{
"_shards": {
"failed": 0,
"successful": 1,
"total": 1
},
"explanations": [
{
"error": "org.elasticsearch.index.query.QueryParsingException: [4af9aae4-7ec1-458d-8c50-692ddb0f2c6d-0] request does not support [fields]",
"index": "4af9aae4-7ec1-458d-8c50-692ddb0f2c6d-0",
"valid": false
}
],
"valid": false
}
删除字段,报告查询不支持过滤器
curl -s -XGET 'http://localhost:9200/4af9aae4-7ec1-458d-8c50-692ddb0f2c6d/msg,file,file-info/_validate/query?explain=true' -d '{"filter":{"not":{"and":[{"numeric_range":{"msg-size":{"gte":1000}}},{"query":{"prefix":{"content-type.verbatim":"application/"}}}]}}}' | python -mjson.tool
{
"_shards": {
"failed": 0,
"successful": 1,
"total": 1
},
"explanations": [
{
"error": "org.elasticsearch.index.query.QueryParsingException: [4af9aae4-7ec1-458d-8c50-692ddb0f2c6d-0] request does not support [filter]",
"index": "4af9aae4-7ec1-458d-8c50-692ddb0f2c6d-0",
"valid": false
}
],
"valid": false
}
有些查询可以使用验证API,因此它不是一个全面的失败。
curl -s -XGET 'http://localhost:9200/4af9aae4-7ec1-458d-8c50-692ddb0f2c6d/msg,file,file-info/_validate/query?explain=true' -d '{"query": { "match": { "file-name": "PLEASE READ: something not important" }}}' | python -mjson.tool
{
"_shards": {
"failed": 0,
"successful": 1,
"total": 1
},
"explanations": [
{
"explanation": "filtered(file-name:PLEASE READ: something not important)->cache(_type:file _type:file-info _type:msg)",
"index": "4af9aae4-7ec1-458d-8c50-692ddb0f2c6d-0",
"valid": true
}
],
"valid": true
}
我的理解是_validate运行与实际执行查询时相同的语法检查等,所以我不确定发生了什么。
其他细节:
Elasticsearch v 1.2.1 Ubuntu Linux Precise 64
答案 0 :(得分:2)
您需要将查询包装在查询键中以使用_validate端点 - 这就是为什么您的上一个示例有效,但前两个示例没有。
请注意
正文中发送的查询必须嵌套在查询键中,同样 搜索API工作[1.0.0.RC1]在1.0.0.RC1中添加。查询是 以前是顶级对象..
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-validate.html