多文档检索(retrieving multiple documents)

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  
    }
  ]
}

标记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

时间: 2024-09-30 00:16:04

多文档检索(retrieving multiple documents)的相关文章

多文档上传(upload multiple documents)功能不能使用怎么办?

问题描述: 在SharePoint 2010的文档库里选择documents标签,然后选择upload document下拉菜单,你会发现upload multiple documents那个按钮是灰色的,不能使用. 当你把鼠标放到那个按钮上悬停,会出现一条提示信息说: This control is currently disabled. You might not have the right permission level to use this, you might need to s

[SharePoint 2010] "Upload Multiple Documents" disable

[SharePoint 2010] "Upload Multiple Documents" disable 在上传文件的功能有支持多档与单档上传,如果多文件上传功能呈现反灰色无法使用如下图 : 造成原因有可能 ~~ 使用电脑没有安装 Office 检查浏览器的附加组件ActiveX==>"STSUpld UploadCtl Class"有没有被启用. ???????? ??????? 图片是IE的画面,如果是其他家浏览器就要看有没有支持. 原文:大专栏  [S

Elasticsearch NEST – Examples for mapping between Query and C#

Elasticsearch NEST – Examples for mapping between Query and C# During my training with Elasticsearch I would like to map a query with GET/POST method to C# syntax of NEST. It's very helpful for me to see how NEST composes its internal queries and sen

MongoDB - MongoDB CRUD Operations, Update Documents

Update Methods MongoDB provides the following methods for updating documents in a collection: Method Description  db.collection.updateOne() Updates at most a single document that match a specified filter even though multiple documents may match the s

数据挖掘方面重要会议的最佳paper集合

数据挖掘方面重要会议的最佳paper集合,后续将陆续分析一下内容: 主要有KDD.SIGMOD.VLDB.ICML.SIGIR KDD (Data Mining) 2013 Simple and Deterministic Matrix Sketching Edo Liberty, Yahoo! Research 2012 Searching and Mining Trillions of Time Series Subsequences under Dynamic Time Warping T

SolrCloud部署和使用手册

SolrCloud部署和使用手册             文档修订摘要   日期 版本 描述 著者 审阅者 2013-12-23 0.1 将txt简易模板的文档提取到word模板. 张乐雷 2013-12-23 0.2 创建collection的url中制定了createNodeSet 张乐雷 2013-12-29 0.3 1.  solr.war直接使用solr发布的文件,不在进行修改. 2.  日志jar和配置放置到tomcat/lib目录 3.  新增维护document的命令,提供了不同

top-100-of-the-best-useful-opensource-applications/

top-100-of-the-best-useful-opensource-applications/ http://www.ubuntulinuxhelp.com/top-100-of-the-best-useful-opensource-applications/ The following is a list of about 100 of the best OpenSource Applications, that actually help make Linux more usable

用bootstrap兼容ie各大浏览器的解决方法

以bootstrap为框架常常会出现不兼容ie各大浏览器的问题,用以下代码基本可以解决,一般在<head></head>加入以下代码后,网页可能还一些比较不美观,再写一点css hack就可以了,如果加入以下代码网页还是特别乱,请检查一下你的css和js的文件顺序,有加载顺序的... <!--[if lte IE 6]> <link rel="stylesheet" type="text/css" href="st

node12---mongodb

一.传统数据库技术回顾 数据库就是存储数据的,那么存储数据就用txt就行了啊,为什么要有数据库? 理由之1: 数据库有行.列的概念,数据有关系,数据不是散的. 老牌数据库,比如MySQL.SQL Server.Oracle.Access.这些数据库,我们管他们叫做结构型数据库.为什么?因为每个表中,都有明确的字段,每行记录,都有这些字段.不能有的行有,有的行没有. 理由二:数据库能够提供非常方便的接口,让增删改查操作变得简单 我们的老牌数据库,都无一例外的使用SQL语言,管理数据库. SQL就是