8、Get API

原文地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-get.html

elasticsearch版本:6.5

目录地址:https://blog.csdn.net/mine_1/article/details/85623429

get API运行用户通过ID获取json格式的文档,如下面的例子,获取twitter索引下面的_doc类型里面id为0的文档。

GET twitter/_doc/0

得到的响应为:

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

结果中包括我们想要得到的文档的_index,_type,_id和version信息,如果存在满足条件的文档还会返回文件的内容_source。

这个接口也可以用HEAD请求,如:

HEAD twiter/_doc/0

(1)Realtime

默认情况下,get api是实时的,不受索引刷新率的影响(数据在搜索时可见)。如果文档已更新但尚未刷新,则get api将在适当位置发出刷新调用,以使文档可见。这还将使上次刷新后更改的其他文档可见。为了禁用realtime get,可以将realtime参数设置为false。

(2)Source filtering

默认情况下,GET操作返回_source的内容,除非将_source设置为false。您可以使用_source关闭source检索:

GET twitter/_doc/0?_source=false

如果您只需要完整源中的一个或两个字段,则可以使用源包含和源排除参数来包含或筛选您需要的部分。这对于大型文档尤其有用,因为部分检索可以节省网络开销。两个参数都采用逗号分隔的字段列表或通配符表达式。例子:

GET twitter/_doc/0?_source_include=*.id&source_exclude=entities

如果您只想要指定的字段,可以用下面的这种简写形式:

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

(3) Stored Fields

get操作允许指定一组存储字段,这些字段将通过传递stored_fields参数返回。如果请求的字段store为false,则将忽略它们。例如,考虑以下映射:

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,
   "found": true,
   "fields": {
      "tags": [
         "red"
      ]
   }
}

获取的文档字段值总是放在fields数组里面。但是由于counter字段stored为false,所以当GET的时候被忽略了,查不到值。
还可以用_routing字段检索元数据字段,

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

得到的响应为:

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

store为false的字段不能被返回。

(4)Getting the _source directly

用/{index}/{type}/{id}/_source请求可以仅返回_sourcez字段的值,而没有其他附加信息,如:

GET twitter/_doc/1/_source

也可以用_source_include和_source_exclude字段设置_source包含哪些字段,不包含哪些字段:

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

(5)Routing

当routing可用时,为了得到指定的文档,也可以提供routing值,如:

GET twitter/_doc/2?routing=user1

这个请求将会得到一个id为2的twitter,并且routing为user1。当routing不对时,将不会得到正确的结果。

(6)preference

preference控制要在哪个分片上执行get请求。默认情况下,操作在碎片副本之间随机进行。

首选项可以设置为:

  • _primary:该操作将只在主分片上执行。
  • _local:如果可能的话,该操作最好在本地分配的碎片上执行。
  • 自定义(字符串)值:自定义值将用于确保相同的碎片将用于相同的自定义值。这有助于在不同刷新状态下命中不同碎片时“跳跃值”。示例值可以类似于Web会话ID或用户名。

(7)Refresh

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

(8)Distributed

get操作被散列到一个特定的shard id中执行,然后被重定向到该shard id中的一个副本,并返回结果。副本是主分片及其在该分片ID组中的副本。这意味着我们拥有的副本越多,我们拥有的扩展性就越好。

(9)Versioning support

只有当文档的当前版本等于指定版本时,才能使用version参数来检索文档。对于所有版本类型,此行为都相同,但始终检索文档的版本类型force除外。请注意,force版本类型已弃用。

在内部,ElasticSearch将旧文档标记为已删除,并添加了一个全新的文档。旧版本的文档不会立即消失,尽管您将无法访问它。ElasticSearch会在继续索引更多数据时清除后台删除的文档。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值