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
Get API的更多相关文章
- 干货来袭-整套完整安全的API接口解决方案
在各种手机APP泛滥的现在,背后都有同样泛滥的API接口在支撑,其中鱼龙混杂,直接裸奔的WEB API大量存在,安全性令人堪优 在以前WEB API概念没有很普及的时候,都采用自已定义的接口和结构,对 ...
- 12306官方火车票Api接口
2017,现在已进入春运期间,真的是一票难求,深有体会.各种购票抢票软件应运而生,也有购买加速包提高抢票几率,可以理解为变相的黄牛.对于技术人员,虽然写一个抢票软件还是比较难的,但是还是简单看看123 ...
- 几个有趣的WEB设备API(二)
浏览器和设备之间还有很多有趣的接口, 1.屏幕朝向接口 浏览器有两种方法来监听屏幕朝向,看是横屏还是竖屏. (1)使用css媒体查询的方法 /* 竖屏 */ @media screen and (or ...
- html5 canvas常用api总结(三)--图像变换API
canvas的图像变换api,可以帮助我们更加方便的绘画出一些酷炫的效果,也可以用来制作动画.接下来将总结一下canvas的变换方法,文末有一个例子来更加深刻的了解和利用这几个api. 1.画布旋转a ...
- JavaScript 对数据处理的5个API
JavaScript对数据处理包括向上取整.向下取整.四舍五入.固定精度和固定长度5种方式,分别对应ceil,floor,round,toFixed,toPrecision等5个API,本文将对这5个 ...
- ES5对Array增强的9个API
为了更方便的对Array进行操作,ES5规范在Array的原型上新增了9个方法,分别是forEach.filter.map.reduce.reduceRight.some.every.indexOf ...
- javascript的api设计原则
前言 本篇博文来自一次公司内部的前端分享,从多个方面讨论了在设计接口时遵循的原则,总共包含了七个大块.系卤煮自己总结的一些经验和教训.本篇博文同时也参考了其他一些文章,相关地址会在后面贴出来.很难做到 ...
- 一百元的智能家居——Asp.Net Mvc Api+讯飞语音+Android+Arduino
大半夜的,先说些废话提提神 如今智能家居已经不再停留在概念阶段,高大上的科技公司都已经推出了自己的部分或全套的智能家居解决方案,不过就目前的现状而言,大多还停留在展厅阶段,还没有广泛的推广起来,有人说 ...
- 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用
由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍ASP.NET M ...
- bootstrap + requireJS+ director+ knockout + web API = 一个时髦的单页程序
也许单页程序(Single Page Application)并不是什么时髦的玩意,像Gmail在很早之前就已经在使用这种模式.通常的说法是它通过避免页面刷新大大提高了网站的响应性,像操作桌面应用程序 ...
随机推荐
- TV TimeShift和PVR的区别
Timeshift是在PVR菜单下,PVR菜单下一般有两个功能一个是刻录功能,一个是Timeshift功能,这两个功能都需要u盘或者内存卡的支持,刻录时把当前的节目刻录进优盘想看的时候还可以打开看,T ...
- 0ctf 2019 zero_task
一个条件竞争的洞,以前没有接触过.比赛完研究了wp复现下. new_thread结构体如下 new_thread: thread_area size0x8 thread_area+0x8 size 0 ...
- js 本地缓存localStorage
.localStorage - 没有时间限制的数据存储 ,,]; localStorage.setItem("stor",arr); console.log(localStorag ...
- MapReduce词频统计
自定义Mapper实现 import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; impor ...
- Python3学习笔记十八
1. MTV M: model 与数据库相关 T: Template 与html相关 V: views 与逻辑相关 一. URL配置 启动:python ...
- Intellij IDEA 从数据库生成 JPA Entity
首先,需要从调用 Database 窗口 View>Tool Windows>Database 添加到数据库的连接 选择数据的表,然后右击 选择 Scripted Extensions & ...
- 【webpack系列】从零搭建 webpack4+react 脚手架(二)
html文件如何也同步到dist目录?bundle.js文件修改了,万一被浏览器缓存了怎么办?如何为导出的文件加md5?如何把js引用自动添加到html?非业务代码和业务代码如何分开打包?如何搭建开发 ...
- 公众号用户发送消息后台PHP回复没有反应的解决办法
1.问题:微信公众平台官方提供下载的示例代码中,使用$postStr =$GLOBALS["HTTP_RAW_POST_DATA"];来获取微信服务器推送的消息数据.但是有的开发者 ...
- Ansible入门篇:playbook的使用
playbooks介绍 playbooks是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活.简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在 ...
- vue分类筛选方法,filer
使用computed 方法来过滤筛选数据;也可以使用methods 方式来筛选过滤数据 代码如下: <body> <div id="app"> <ul ...