ElasticSearch API 之 GET
GET API是Elasticsearch中常用的操作,一般用于验证文档是否存在;或者执行CURD中的文档查询。与检索不同的是,GET查询是实时查询,可以实时查询到索引结果。而检索则是需要经过处理才能搜索到。合理利用这些方法,可以更灵活的使用Elasticsearch。
查询样例
Get API允许基于ID字段从Elasticsearch查询JSON文档,下面就是一个查询的例子:
curl -XGET 'http://localhost:9200/website/blog/123?pretty'
上面的命令表示,在website索引的blog类型中查询id为123的文档,返回结果如下:
{
- "_index": "website",
 - "_type": "blog",
 - "_id": "123",
 - "_version": 1,
 - "found": true,
 - "_source": {
- "title": "My first blog entry",
 - "text": "Just trying this out...",
 - "date": "2014/01/01"
 
}
 
}
上面返回的数据包括文档的基本内容,
_index是索引名称
_type是类型
_id是ID
_version是版本号
_source字段包括了文档的基本内容
found字段代表是否找到
这个API支持使用HEAD方式提交,这样可以验证这个ID是否存在,而不会返回无用的数据。
curl -XHEAD -i 'http://localhost:9200/website/blog/123'HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Content-Length: 0
实时
默认情况下get API是实时的,并不会受到索引的刷新频率的影响。(也就是说,只要索引的数据,就可以立马查询到)
有的时候我们可能想要关闭实时查询,这样可以设置realtime=false。
也可以在配置文件中配置,使之全局可用,即配置action.get.realtime为false。
类型可选
API中类型_type是可选的,如果想要查询所有的类型,可以直接指定类型为_all,从而匹配所有的类型。
source过滤
默认情况下get操作会返回_source字段,除非你使用了fields字段或者禁用了_source字段。通过设置_source属性,可以禁止返回source内容(source内容为空):
curl -XGET 'http://localhost:9200/website/blog/123?_source=false'{
- "_index": "website",
 - "_type": "blog",
 - "_id": "123",
 - "_version": 1,
 - "found": true,
 - "_source": { }
 
}
如果想要返回特定的字段,可以使用_source_include(包含)或者_source_exclude(排除)进行过滤。可以使用逗号分隔来设置多种匹配模式,比如:
curl -XGET 'http://localhost:9200/website/blog/123?_source_include=title,date'curl -XGET 'http://localhost:9200/website/blog/123?_source_exclude=date'
curl -XGET 'http://localhost:9200/website/blog/123?_source_include=*&_source_exclude=date'
{
- "_index": "website",
 - "_type": "blog",
 - "_id": "123",
 - "_version": 1,
 - "found": true,
 - "_source": {
- "text": "Just trying this out...",
 - "title": "My first blog entry"
 
}
 
}
字段
get操作允许设置fields字段,返回特定的字段:
curl -XGET 'http://localhost:9200/website/blog/123?fields=title,text'{
- "_index": "website",
 - "_type": "blog",
 - "_id": "123",
 - "_version": 1,
 - "found": true,
 - "fields": {
- "title": [
- "My first blog entry"
 
],
 - "text": [
- "Just trying this out..."
 
]
 
}
 - "title": [
 
}
如果请求的字段没有被存储,那么他们会从source中分析出来,这个功能也可以用source_filter来替代。
元数据比如_routing和_parent是永远不会被返回的。
Generated fields
如果在执行完索引操作,没有刷新,那么GET操作会读取translog的内容来查询文档。然而有一些字段仅仅是在索引的时候产生的。如果你尝试读取索引中的生成的字段,就会出现错误。可以设置ignore_erros_on_generated_fields=true来忽略错误。
Translog就是索引的数据要进行存储,总不可能索引一条就更新一次Lucene结构。于是就搞了个translog,数据的变动会先放在translog里面,再刷新到es中。实时查询,其实是读取了translog中,还未持久化的数据。
仅返回_source
使用/{index}/{type}/{id}/_source可以仅仅返回_source字段,而不必返回过多不必要的信息,浪费网络带宽。
curl -XGET 'http://localhost:9200/website/blog/123/_source'{
- "title": "My first blog entry",
 - "text": "Just trying this out...",
 - "date": "2014/01/01"
 
}
也可以使用过滤机制:
curl -XGET 'http://localhost:9200/website/blog/123/_source?_source_include=title,text,date'{
- "date": "2014/01/01",
 - "text": "Just trying this out...",
 - "title": "My first blog entry"
 
}
也是支持使用HEAD方式,验证是否存在:
curl -XHEAD -i 'http://localhost:9200/website/blog/123/_source'HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Content-Length: 0
路由
当索引的时候指定了路由,那么查询的时候就一定要指定路由。
curl -XGET 'http://localhost:9200/XXX/XXX/XXX?routing=XXX'
如果路由信息不正确,就会查找不到文档
Preference
控制为get请求维护一个分片的索引,这个索引可以设置为:
- _primary 这个操作仅仅会在主分片上执行。
 - _local 这个操作会在本地的分片上执行。
 - Custom (string) value 用户可以自定义值,对于相同的分片可以设置相同的值。这样可以保证不同的刷新状态下,查询不同的分片。就像sessionid或者用户名一样。
 
刷新
refresh参数可以让每次get之前都刷新分片,使这个值可以被搜索。设置true的时候,尽量要考虑下性能问题,因为每次刷新都会给系统带来一定的压力
分布式
get操作会通过特定的哈希方法,把请求分配给特定的分片进行查询。由于在分布式的环境下,主分片和备份分片作为一个组,都可以支持get请求。这就意味着,分片的数量越多,get执行的规模就越大。
参考
ElasticSearch API 之 GET的更多相关文章
- Python Elasticsearch api,组合过滤器,term过滤器,正则查询 ,match查询,获取最近一小时的数据
		
Python Elasticsearch api 描述:ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.下 ...
 - Elasticsearch API响应的一些常用选项
		
我们可以点击Elasticsearch API以获取所需的响应,但是如果要修改API响应,以便我们更改显示格式或过滤掉某些字段,然后我们可以将这些选项与查询一起应用. 有一些常见的选项可以适用于API ...
 - Python Elasticsearch api
		
描述:ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.下面介绍了利用Python API接口进行数据查询,方便 ...
 - ElasticSearch API 简要介绍
		
调用其API会返回很多信息,例如集群的信息,节点的信息等 检查集群的状态----Restful API说明 1:检查集群状态信息 2:管理集群 3:执行 增删改查 命令 4:执行高级命令 Restfu ...
 - elasticsearch api约定
		
elasticsearch REST API 使用JSON通过HTTP协议传输. 本约定贯穿整个REST API,除非有特别的说明. 一.多重索引 大多数APIs引用到一个index参数来在多个索引中 ...
 - java优雅的使用elasticsearch api
		
本文给出一种优雅的拼装elasticsearch查询的方式,可能会使得使用elasticsearch的方式变得优雅起来,使得代码结构很清晰易读. 建立elasticsearch连接部分请参看另一篇博客 ...
 - Java调用Elasticsearch API查询及matchPhraseQuery和matchQuery的区别
		
一.引入依赖 <!--Elasticsearch client--> <!-- https://mvnrepository.com/artifact/org.elasticsearc ...
 - ElasticSearch API 之 UPDATE
		
ES本身是一个倾向于查询检索的框架,对于更新的操作,太过频繁总归不好的. 阅读本篇后,你可以使用Script对所有的文档执行更新操作,也可以使用doc对部分文档执行更新,也可以使用upsert对不存在 ...
 - ElasticSearch API 之 DELETE
		
删除API,可以根据特定的ID删除文档. $ curl -XDELETE 'http://localhost:9200/website/blog/AVbkih8AltSLRRB7XAun' 会返回下面 ...
 
随机推荐
- softmax_loss
			
softmax_loss中的ignore_label是来自于loss layer,而不是softmax_loss的参数
 - python之for (循环)
			
格式: for 循环 for i in s: print(i) # for 关键字 # i 变量 # in 关键字 # s 可迭代对象 int - bool pass和- # for a in &qu ...
 - 判断一个链表是否为回文结构 【题目】 给定一个链表的头节点head,请判断该链表是否为回 文结构。 例如: 1->2->1,返回true。 1->2->2->1,返回true。 15->6->15,返回true。 1->2->3,返回false。 进阶: 如果链表长度为N,时间复杂度达到O(N),额外空间复杂 度达到O(1)。
			
方式1:借助栈 空间辅助度是O(N) 方式2: 借助栈 空间复杂度是 O(n/2).只存后半个链表 方式3: 反转后半个链表 最后再反转回来 package my_basic.class_3; im ...
 - uaf-湖湘杯2016game_学习
			
0x00 分析程序 根据分析,我们可以得到以下重要数据结构 0x01 发现漏洞 1.在武器使用次数耗光后,程序会把存储该武器的堆块free,在free的时候没有清空指针,造成悬挂指针 2.commen ...
 - [Tkinter 教程] 布局管理 (Pack Place Grid)
			
原系列地址: Python Tkinter 简介: 本文讲述如何使用 tkinter 的布局管理 (被称作 layout managers 或 geometry managers). tkinter ...
 - 组件开发中的Controller View模式
			
“Controller View”模式: 组件嵌套中,最顶层的组件只管理State 子组件为纯组件 顶层组件分配State给子组件,作为子组件的props 子组件接受顶层组件发来的State作为自身的 ...
 - LeetCode  朋友圈
			
班上有 N 名学生.其中有些人是朋友,有些则不是.他们的友谊具有是传递性.如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友.所谓的朋友圈,是指所有朋友的集合. ...
 - luogu P1966 火柴排队 (逆序对)
			
luogu P1966 火柴排队 题目链接:https://www.luogu.org/problemnew/show/P1966 显然贪心的想,排名一样的数相减是最优的. 证明也很简单. 此处就不证 ...
 - HDU-1455-木棒
			
这题的话,我们,定义一个结构体,然后把木棒从大到小排序. 这些木棒如果是由多根等长木棒组成的,那目标长度一定大于等于其中最长的木棒长度,所这就是我们搜索的下限. 上限就是所有的木棒组成了一根木棒,就是 ...
 - Django REST framework 的功能
			
1. 认证Authentication 方法一:在配置文件中配置全局默认的认证方案 REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 're ...