如何理解Elasticsearch Document Get API


今天就跟大家聊聊有关如何理解Elasticsearch Document Get API,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。小编将重点介绍ElasticSearch Doucment Get AP。从《ElasticSearch Client详解》可知,ElasticSearch Get Rest Hign level Get Api声明如下:public final GetResponse get(GetRequest getRequest, RequestOptions options) throws IOExceptionpublic final void getAsync(GetRequest getRequest, RequestOptions options, ActionListener listener)上述两个API,一个同步调用,一个异步调用,同步调用方法直接组装GetResponse 并返回,而异步方法通过回调ActionListener,并将执行结果(GetResponse )传入回调方法。从中可以看出,Get API的核心是GetRequest 与RequestOptions,RequestOptions在上节中已详细说明,接下来将重点关注GetRequest。1、GetRequestGetRequest完整的类继承层次如下:其核心属性如图所示:下面我们一一来介绍一下Ge 香港云主机tRequest的核心属性。protected String index:索引库,对应关系型数据库的Database。private String type:类型,对应关系型数据库的表。private String id:文档ID,对应关系型数据库表中一行的主键ID。private String routing:路由值。private String parent:private String preference:get请求选取执行节点的偏好,倾向性,在下文会详细介绍。private String[] storedFields:显示的指定需要返回的字段,默认会返回_source中所有字段。private FetchSourceContext fetchSourceContext:指定需要返回字段的上下文,是storedFields的补充与完善,支持通配符,下文会详细分析。private boolean refresh = false:是否刷新。boolean realtime = true:是否实时执行,默认为true。private VersionType versionType = VersionType.INTERNAL:版本类型,已在《Elasticsearch Document Get API详解、原理与示例》中详细介绍private long version = Versions.MATCH_ANY:数据版本,关于数据的版本管理,已在《Elasticsearch Document Get API详解、原理与示例》中详细介绍。2、Get API Demo1、示例一:返回值:2、示例二:基于storeFields进行source字段过滤返回值:不符合预期,这是为什么呢?将在下文给出答案。3、示例三:使用fetchSourceContext进行字段的过滤返回结果:符合预期,只获取_source中的message与以date结尾的属性。3、Get API 内部工作机制分析3.1 实时性(Realtime)默认情况下,get API是实时的,并且不会受到索引刷新频率的影响。如果一个文档被更新了(update),但是还没有刷新,那么get API将会发出一个刷新调用,以使文档可见。这也会使其他文档在上一次刷新可见后发生变化。如果不使用实时获取,可以将realtime设置false。3.2 source字段过滤按需返回所需字段,例如SQL语句select * 返回所有字段,可以通过select a.id,a.name返回所需字段。Elasticsearch提供了如下两种方式对_source字段进行过滤:3.2.1 Stored Fieldsget操作允许通过传递storedFields参数来指定一组需要获取储存的字段。如果所请求的字段没有被存储,它们将被忽略。请考虑以下映射:注意映射在定义时,store字段,如果设置为false,就算指定storedFields=[“counter”],也不会返回结果,也就时上述【示例2】没有返回 _source的原因。3.2.2 FetchSourceContextfetchSourceContext顾名思义,就是fetch source的上下文环境,提供更加完善的过滤逻辑,主要特性为支持include、exclude和支持通篇符过滤。FetchSourceContext的构造函数:可以从两个维度includes(包含)、excludes(排除)。还支持带”*”的通配符,例如includes = [“msg*”]表示以msg开头的属性。通配符的解析逻辑:org.elasticsearch.common.regex#simpleMatchToAutomaton:3.3 路由机制如果路由字段不是ID,请使用routing属性,更好的转发请求,否则会全部转发到所有的复制组,然后汇聚并返回。3.4 倾向性(优先级、Preference)Preference参数控制get请求对同一个复制组内多个副本的选择,默认情况下,该操作是在碎片副本之间进行随机分配的。一言以蔽之,preference的作用是同一个复制组中的路由规则。其可选值:_primary操作将只在主分片上执行。_local如果可能的话,操作将更倾向于在本地分配的碎片上执行。当请求发到一个Node上,如果该Node上有对应的副本,则在该节点上执行,不会再将请求转发到其他节点。自定义字符串值同一个自定义值,将会固定使用同一个分片(路由),该值通常会和会话信息绑定在一起,例如用户名,sessionId等,在应用层面对各分片节点进行分流。3.5 刷新机制refersh如果设置为true,以便在get操作之前刷新相关分片,并使其可搜索,会刷新整个分片节点,此参数不建议使用,因为get操作默认是实时的,无性能损耗。其他分布式特性、版本等是ElasticSearch的通用特性,就不再重复讲解了。本节首先罗列了文档Get API,并对GetRequest进行了详细分析,接着通过3个 示例展示Get API的使用,最后重点分析GET API 内部的实现机制(实时性、source过滤、路由、复制组内分片节点倾向性、刷新机制等)。看完上述内容,你们对如何理解Elasticsearch Document Get API有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注开发云行业资讯频道,感谢大家的支持。

相关推荐: 如何查看电脑使用记录

这篇文章将为大家详细讲解有关如何查看电脑使用记录,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。方法一:1、按 Win + R 组合键,打开运行,并输入:eventvwr.msc,确定或回车,打开事件事件查看器;2、在事件查看…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 08/17 17:23
下一篇 08/17 17:23

相关推荐