搜索请求实体(Request Body Search)
Request Body Search
可以使用搜索DSL来执行搜索请求,再其请求体中包括Query DSL。这是一个例子:
GET /twitter/tweet/_search { "query" : { "term" : { "user" : "kimchy" } } }
这里是一个示例响应:
{ "took": 1, "timed_out": false, "_shards":{ "total" : 1, "successful" : 1, "failed" : 0 }, "hits":{ "total" : 1, "max_score": 1.3862944, "hits" : [ { "_index" : "twitter", "_type" : "tweet", "_id" : "0", "_score": 1.3862944, "_source" : { "user" : "kimchy", "message": "trying out Elasticsearch", "date" : "2009-11-15T14:12:12", "likes" : 0 } } ] } }
Parameters
|
搜索超时,限制在指定时间值内执行的搜索请求,并在到期时积累的命中保释。默认为无超时。请参阅“Time unitsedit”一节。 |
|
从某个偏移量中检索匹配。默认为0。 |
|
要返回的命中数。默认为10。如果您不关心返回的命中,但仅关于匹配and/or聚合的数量,将值设置为0将有助于提高性能。 |
|
要执行的搜索操作的类型。可以是dfs_query_then_fetch或query_then_fetch。默认为query_then_fetch。查看搜索类型了解更多。 |
|
设置为true或false以启用或禁用大小为0的请求的搜索结果的缓存,即聚合和建议(不返回顶部匹配)。请参阅Shard请求缓存。 |
|
每个分片收集的最大文档数量,到达时查询执行将提前终止。如果设置,响应将有一个布尔字段terminate_early来指示查询执行是否实际已终止。默认没有terminate_after。 |
在上述中,search_type和request_cache必须作为查询字符串参数传递。搜索请求的其余部分应在主体本身内传递。请求体内容也可以作为名为source的REST参数传递。
HTTP GET和HTTP POST都可以通过请求体来执行搜索。由于并非所有客户端都支持请求体GET,POST也是允许的。
Fast check for any matching docs(快速检查任何匹配的文档)
如果我们只想知道是否有匹配特定查询的文档,我们可以将大小设置为0,表示我们对搜索结果不感兴趣。此外,我们可以将terminate_after设置为1,以指示每当找到第一个匹配文档(每个分片)时,查询执行可以被终止。
GET /_search?q=message:elasticsearch&size=0&terminate_after=1
响应将不会包含任何匹配,因为大小设置为0。hits.total将等于0,表示没有匹配的文档,或大于0表示在提前终止时至少有相同数量的匹配查询文档。此外,如果查询提前终止,则在响应中将terminate_early标志设置为true。
{ "took": 3, "timed_out": false, "terminated_early": true, "_shards": { "total": 1, "successful": 1, "failed": 0 }, "hits": { "total": 1, "max_score": 0.0, "hits": [] } }
原文地址:https://www.elastic.co/guide/en/elasticsearch/reference/5.0/search-request-body.html