首页 > 代码库 > 空搜索(the empty search)
空搜索(the empty search)
最基础的search api格式是empty search,这个search不指定任何的查询条件,就是返回cluster中的所有的index的document:
GET /_search
相应的消息如下:
{
"hits":{
"total": 14,
"hits":[
{
"_index": "us",
"_type": "tweet",
"_id": "7",
"_score": 1,
"_source":{
"date": "2014-09-17",
"name": "John Smith",
"tweet": "The Query DSL is really powerful and flexible",
"user_id":2
}
},
...9 RESULTS REMOVED ...
],
"max_score": 1
},
"took": 4,
"_shards":{
"failed": 0,
"successful": 10,
"total": 10
},
"timed_out": false
}
hits
响应体中最重要的就是hits了,他包含了查询出来的总的数据量,并且hits中包含了结果的前十条。
hits中每条结果都包含了document的_index,_type,_id,还有_source,也就是说结果直接展示了这个document,不像其他的搜索引擎仅仅返回来了ID,要你再次进行查询。
ES元素还有个叫_score的字段,这个是关系度的分数,这个表示了对搜索关键字的匹配度。默认情况下,返回的数据是最高分在前的,也就是说对_score进行将需排列。空搜索的情况下,_score的值都是1。
这个max_score的值就是查询条件下_score的值最高的一个document。
took
这个took的值表明了执行这个搜索花费的时间(毫秒)
shards
这个_shards告诉我们,搜索中被调用的总的shard的数量,还有成功的数量,以及失败的数量。我们总是不希望执行失败的,但是这个情况是存在的。如果经历了一个大的灾难导致primary shard以及对应的replica shard都丢失了,就会没有shard相应请求了,这个情况下,ES就会报告shard failed,但是会从其他的shard继续返回数据。
timeout
这个值表明请求是否是超时的,默认,搜索是没有超时时间的,如果你比较重视应答时间,你可以指定timeout为10或10ms(表示10毫秒),或者1s(1秒):
GET /_search?timeout=10ms
ES会在超时之前返回其管理的shard中的符合条件的结果。
timeout并不是cluster终止了
要注意的是这个timeout不是终止了查询,他仅仅是告诉相应节点,截至到目前搜索到的结果,并且关闭了链接。虽然结果已经返回,但是在后台,或许还有其他的进程在进行着查询。
使用timeout是因为他对你的SLA来讲是很重要的,并不是因为你想要终止长时间的查询。
原文:http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/empty-search.html