码迷,mamicode.com
首页 > 其他好文 > 详细

多文档检索(retrieving multiple documents)

时间:2014-05-19 06:59:06      阅读:450      评论:0      收藏:0      [点我收藏+]

标签:blog   class   c   ext   http   int   

ES已经够快了,但是还能更快。把若干的请求合并到一个,避免了单个的线程请求的网络压力,ES能运行的更快。如果你知道你要检索的很多的document,使用multi-get或mget API把请求放到一个请求里要比逐次的检索效率要更高。

mget API期望得到一个docs的数组作为参数,每个参数元素指定你想要检索的_index,_type和_id这三个document的元数据,你也能指定_source参数,如果你仅仅要检索部分的field:

GET /_mget
{
   
"docs":[
     
{
         
"_index":"website",
         
"_type":  "blog",
         
"_id":    2
     
},
     
{
         
"_index":"website",
         
"_type":  "pageviews",
         
"_id":    1,
         
"_source":"views"
     
}
   
]
}

响应体也包含了docs数组,并且相对应包含了document的相应信息。每一个相应和执行单个的请求的相应是一样的:

{
   
"docs":[
     
{
         
"_index":   "website",
         
"_id":      "2",
         
"_type":    "blog",
         
"found":    true,
         
"_source":{
           
"text":  "This is a piece of cake...",
           
"title":"My first external blog entry"
         
},
         
"_version":10
     
},
     
{
         
"_index":   "website",
         
"_id":      "1",
         
"_type":    "pageviews",
         
"found":    true,
         
"_version":2,
         
"_source":{
           
"views":2
         
}
     
}
   
]
}

如果你要检索的document在同一个_index(也可能在同一个_type),然后你就可以在URL中指定默认的/_index或者/_index/_type,当然你也可以在docs的集合中的单个个体的请求中重写URL中的_index和_type:

GET /website/blog/_mget
{
   
"docs":[
     
{"_id":2},
     
{"_type":"pageviews","_id":   1}
   
]
}

 事实上,如果所有的document有相同的_index和_type。你就可以仅仅传递ids的数组就行了:

GET /website/blog/_mget
{
   
"ids":["2","1"]
}

 要注意的是,有可能请求的第二个document不存在。我们指定type是blog。但是document是1的type是pageviews。这个不存在的document将会在 相应体中体现:

{
 
"docs":[
   
{
     
"_index":   "website",
     
"_type":    "blog",
     
"_id":      "2",
     
"_version":10,
     
"found":    true,
     
"_source":{
       
"title":   "My first external blog entry",
       
"text":    "This is a piece of cake..."
     
}
   
},
   
{
     
"_index":   "website",
     
"_type":    "blog",
     
"_id":      "1",
     
"found":    false  bubuko.com,布布扣
   
}
 
]
}

 标记1表示这个document没有找到。

 第二个document没有找到并不影响第一个被检索的document,每个docs中的doc都是独立的。

上面这个检索虽然一个document没有找到,但是HTTP状态码是200,事实上,即使所有的document都没有找到,HTTP的状态码也是200。这是因为mget请求的本身是完整的,成功的。要验证document是否是成功的,可以对单个的document的found这个标记进行验证。

 

 

原文:http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_retrieving_multiple_documents.html

多文档检索(retrieving multiple documents),布布扣,bubuko.com

多文档检索(retrieving multiple documents)

标签:blog   class   c   ext   http   int   

原文地址:http://www.cnblogs.com/blog1350995917/p/3732454.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!