elasticsearch使用指南之Elasticsearch Search API 概述与URI Search
本节开始,将详细介绍Search API。
1、Search API概述
详细API如下:
- public final SearchResponse search(SearchRequest searchRequest, RequestOptions options) throws IOException
- public final void searchAsync(SearchRequest searchRequest, RequestOptions options, ActionListener < SearchResponse> listener)
首先关注一下SearchRequest
SearchRequest类图如下:
其关键属性说明如下:
- private SearchType searchType = SearchType.DEFAULT:搜索类型。
- QUERY_THEN_FETCH
首先根据路由算法向相关分片(多个)发送请求,此时只返回documentId与一些必要信息(例如用于排序等),然后对各个分片的结果进行汇聚,排序,然后选取客户端指定需要获取的数据条数(top n),然后根documentId再向各个分片请求具体的文档信息。首先根据路由算法向相关分片(多个)发送请求,此时只返回documentId与一些必要信息(例如用于排序等),然后对各个分片的结果进行汇聚,排序,然后选取客户端指定需要获取的数据条数(top n),然后根据documentId再向各个分片请求具体的文档信息。 - QUERY_AND_FETCH
在5.4.x版本开始废弃,是直接向各个分片节点请求数据,每个分片返回客户端请求数量的文档信息,然后汇聚全部返回给客户端,返回的数据为客户端请求数量size (路由后的分片数量)。在5.4.x版本开始废弃,是直接向各个分片节点请求数据,每个分片返回客户端请求数量的文档信息,然后汇聚全部返回给客户端,返回的数据为客户端请求数量size (路由后的分片数量)。 - DFS_QUERY_THEN_FETCH
在开始向各个节点发送请求之前,会进行一次词频、相关性的计算,后续流程与QUERY_THEN_FETCH相同,可以看出,该查询类型的文档相关性会更高,但性能比QUERY_THEN_FETCH要差。
- private String[] indices:待查询的索引库。
- private String routing:路由字段值。
- private String preference:复制组内倾向性。
- private SearchSourceBuilder source:查询主体(rerquest body),后续会重点讲解。
- private Boolean requestCache:是否开启查询缓存。
- private Boolean allowPartialSearchResults:是否允许部分成功。
- private Scroll scroll:滚动API(用于分页)
- private int batchedReduceSize = DEFAULT_BATCHED_REDUCE_SIZE:批量归并size:默认为512
- private int maxConcurrentShardRequests = 0:建议最大值别超过256,其核心含义待研究。
- private int preFilterShardSize = 128,其核心作用待研究。
- private String[] types:待查询的类型。
接下来再来重点关注一下查询API几个通用的参数:
- timeout
查询的超时时间。 - from
查询开始的偏移量,用于分页查询,类似于关系数据库的分页的start。默认值为0。 - size
批量获取条数,用于分页查询。 - search_type
查询类型,6.4.0只支持QUERY_THEN_FETCH与DFS_QUERY_THEN_FETCH。 - request_cache
查询缓存,如果设置为false,取决于index级别的设置,将在索引管理API时详细讲解。 - allow_partial_search_results
是否允许部分成功,例如一个查询请求,需要向3个分片发出请求,如果只有两个分片成功返回结果,另外一个出现故障,如果设置false,则会返回整体失败,如果设置为true,则会成功部分结果,默认为true。 - terminate after
一个查询为每个分片最多收集的文档数,当达到该数量是,查询会提前结束。 - batched_reduce_size
在协调节点上应该立即减少一次请求需要访问的分片数量,如果一次请请求需要汇聚太多节点上的数据,容易造成内存消耗,该值可作为一个保护机制,控制一个请求同一时间并发访问的最大分片数量,默认为512。
注意:search_type, request_cache 和allow_partial_search_results 这三个参数,必须查询url级别的参数(query-string parameters),如果使用Rest low Level API时需要特别留意。
2、URI Search
Elasticsearch支持使用URI请求模式来使用Search API,尽管有些参数无法使用,该模式主要还是用于测试,诸如使用CURL查询命令。URI Search示例如下:
GET twitter/_search?q=user:kimchy
URI Search支持如下参数:
- q
定义查询字符串,其语法映射为DSL查询语法之query_string。 - df
查询字符串未使用字段前缀时定义的默认字段。 - analyzer
针对查询字符串使用的分词器。 - analyze_wildcard
是否分析通配符合前缀查询,默认值为false。 - batched_reduce_size
控制协调节点批量发送分片的最大个数,主要是控制协调节点内存的消耗而提供的一种保护机制。 - default_oprator
默认操作类型,可选值为and、or,默认值为or。 - lenient
是否支持类型转换异常,默认为fasle,表示如果将一个字符类型传递给一个数字类型,默认为抛出异常,如果设置true,则忽略该异常。 - explain
类似于执行计划,表示对于每一个命中,包含如果得分是如何算出来的,默认为false。 - _source
用于对_source字段进行过滤,可以设置false来禁止返回_souce字段,也可以支持通配符,例如obj.*,用于字段过滤。 - stored_fields
用于字段过滤,已在字段过滤部分详细介绍过。 - sort
排序,可以类似于关系型数据库的排序语法:fieldName:asc | desc,也可以使用特殊字段_score(表示按分数,默认值)。 - track_scores
当使用排序时,跟踪返回结果中分数计算过程。 - track_total_hits
默认值为true,表示在返回结果中返回满足该查询条件的所有记录数。 - timeout
查询超时时间,默认永不超时。 - terminate_after
是否开启提前结束查询,主要是控制一次查询,从一个分片中返回的最大文档数量,如果开启,返回结果中会包含一个响应参数terminated_early,指示是否提前结束。 - from
用于分页,起始记录数。 - size
用于分页,控制一次查询,从每个分片查询的记录条数。 - search_type
查询类型,对应SearchType searchType,已在文章开头处介绍。 - allow_partial_search_results
是否允许部分分片执行失败,默认为true,也可以集群配置参数:search.default_allow_partial_results来设置默认值。
本节主要是对Elasticsearch Search API有一个概要的认识与如何使用URI进行查询,从下一节开始将深入到Search API各个细节中去,以便大家对Search API的运用得心应手。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
入门科普:Python、R、大数据、云计算最全学习资源都在这里
01 什么是Python Python是一种编程语言,可以让你更快地工作,并且能够更有效地集成系统。Python语言由Guido van Rossum开发。你可以在Python的历史博客上阅读Guido讲述的Python历史。 http://python-history.blogspot.in/2009/01/introduction-and-overview.html 对于Python初学者甚至是经验丰富的人来说,这是值得一读的。以下是其中一段摘录: 许多Python的关键字(if、else、while、for等)与C语言中的相同,Python标识符与C语言具有相同的命名规则,大多数标准运算符与C语言具有相同的含义。当然,显然Python不是C语言,它和C语言一个主要的不同是使用缩进而不是大括号进行语句分组。例如,在C语言中按如下方式编写语句: Python只是完全省略了括号(以及为了维护良好标准而使用的句末分号)并使用以下结构: Python与C语言不同的另一个主要领域是动态类型的使用。在C中,必须始终明确声明变量并给定其特定类型,如int或double。然后,此信息用于执行程序的...
- 下一篇
Spark+Alluxio性能调优十大技巧
本文章转载于:https://zhuanlan.zhihu.com/p/54245707 由于统一访问对象存储(如S3)和HDFS数据的场景的出现和普及,Apache Spark结合Alluxio的大数据栈越来越受欢迎。此外,越来越流行的计算与存储分离的架构导致计算端查询延迟增大。因此,Alluxio常被用作贴近计算端的热数据存储以提高性能。为了能够获得最佳性能,用户需要像使用其他技术栈组合一样遵循最佳的实战经验。本文介绍了在Alluxio上运行Spark时,对于实际工作负载性能调优的十大技巧。 常用链接 Alluxio项目官网 Alluxio Inc网站 Alluxio在各大厂用例 关注Alluxio微信公众号: Alluxio_China 关于数据本地性的技巧 数据本地性就是尽量将计算移到数据所在的节点上进行,避免数据在网络上的传输。分布式数
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker安装Oracle12C,快速搭建Oracle学习环境