2、GET API

get API 可以通过文档id从索引中获取json格式的文档,以下示例从twitter索引中获取type_doc,id值为0为的JSON文档:

GET twitter/_doc/0

返回结果:

{
    "_index" : "twitter",
    "_type" : "_doc",
    "_id" : "0",
    "_version" : 1,
    "_seq_no" : 10,
    "_primary_term" : 1,
    "found": true,
    "_source" : {
        "user" : "kimchy",
        "date" : "2009-11-15T14:12:12",
        "likes": 0,
        "message" : "trying out Elasticsearch"
    }
}

上述返回结果包含文档的_index, _type, _id 和_version 字段。如果 found 字段为ture, 就会返回_source字段,即文档内容。

这个API 可以使用HEAD方法查询文档是否存在:

HEAD twitter/_doc/0

2.1 实时(Realtime)

get API 默认是实时的,不会受索引刷新率影响(即数据从索引到搜索时可见的那个延迟时间)。如果文档已更新但还没刷新,get API将在适当位置发出刷新调用,这还将使上次刷新后更改的其他文档可见。为了禁用get API的实时性,你可以设置 realtime=false

2.2 文档过滤(Source filtering)

get操作默认会返回_source字段的内容,如果你不想返回该字段,可以使用stored_fields_source参数设置为false

GET twitter/_doc/0?_source=false

如果你仅仅需要返回一个或两个字段,你可以使用_source_include_source_exclude参数来包含或筛选你需要的字段。这对于大型文档尤其有用,因为这样可以降低网络开销。两个参数都采用逗号分隔的字段列表或通配符表达式:

GET twitter/_doc/0?_source_includes=*.id&_source_excludes=entities

你也可以使用_source参数指定要返回的字段:

GET twitter/_doc/0?_source=*.id,retweeted

2.3 已保存的字段(Stored Fields)

mappings中的store=false 是为了减少存储的字段(如果要使用store_fields,你应该要禁用_source,即不保存源文档,如果你开启了_source那么stored_fileds就没什么用途了,stored_fileds就像sphinx的属性一样用于搜索,而_source就是数据库的数据,一般为了节省内存都不会存储所有字段,只存储需要搜索的字段,或者只存储id)。

get操作指定一组stored_fields用于获取已存储的字段(默认不会存储字段值,但可以搜索出文档id,你需要在mappings中指定store=true)。如果请求字段没有被存储(即字段的store=false),他们将会被忽略。例如,考虑如下的mappings:

PUT twitter
{
   "mappings": {
      "_doc": {
         "properties": {
            "counter": {
               "type": "integer",
               "store": false
            },
            "tags": {
               "type": "keyword",
               "store": true
            }
         }
      }
   }
}

现在我们添加一个文档

PUT twitter/_doc/1
{
    "counter" : 1,
    "tags" : ["red"]
}

然后访问他:

GET twitter/_doc/1?stored_fields=tags,counter

上述操作的结果:

{
   "_index": "twitter",
   "_type": "_doc",
   "_id": "1",
   "_version": 1,
   "_seq_no" : 22,
   "_primary_term" : 1,
   "found": true,
   "fields": {
      "tags": [
         "red"
      ]
   }
}

已存储的字段值会以fields数组形式返回。因为counter字段的storedfalse,所以GET时会被忽略。

也可以用_routing检索元数据字段:

PUT twitter/_doc/2?routing=user1
{
    "counter" : 1,
    "tags" : ["white"]
}
GET twitter/_doc/2?routing=user1&stored_fields=tags,counter

响应结果:

{
   "_index": "twitter",
   "_type": "_doc",
   "_id": "2",
   "_version": 1,
   "_seq_no" : 13,
   "_primary_term" : 1,
   "_routing": "user1",
   "found": true,
   "fields": {
      "tags": [
         "white"
      ]
   }
}

使用stored_field选项,仅仅叶子(即基础数据类型)字段值会被返回,对象类型的字段值不能返回,当要求返回对象类型的字段值会报错。

2.4 直接获取_source(Getting the _source directly)

/{index}/{type}/{id}/_source API可以仅获取文档的_source字段,而不会获取其他额外的信息,如:

GET twitter/_doc/1/_source

你可以指定需要返回的字段

GET twitter/_doc/1/_source?_source_includes=*.id&_source_excludes=entities

你也可以用_source_include_source_exclude字段控制_source返回哪些字段,不返回哪些字段:

 GET twitter/tweet/1/_source?_source_include=*.id&_source_exclude=entities' 

你也可以使用HEAD API查询某个文档的_source是否存在(如果在mappings的禁用_source,文档将不会保存源数据)。

HEAD twitter/_doc/1/_source

2.5 路由(Routing)

当Index的时候指定了routing参数,为了得到指定的文档,你Get的时候也需要指定同样的routing参数:

GET twitter/_doc/2?routing=user1

以上将根据user1进行路由获得id为2的文档。请注意,在没有正确路由的情况下get操作将不会得到正确的结果。

2.6 首选分片(Preference)

preference参数可以控制在哪个分片上优先执行get请求。默认是在主分片与副本分片之间随机查询的。

preference`可以设置为:

  • _primary

    • get 请求只在主分片执行
  • _local
    • get 请求尽可能地在本地分配的分片上执行
  • 自定义(字符串)值
    • 同一个自定义的值将会访问同一个分片。这使得你的数据访问具有一致性,例如第一次访问副本分片,然后主分片的数据发生变化,但副本分片还没来得及更新;此时,第二次访问的是主分片,将获取到新的数据;第三次访问的是副本分片时获取的数据却是旧数据。为了避免这种情况,你可以指定一个自定义的值,例如用户名或sessionid,使随后每次访问的分片都和第一次访问的分片一样。

2.7 刷新(Refresh)

为了在get操作之前刷新相关的分片并使其可被搜索,可以将refresh参数设置为true。将其设置为true之前你应该在仔细考虑并验证这会不会导致系统负载过重(并减慢索引速度)

2.8 分布式(Distributed)

get操作会通过hash路由到一个指定的分片id上执行,然后被重定向到该shard id中的一个副本(即副本分片和主分片是等价的,elasticsearch遵循对等协议),最后选择其中的一个作为实际查询的分片。这意味着我们拥有的副本分片越多,扩展性就越好。

2.9 版本支持(Versioning support)

你可以指定version参数用来获取version值和指定参数值一致的文档。对于所有版本类型,此行为都相同,但始终检索文档的版本类型force除外。请注意,force版本类型已弃用。

当你更新文档时,elasticsearch 会标记旧版本的文档为删除状态,并使其不能被查询到,然后再创建一个新的文档。也就是说旧版本的文档不会立即消失,但您将无法访问它。当您继续索引更多数据时,Elasticsearch会在后台清除具有删除标记的文档。

elasticsearch6.7 05. Document APIs(3)GET API的更多相关文章

  1. elasticsearch6.7 05. Document APIs(2)Index API

    Single document APIs Index API Get API Delete API Update API Multi-document APIs Multi Get API Bulk ...

  2. elasticsearch6.7 05. Document APIs(6)UPDATE API

    5. UPDATE API 更新操作可以使用脚本来更新.更新的时候会先从索引中获取文档数据(在每个分片中的集合),然后运行脚本(使用可选的脚本语言和参数),再果进行索引(还允许删除或忽略该操作).它使 ...

  3. elasticsearch6.7 05. Document APIs(9)Bulk API

    8.Bulk API 可以把多个index或delete操作放在单个bulk API中执行.这样可以极大地提高索引速度. /_bulkAPI使用如下的JSON结构: action_and_meta_d ...

  4. elasticsearch6.7 05. Document APIs(4)Delete API

    3.Delete API delete API 可以让你删除一个特定id的文档,下面例子删除twitter索引中_doc类型.id为1的文档: DELETE /twitter/_doc/1 返回结果: ...

  5. elasticsearch6.7 05. Document APIs(10)Reindex API

    9.REINDEX API Reindex要求为源索引中的所有文档启用_source. reindex 不会配置目标索引,不会复制源索引的设置.你需要在reindex之前先指定mapping,分片数量 ...

  6. elasticsearch6.7 05. Document APIs(5)Delete By Query API

    4.Delete By Query API _delete_by_query API可以删除某个匹配条件的文档: POST twitter/_delete_by_query { "query ...

  7. elasticsearch6.7 05. Document APIs(8)Multi Get API

    7.Multi Get API(Multi Get API) multi GET API 允许你一次性获取多个文档,你需要指定docs数组,其中包含了所有你需要查询的文档,每个查询结构至少包含索引,类 ...

  8. elasticsearch6.7 05. Document APIs(1)data replication model

    data replication model 本节首先简要介绍Elasticsearch的data replication model,然后详细描述以下CRUD api: 1.读写文档(Reading ...

  9. elasticsearch6.7 05. Document APIs(7)Update By Query API

    6.Update By Query API _update_by_query 接口可以在不改变 source 的情况下对 index 中的每个文档进行更新.这对于获取新属性或其他联机映射更改很有用.以 ...

随机推荐

  1. 系统性能--CPU

    对于cpu,目前比较关心的是cpu的利用率还有cpu的load,或者还有cpu运行队列. cpu利用率 cpu利用率分为sys,us.分别为操作系统和用户进程所占用的cpu利用率.sys的占用,一般是 ...

  2. Beta冲刺 (5/7)

    Part.1 开篇 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Part.2 成员汇报 组员1(组长)柯奇豪 过去两天完成了哪些任务 共享编辑文章的后端数据处理 部分代码 ...

  3. OpenCV与QT联合开发示例

    1.OpenCV及QT开发环境搭建 windows基于vs2017的opencv安装 windows下安装QT并与visual studio 2017搭建开发环境 2.工程创建 1.导入Qt项目 选择 ...

  4. 团队作业第五周(HCL盐酸队)

    一.Alpha版本测试报告 1.测试计划 测试项目 上下移动   左右移动   发射子弹   与敌方坦克进行攻击 2.测试过程 测试截图 错误记录(提交issues到码云团队项目) 3.测试找出的bu ...

  5. SDWebImage之工具类

    SDWebImage使用了很多工具类来对图片的处理,比如获取图片类型.图片放大缩小.GIF图片处理.图片解压缩处理等.下面我们来看一下这几个工具类. 1.NSData+ImageContentType ...

  6. Kaldi单音素模型 训练部分

    在Kaldi中,单音素GMM的训练用的是Viterbi training,而不是Baum-Welch training.因此就不是用HMM Baum-Welch那几个公式去更新参数,也就不用计算前向概 ...

  7. struts2框架学习笔记3:获取servletAPI

    Struts2存在一个对象ActionContext(本质是Map),可以获得原生的request,response,ServletContext 还可以获得四大域对象(Map),以及param参数( ...

  8. 菜鸟在ubuntu 16.04下制作am335x的SD卡启动盘反思

    以前只在消费电子平台android和rtos上做软件,每次都是公司的环境现成的,根本不用去想启动加载那部分 的事情,最近在做一个工控机的项目时,接触到了TI的arm335x系列的平台,才发现在嵌入式的 ...

  9. Mobility Model and Routing Model about the ONE

    ONE主要的功能是节点的移动,节点间的相遇情况,路由情况以及消息的处理机制.下面简要介绍下目前ONE自带的六种移动模型和六种路由模型. Mobility Model: 从大的方面,可以分为三种,1)随 ...

  10. Ubuntu16.04 + gtx1060 + cuda8.0 + cudnn5.1 + caffe + Theano + Tensorflow

    参考 ubuntu16.04+gtx1060+cuda8.0+caffe安装.测试经历 ,细节处有差异. 首先说明,这是在台式机上的安装测试经历,首先安装的win10,然后安装ubuntu16.04双 ...