73 lines
2.4 KiB
Plaintext
73 lines
2.4 KiB
Plaintext
[[search-validate]]
|
|
== Validate API
|
|
|
|
The validate API allows a user to validate a potentially expensive query
|
|
without executing it. The following example shows how it can be used:
|
|
|
|
[source,js]
|
|
--------------------------------------------------
|
|
curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{
|
|
"user" : "kimchy",
|
|
"post_date" : "2009-11-15T14:12:12",
|
|
"message" : "trying out Elasticsearch"
|
|
}'
|
|
--------------------------------------------------
|
|
|
|
When the query is valid, the response contains `valid:true`:
|
|
|
|
[source,js]
|
|
--------------------------------------------------
|
|
curl -XGET 'http://localhost:9200/twitter/_validate/query?q=user:foo'
|
|
{"valid":true,"_shards":{"total":1,"successful":1,"failed":0}}
|
|
--------------------------------------------------
|
|
|
|
Or, with a request body:
|
|
|
|
[source,js]
|
|
--------------------------------------------------
|
|
curl -XGET 'http://localhost:9200/twitter/tweet/_validate/query' -d '{
|
|
"filtered" : {
|
|
"query" : {
|
|
"query_string" : {
|
|
"query" : "*:*"
|
|
}
|
|
},
|
|
"post_filter" : {
|
|
"term" : { "user" : "kimchy" }
|
|
}
|
|
}
|
|
}'
|
|
{"valid":true,"_shards":{"total":1,"successful":1,"failed":0}}
|
|
--------------------------------------------------
|
|
|
|
If the query is invalid, `valid` will be `false`. Here the query is
|
|
invalid because Elasticsearch knows the post_date field should be a date
|
|
due to dynamic mapping, and 'foo' does not correctly parse into a date:
|
|
|
|
[source,js]
|
|
--------------------------------------------------
|
|
curl -XGET 'http://localhost:9200/twitter/tweet/_validate/query?q=post_date:foo'
|
|
{"valid":false,"_shards":{"total":1,"successful":1,"failed":0}}
|
|
--------------------------------------------------
|
|
|
|
An `explain` parameter can be specified to get more detailed information
|
|
about why a query failed:
|
|
|
|
[source,js]
|
|
--------------------------------------------------
|
|
curl -XGET 'http://localhost:9200/twitter/tweet/_validate/query?q=post_date:foo&pretty=true&explain=true'
|
|
{
|
|
"valid" : false,
|
|
"_shards" : {
|
|
"total" : 1,
|
|
"successful" : 1,
|
|
"failed" : 0
|
|
},
|
|
"explanations" : [ {
|
|
"index" : "twitter",
|
|
"valid" : false,
|
|
"error" : "org.elasticsearch.index.query.QueryParsingException: [twitter] Failed to parse; org.elasticsearch.ElasticsearchParseException: failed to parse date field [foo], tried both date format [dateOptionalTime], and timestamp number; java.lang.IllegalArgumentException: Invalid format: \"foo\""
|
|
} ]
|
|
}
|
|
--------------------------------------------------
|