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在很早之前就已经在使用这种模式.通常的说法是它通过避免页面刷新大大提高了网站的响应性,像操作桌面应用程序 ...
随机推荐
- MySQL5.7开启独立表空间参数innodb_file_per_table【原创】
今天在线上某个系统发现MySQL数据库使用的是共享表空间,想修改为独立表空间,操作如下: #因为是主从结构,在从库修改测试,先关闭binlog SET SQL_LOG_BIN=; show varia ...
- java学习笔记11-static关键字
如果在类中使用static关键字创建方法,这种方法称为类方法,可以在这个类中直接引用.而不是用static创建的方法.这种方法称为对象方法(实例方法),需要创建对象后才能使用. package les ...
- 【Flask】Flask学习笔记(一) 应用基本结构
初始化 使用前必须创建一个应用实例 from flask import Flask app = Flask(__name__) 路由和视图函数 请求流程 客户端(web浏览器)--> web服 ...
- Python教学课程分享
一.Python基本语法 1.1整数,实数,复数 前言: Python编程环境及方法 在python底层环境中唤醒python对话,直接在python中输入指令对系统进行命令编程 随意打开一个记事本或 ...
- CleanWebpackPlugin 低版本失效
解决这个问题只需要 升级至2.0.1版本就行 不需要传参
- unity 屏幕适配的问题
首先是AB的加载时,会出现localscale的改变,需要在初始化时将其调节为1.0并且 offmax和min都设置为0,此时方才会出现在自己臆想之中(尤其是需要设置父节点时)
- luoguP2502旅行
2006河南省选 思路:(参考题解) 枚举最大的边(第\(i\)条),从这条边开始由大到小枚举.添边,当\(s\)和\(t\)联通时,此时即为以第\(i\)条边为最大边的答案,比较每个答案,判断输出. ...
- DataTable插件通过js导出Excel
$('#myTab').DataTable( { serverSide: false,//分页,取数据等等的都放到服务端去. true为后台分页,每次点击分页时会请求后台数据,false为前台分页 d ...
- 在servlet中使用spring注解
@Autowired IAgreementPayService agreementPayService; /** * 支付参数 */ @Value("B{agreementPay.publi ...
- python3学习笔记之十七
1. 网站本质:通过socket建立连接. 服务端(网站) 1. 先启动并监听:80端口 4. 获取请求信息 请求头 请求体 5. 处理请求 响应内容: 响应头:\r\n\r\n响应体 ...