Validate API
validate API 允许用户验证一个可能复杂(expensive)的查询而不执行它。 我们将使用以下测试数据来解释_validate:
PUT twitter/tweet/_bulk?refresh
{"index":{"_id":1}}
{"user" : "kimchy", "post_date" : "2009-11-15T14:12:12", "message" : "trying out Elasticsearch"}
{"index":{"_id":2}}
{"user" : "kimchi", "post_date" : "2009-11-15T14:12:13", "message" : "My username is similar to @kimchy!"}当发送一个有效查询时:
GET twitter/_validate/query?q=user:foo响应包含有效:true
{"valid":true,"_shards":{"total":1,"successful":1,"failed":0}}Request Parameters
当执行查询使用查询参数q时,传递的查询是使用Lucene查询解析器的查询字符串。 还有其他可以传递的参数:
名称
描述
'df'
在查询中未定义字段前缀时使用的默认字段。
'analyzer'
分析查询字符串时使用的分析器名称。
'default_operator'
要使用的默认运算符,可以是AND或OR。 默认为OR。
'lenient'
如果设置为true将导致基于格式的失败(例如向数字字段提供文本)被忽略。 默认为false。
'lowercase_expanded_terms'
术语是否自动小写,默认为true。
'analyze_wildcard'
是否分析通配符和前缀查询。 默认为false。
查询也可以在请求主体中发送:
注意
在正文中发送的查询必须嵌套在查询键中,与Search API相同。
如果查询无效,则返回信息中valid将为false。 在这里,查询无效,因为 Elasticsearch知道post_date字段应该是动态映射的日期,foo无法正确解析为日期:
可以指定explain参数以获取有关查询失败原因的更详细信息:
响应是:
当查询有效时,explanations默认为该查询的字符串表示形式。 将 rewrite设置为true时,explanations将更详细地显示将要执行的实际Lucene查询。
模糊查询(Fuzzy Queries):
响应:
相似度查询(More Like This):
响应:
警告
请求只在单个分片上执行,这是随机选择的。 查询的详细解释可以取决于哪个分片被命中,并且因此可以从一个请求到另一个请求而变化。
Last updated
Was this helpful?