gpt4 book ai didi

Elasticsearch _validate API 使 _search API 允许的查询失败

转载 作者:行者123 更新时间:2023-12-02 23:04:13 32 4
gpt4 key购买 nike

我正在尝试使用 _validate API,它拒绝作为无效查询,其中提交的确切正文在发送到 _search API 时有效。 _validate 请求正文是否需要以某种方式有所不同?

对于“解释”结果,我得到诸如“没有为 [fields] 注册查询”之类的信息。删除返回字段列表时,它会提示过滤器。

这是一个例子:

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
}

一些查询确实可以使用 validate 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 精确 64

最佳答案

您需要将查询包装在查询键中以使用 _validate 端点 - 这就是为什么您的最后一个示例有效但您的前两个示例无效。

Note

The query being sent in the body must be nested in a query key, same as the search api works [1.0.0.RC1] Added in 1.0.0.RC1. The query was previously the top-level object..



http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-validate.html

关于Elasticsearch _validate API 使 _search API 允许的查询失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24458742/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com