首页 > 代码库 > 空搜索(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