原文地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-get.html
elasticsearch版本:6.5
目录地址:https://blog.youkuaiyun.com/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会在继续索引更多数据时清除后台删除的文档。