ElasticSearch 6.3版本 Document APIs之Get API

Get API
get API允许根据其id从索引中获取类型化的JSON文档。e.g.从名为twitter的索引获取JSON文档,该索引名为_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文档,如果可以发现(如由指示found字段中相应)。

API还允许使用以下方式检查文档是否存在HEAD:
HEAD twitter/_doc/0

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

源过滤
默认情况下,get操作返回该_source字段内容,除非已使用该stored_fields参数或该_source字段已禁用。可使用_source参数关闭检索:

GET twitter/_doc/0?_source=false

若只需完整的一个或两个字段,则_source可使用_source_include & _source_exclude参数来包含或过滤掉所需部分。对于大型文档部分检索可节省网络开销。这两个参数都使用逗号分隔的字段列表或通配符表达式。e.g.

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

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

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

存储的字段
get操作允许指定将通过传递stored_fields参数返回的一组存储字段。若未存储请求的字段,则将忽略它们。e.g.考虑以下映射:
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"
]
}
}
从文档本身获取的字段值始终作为数组返回。由于该counter字段未存储,因此get请求在尝试获取时仅忽略它stored_fields。

也可以检索字段之类的元数据字段_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,
"_routing": "user1",
"found": true,
"fields": {
"tags": [
"white"
]
}
}
只有叶子字段可以通过stored_fields选项返回。因此无法返回对象字段,此类请求将失败。

直接获取_source
使用/{index}/{type}/{id}/_source端点只获取_source文档的字段,而不包含任何其它内容。e.g.

GET twitter/_doc/1/_source

还可以使用相同的源过滤参数来控制_source将返回的部分:
GET twitter/_doc/1/_source?_source_include=*.id & _source_exclude=entities

注:_source端点还有一个HEAD变体,可以有效测试document_source的存在。如在映射中禁用了现有文档,则该文档将没有_source
HEAD twitter/_doc/1/_source

路由
使用控制路由的能力进行索引时,为了获取文档,还应提供路由值。e.g.

GET twitter/_doc/2?routing = user1

以上将获得id为2的推文,但将根据用户进行路由查找。

注:在路由错误的情况下发出get请求,将无法获取文档。

首选项
preference参数控制哪个分片副本执行get请求。默认情况下,每个分片随机处理。
该参数可设置为:
_primary:操作仅在主分片上执行
_local:若可能,操作优先在本地分配的分片上执行
Custom (string) value(自定义(字符串)值):自定义值将用于保证相同的分片将用于相同的自定义值。当在不同刷新状态下击中不同分片时,这可以帮助“跳跃值”。示例值可以是Web会话ID或用户名。

刷新
refresh参数可设置为true,以便在get操作之前刷新相关碎片并使其可搜索。将其设置为true不会导致系统上的重载(并减慢索引)。

版本控制支持
version只有当其当前版本等于指定文档时,才可以使用该参数来检索文档。对于所有版本类型,此行为都是相同的,除了会始终检索文档的force类型。注:force不推荐使用版本类型。

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


猜你喜欢

转载自blog.csdn.net/qingmou_csdn/article/details/80932224