zoukankan      html  css  js  c++  java
  • Get API

    根据索引、类型和ID获取文档

    GET twitter/_doc/1

    返回结果如下:

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

    可以使用HEAD检查文档的存在性,例如:

    HEAD twitter/_doc/1

    返回:200 - OK

    HEAD twitter/_doc/0

    返回:404 - Not Found

    Realtime

    默认情况下,get API是实时的,并且不受索引刷新率的影响(当数据对于搜索可见时)。 如果文档已更新但尚未刷新,get API将就地发出刷新调用以使文档可见。 这也会使自上次刷新可见后的其他文档发生更改。 为了禁用实时GET,可以将实时参数设置为false。比如:

    GET twitter_01/_doc/1/?realtime=false

    Source filtering

    默认情况下,get操作会返回_source字段的内容,除非已使用stored_fields参数或_source字段已禁用。 可以设置_source=false来关闭_source。比如:

    GET twitter/_doc/1?_source=false

    返回结果如下:

    {
      "_index": "twitter",
      "_type": "_doc",
      "_id": "1",
      "_version": 1,
      "found": true
    }

    如果您只需要_source中的一个或两个字段,则可以使用_source_include&_source_exclude参数来包含或过滤出需要的部分。 这对大型文档尤其有用,因为部分检索可以节省网络开销。 这两个参数都采用逗号分隔的字段列表或通配符表达式。 例如:

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

    如果您只想指定包含,则可以使用较短的表示法:

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

    Stored Fields

    get操作允许指定一组存储的字段,这些字段将通过传递stored_fields参数来返回。 如果请求的字段没有存储,它们将被忽略。 比如以下映射:

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

    现在我们添加一个文档

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

    接下来我们检索一把:

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

    返回结果如下:

    {
      "_index": "twitter_01",
      "_type": "_doc",
      "_id": "1",
      "_version": 1,
      "found": true,
      "fields": {
        "tags": [
          "red"
        ]
      }
    }

    从它自己的文档中获取的字段值总是以数组的形式返回。 由于未存储计数器字段,因此get请求在尝试获取stored_fields时会忽略它。
    还可以像_routing字段一样检索元数据字段:

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

    返回结果如下:

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

    只有leaf fields(简单字段)可以通过stored_field选项返回。 所以对象字段不能被返回,并且这样的请求将失败。

    直接获取_source

    使用/{index}/{type}/{id}/_source 方式来获取文档的_source字段,而不需要任何额外的内容。 例如:

    GET twitter_01/_doc/1/_source

    返回内容如下:

    {
      "counter": 1,
      "tags": [
        "red"
      ]
    }

    同样也可以使用Source filtering来控制将返回_source的哪些部分:

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

    值得注意的是,_source端点还有一个HEAD变体,用于高效地测试文档_source的存在。 如果现有文档在映射(mapping)中被禁用,它将不会有_source。

    HEAD twitter_01/_doc/1/_source

    返回结果:200 - OK

    Routing

    当使用控制路由的能力进行索引时,为了获取文档,还应该提供路由值。 例如:

    GET twitter/_doc/2?routing=user1

    以上将得到一个id为2的tweet,但会根据用户进行路由。 请注意,在没有正确路由的情况下发出get将导致文档获取失败。

    Preference

    控制首选哪个分片副本执行get请求。 默认情况下,该操作在分片副本之间随机选择。
    preference可以设置的值有:

    • _primary:该操作只会去主分片,并且只会在主分片上执行。
    • _local:如果可能,该操作将优选在本地分配的分片上执行。
    • Custom (string) value:自定义值将用于确保相同的自定义值将使用相同的分片。 当在不同的刷新状态下命中不同的分片时,这可以帮助“跳跃值”(jumping values)。 比如可以是Web session id或 用户名。

    Refresh

    可以将refresh参数设置为true,以便在get操作之前刷新相关分片并使其可搜索。 将其设置为true应仔细考虑,验证是否会对系统造成沉重负担,或者是否会降低索引速度。

    Distributed

    get操作被哈希成一个特定的分片ID。 然后它被重定向到该分片ID中的一个副本并返回结果。 副本是该分片ID组中的主分片及其副本。 这意味着拥有越多的副本,将拥有更好的GET扩展。

    Versioning support

    只有当其版本等于指定的版本时,才可以使用版本参数来检索文档。 所有版本类型的行为都是相同的,除了版本类型为FORCE会总是检索文档。 请注意,FORCE版本类型已弃用。

    在内部,Elasticsearch已将旧文档标记为已删除并添加了全新文档。 旧版本的文档不会立即消失,尽管你已无法访问它。 随着索引数据越来越多,Elasticsearch将在后台清理已删除的文档。

     官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-get.html#get-source-filtering

  • 相关阅读:
    中文分词算法工具hanlp源码解析
    Hanlp分词1.7版本在Spark中分布式使用记录
    Window离线环境下如何安装pyhanlp
    如何编译运行HanLP自然语言处理包
    函数调用面试题
    构造函数复习
    面向对象的好处
    递归实现查找页面所有节点
    面向对象和原型
    chrome浏览器调试工具的使用
  • 原文地址:https://www.cnblogs.com/ginb/p/8795388.html
Copyright © 2011-2022 走看看