Request Body Search(使用请求体进行搜索)
搜索请求能够通过DSL来执行,在请求体中包含这个查询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
}
}
]
}
}
参数
参数名 | 描述 |
---|---|
timeout |
搜索超时,限制在指定时间值内执行的搜索请求,并在到期时收集的命中文档。默认为无超时。请参阅时间单位一节。 |
from |
从某个偏移量中检索匹配。默认为0。 |
size |
要返回的命中数。默认为10. 如果您不关心获取到的一些返回内容,但仅关注匹配或聚合的数量,将值设置为0 将有助于提高性能。 |
search_type |
要执行的搜索操作的类型。可以是dfs_query_then_fetch 或query_then_fetch 。默认为query_then_fetch 。查看搜索类型了解更多。 |
request_cache |
设置为true 或false 以启用或禁用在搜索请求size 为0 时的结果缓存,即聚合和建议(不返回顶部hits 内容)。请参阅Shard请求缓存。 |
terminate_after |
每个分片收集的最大文档数量,达到后查询执行将提前终止。如果设置,响应将有一个布尔字段terminate_early 来指示查询执行是否实际已终止。默认为terminate_after 。 |
batched_reduce_size |
分片结果的数量应该在协调节点上一次性减少。如果请求中潜在的分片数量可能较大,则该值应用作保护机制,以减少每个搜索请求的内存开销。 |
在上述中,search_type
和request_cache
必须作为查询字符串参数传递。搜索请求的其余部分应在主体本身内传递。请求体内容也可以作为名为source
的REST参数传递。
HTTP GET
和HTTP POST
都可以用来执行与body
的搜索。由于并非所有客户端都支持GET
,所以POST
也是允许的。
速检查任何匹配的文档
如果我们只想知道是否有匹配特定查询的文档,我们可以将大小设置为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": []
}
}