[ElasticSearch]搜索
1. 空搜索
测试数据:
https://gist.github.com/clintongormley/8579281
1.1 搜索
最基本的搜索API是空搜索(empty search),它没有指定任何的查询条件,只返回集群索引中的所有文档:
curl -XGET 'localhost:9200/_search?pretty'
Java版本:
SearchRequestBuilder searchRequestBuilder = client.prepareSearch(); SearchResponse response = searchRequestBuilder.get();
返回的结果如下:
{ "took": 4, "timed_out": false, "_shards": { "total": 10, "successful": 10, "failed": 0 }, "hits": { "total": 13, "max_score": 1.0, "hits": [ { "_index": "gb", "_type": "tweet", "_id": "5", "_score": 1.0, "_source": { "date": "2014-09-15", "name": "Mary Jones", "tweet": "However did I manage before Elasticsearch?", "user_id": 2 } }, { "_index": "gb", "_type": "tweet", "_id": "13", "_score": 1.0, "_source": { "date": "2014-09-23", "name": "Mary Jones", "tweet": "So yes, I am an Elasticsearch fanboy", "user_id": 2 } } ... ] } }
1.2 hits
返回结果中最重要的部分是hits
,它包含total
字段来表示匹配到的文档总数,并且一个hits
数组包含所查询结果的前十个文档。
在hits
数组中每个结果包含文档的_index
、 _type
、 _id
以及_source
字段。这意味着我们可以直接从返回的搜索结果中获取整个文档。这不像其他的搜索引擎,仅仅返回文档的ID,需要你自己单独去获取文档。
每个结果还有一个_score
字段,这是一个相关性得分 ,它衡量了文档与查询的匹配程度。默认情况下,首先返回最相关性最高的文档,就是说,返回文档是按照_score
降序排列的。在这个例子中,我们没有指定任何查询,故所有的文档具有相同的相关性,因此对所有的结果都是中性的 _score为1。
max_score
是文档与查询相匹配的最高_score
。
1.3 Took
took告诉我们整个搜索请求执行多少毫秒数。
1.4 Shards
_shards
告诉我们参与查询的分片总数(total),有多少是成功的(successful),有多少的是失败的(failed)。
通常我们不希望分片失败,但是还是有可能发生。如果我们遭受一些重大故障,导致同一分片主的主分片和副本分片都丢失,那么这个分片就不会响应搜索请求。这种情况下,Elasticsearch将报告这个分片failed,但仍将继续返回剩余分片上的结果。
1.5 Timeout
time_out
值告诉我们查询是否超时。默认情况下,搜索请求不会超时。 如果低响应时间比完整结果更重要,您可以将超时指定为10或10ms(10毫秒)或1秒(1秒):
curl -XGET 'localhost:9200/_search?timeout=10ms'
在请求超时之前,ElasticSearch将返回从每个分片收集到的任何结果。
警告
应当注意的是 timeout 不是停止执行查询,它仅仅是告知协调节点返回到目前为止收集的结果并且关闭连接。在后台,其他的分片可能仍在执行查询,即使结果已经发送了。
使用超时是因为对你的 SLA(服务等级协议)很重要的,而不是因为想去中止长时间运行的查询。
2. 多索引和多类型搜索
如果不对我们的搜索做出特定索引或者特定类型的限制,就会搜索集群中的所有文档。Elasticsearch将搜索请求 并行转发到每一个主分片或者副本分片,收集结果以选择整体中前10名,并且返回给我们。
但是,通常,您将希望在一个或多个特定索引中搜索,也可能需要搜索一个或多个特定类型。 我们可以通过在URL中指定索引和类型来执行此操作,如下所示:
/_search 在所有的索引中搜索所有的类型 /gb/_search 在gb索引中搜索所有的类型 /gb,us/_search 在gb和us索引中搜索所有的类型 /g*,u*/_search 在以g或者u开头的索引中搜索所有的类型 /gb/user/_search 在gb索引中搜索user类型 /gb,us/user,tweet/_search 在gb和us索引中搜索user和tweet类型 /_all/user,tweet/_search 在所有的索引中搜索user和tweet类型
Java版本:
SearchRequestBuilder searchRequestBuilder = client.prepareSearch(); searchRequestBuilder.setIndices("*index"); SearchResponse response = searchRequestBuilder.get();
从下面源码中,我们可以知道,设置索引和类型的方法参数是可变参数,因此我们可以设置多个索引或者类型。
public SearchRequestBuilder setIndices(String... indices) { request.indices(indices); return this; } public SearchRequestBuilder setTypes(String... types) { request.types(types); return this; }
当在单个索引中搜索时,Elasticsearch将搜索请求转发到该索引中每个分片的主分片或副本分片上,然后从每个分片收集结果。 在多个索引中搜索的方式完全相同 - 会涉及更多的分片。
提示
搜索一个具有五个主分片的索引完全等同于搜索每个具有一个主分片的五个索引。
原文:https://www.elastic.co/guide/en/elasticsearch/guide/current/empty-search.html
https://www.elastic.co/guide/en/elasticsearch/guide/current/multi-index-multi-type.html

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Hortonworks(HDP)开发者认证-考试大纲
本项目是 Hortonworks开发者认证官方文档的中文翻译版,Hortonworks致力于打造一个全新的大数据处理平台来满足大数据处理和分析的各个使用场景,它组合了大数据平台使用的各个组件, 比如Hadoop、Hbase、Hive、Spark等等一些列的组件, 它安装方便使用便捷, 而且已经在2000节点以上的节点上商用. 本次翻译主要针对对Hortonworks感兴趣和致力于从事大数据方法开发的人员提供有价值的中文资料,希望能够对大家的工作和学习有所帮助。 由于我公司鼓励大家考Hortonworks认证(呵呵,公司出费用),于是今天简单的看了下官方考试大纲,感觉还不错,故翻译了下供大家参考学习,本次翻译并没有咬文嚼字, 而是根据我个人的理解进行翻译, 由于本人能力有限难免有些地方翻译不到位,还希望大家谅解,同时也鼓励大家去看官方文档。 基于真才实学的认证 认证概述 Hortonworks重新设计了它的开发者认证程序, 为了创建一个通过在Hortonworks(HDP)集群上亲自操作所获取的专业知识的认证体系, 而不是回答多项选择问题. HDP开发者认证考试(HDPCD)第一个比较新...
- 下一篇
阿里云大数据利器Maxcompute学习之-假如你使用过hive
如果您是一个大数据开发工程师并且使用过hadoop的hive框架,那么恭喜您,阿里云的大数据计算服务-Maxcompute,您已经会了90%。这篇文章就来简单对比下Maxcompute和hive的异同,来方便刚开始使用Maxcompute的用户,从hive秒速迁移到Maxcompute的使用上。 首先,回顾下hive的概念。 1、hive是基于hadoop的,以表的形式来存储数据,实际上数据是存储在hdfs上,数据库和表其实是hdfs上的两层目录,数据是放在表名称目录下的,计算还是转换成mapreduce计算。2、hive可以通过客户端命令行和java api操作数据3、hive是hql语言操作表,跟通用sql语言的语法大致相同,可能会多一些符合本身计算的函数等。hql会解析成mapreduce进行相关逻辑计算4、hive有分区
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS6,CentOS7官方镜像安装Oracle11G
- Mario游戏-低调大师作品
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS关闭SELinux安全模块
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果