elasticsearch之Document APIs【Get API】
来源:互联网 发布:淘宝网服装女装秋装 编辑:程序博客网 时间:2024/05/18 01:48
环境
虚拟机:centos7
操作系统:win7
elasticsearch:5.5
Get API
get API
允许你从索引(数据库)中通过id
来查询得到json
类型的文档。
下面的例子是从名为twitter
的数据库中的一个叫tweet
表中查询id
为0
的json
文档。
GET twitter/tweet/0
结果如下:
{ "_index" : "twitter", "_type" : "tweet", "_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
字段表示查询是否有结果)。
也可以通过HEAD api
来检查文档是否存在:
HEAD twitter/tweet/0
Realtime
默认情况下,get api
是实时的,并且不受索引(数据库)(当数据搜索可见时)刷新频率的影响。如果一个文档已经更新但是没有刷新,get api
将会就地发送一个刷新请求以使得文档可见。这也会使得在至上次刷新后,修改的其他文档变得可见。想要禁止实时查询,可以把realtime
参数设置为false
。
Optional Type
get api
允许使用可选参数_type
。将其设置为_all
时,其将会匹配所有type
(即:表),并返回根据id
匹配到的第一个文档。
Source filtering
默认情况下,get
操作返回的文档的内容是在_source
字段里,除非你使用stored_fields
参数或者如果_source
字段是禁用的。你可以使用_source
参数来关闭_source
的检索。
GET twitter/tweet/0?_source=false
如果从完整的_source
中,你仅仅需要一个或者两个字段,你可以使用_source_include
和_source_exclude
参数来包含或者排除(过滤)你需要的部分。
这对于大型文档是尤其有用的,因为局部的检索可以节省网络开销。两个参数将采用逗号分隔的字段列表或者通配符的表达式。
GET twitter/tweet/0?_source_include=*.id&_source_exclude=entities
如果你仅仅想指定包含的字段,你可以使用简写:
GET twitter/tweet/0?_source=*.id,retweeted
Stored Fields
get
操作允许指定一组stored fields
(存储字段),该字段将通过stored_fields
参数来指定返回。如果请求的字段没有被存储的,他们将会被忽略掉。例如:考虑下面的映射:
PUT twitter{ "mappings": { "tweet": { "properties": { "counter": { "type": "integer", "store": false }, "tags": { "type": "keyword", "store": true } } } }}
现在我们添加一个文档:
PUT twitter/tweet/1{ "counter" : 1, "tags" : ["red"]}
1、尝试去查询它们:
GET twitter/tweet/1?stored_fields=tags,counter
结果是:
{ "_index": "twitter", "_type": "tweet", "_id": "1", "_version": 1, "found": true, "fields": { "tags": [ "red" ] }}
从文档中获取字段值,返回其自身,即:要是是数组,就返回数组。当尝试获取stored_fields
时,由于counter
字段没有被存储,get
请求要直接忽视它。
也可以提取(或者叫 得到)元数据字段,比如:_routing
和_parent
字段:
PUT twitter/tweet/2?routing=user1{ "counter" : 1, "tags" : ["white"]}
GET twitter/tweet/2?routing=user1&stored_fields=tags,counter
结果为:
{ "_index": "twitter", "_type": "tweet", "_id": "2", "_version": 1, "_routing": "user1", //<- "found": true, "fields": { "tags": [ "white" ] }}
也可以通过stored_field
选项,只返回叶子字段(我认为就是局部字段)。因此,对象字段不能被返回,并且请求将会失败。
Getting the _source directly(直接获取_source)
使用/{index}/{type}/{id}/_source
来只获取_source
字段的文档,不会有任何不加的内容。例如:
GET twitter/tweet/1/_source
你也可以使用source filtering
参数来控制,_source
字段将要返回的部分:
GET twitter/tweet/1/_source?_source_include=*.id&_source_exclude=entities'
注意,也可以在HEAD
请求中使用_source
,来高效的测试文档_source
是否存在。如果在映射中禁止了_source
,那么已存在的文档将不会有_source
。
HEAD twitter/tweet/1/_source
Routing(路由)
当在索引(即:数据库)中使用routing
(具有控制路由的能力)时,为了得到文档,也应该提供routing
的值,例如:
GET twitter/tweet/2?routing=user1
上面请求是得到tweet
中id
为2的文档,但是其路由是基于user1
。注意,发送一个get
请求,而没有正确的路由的话,那将会造成查询不到文档。
Preference(偏好)
控制哪个分片副本来执行get
请求的preference
,默认情况下,是随机选择的。
preference可以设置为:
_primary:
操作将只会在主分片上执行。
_local:
如果可能的话,操作将会优先在本地分配的分片上执行。
Custom (string) value:
自定义的值将被用于确保同一个自定义的值将会被同一个分片上执行。
这有助于在不同刷新状态下,击中不同分片的jumping values
。比如:像web
的session id
或者user name
。
Refresh(刷新)
refresh
参数可以设置为true
,为了在get
操作和使数据可被搜索之前刷新相关分片。
设置为true
,应该是建立在仔细思考和验证之后,以确保不会造成系统的沉重负担(和索引缓慢)。
Distributed(分布式)
get
操作会得到被哈希的特定的分片id
。接着会重定向到该分片id
中的其中一个副本上并返回结果。副本是指该分片id
组中的主分片和其副本分片。这意味着我们有更多的副本,我们更高效的使用get
。
Versioning support(版本支持)
只有在当前版本号等于指定的时,你才可以使用version
参数来取回文档。
对所有的版本类型而言,这个行为是相同的,除了FORCE
版本类型,因为其总是会取回文档。注意:FORCE
版本类型,已经启用。
在内部,elasticsearch
会将旧文档标记为已删除,并添加一个全新的文档。旧版本号的文档不会立即删除,尽管你已经无法访问到它了。在你继续索引更多的数据时,elasticsearch
会在后台清除(标记为)已删除文档。
- elasticsearch之Document APIs【Get API】
- elasticsearch之Document APIs【Multi Get API】
- elasticsearch之Document APIs【Index API】
- elasticsearch之Document APIs【Delete API】
- elasticsearch之Document APIs【Update API】
- elasticsearch之Document APIs【Bulk API】
- elasticsearch之Document APIs【Reindex API】
- elasticsearch之Document APIs【Delete By Query API】
- elasticsearch之Document APIs【Scroll】
- ElasticSearch API 之 GET
- elasticsearch for java之Document APIs【增删改查】
- elasticsearch之Document APIs【Reading and Writing documents】
- Elasticsearch JAVA API 之 Document API
- Elasticsearch系列篇之Get document
- ES 2.4 java API document APIs
- elasticsearch-java api之文档(document)各种操作
- Java API [2.3] » Document APIs » Index API
- elasticsearch api中的get操作
- CTF中Crypty(密码类)入门必看
- Odoo10在win10下部署
- Lottie动画动态定位以及缩放
- Fragment懒加载机制
- RandomAccessFile
- elasticsearch之Document APIs【Get API】
- 小程序tabBar添加
- 正则表达式(足够用了)
- 创建对象的方法
- MySQL日期时间函数
- Spring之IOC快速入门(一)
- Android 系统启动时 PackageManagerService 对应用组件信息表的构建过程
- oracle查询锁表解锁语句
- 我的android异常系列——java.lang.IllegalStateException: commit already called