elasticsearch(4) 轻量搜索
一 空搜索
搜索API的最基础的形式是没有指定任何查询的空搜索 ,它简单地返回集群中所有索引下的所有文档:
示例
GET 127.0.0.1:9200/_search
响应
{
"took": ,
"timed_out": false,
"_shards": {
"total": ,
"successful": ,
"skipped": ,
"failed":
},
"hits": {
"total": ,
"max_score": ,
"hits": [
{
"_index": "test",
"_type": "test",
"_id": "WOTj8GYBuXRyDW5PpvRN",
"_score": ,
"_source": {
"first_name": "John",
"last_name": "Smith",
"age": ,
"about": "I love to go rock climbing",
"interests": [
"sports",
"music"
]
}
},
{
"_index": "test",
"_type": "test",
"_id": "",
"_score": ,
"_source": {
"hello": "world",
"author": "wuzhe"
}
},
{
"_index": "test",
"_type": "test",
"_id": "",
"_score": ,
"_source": {
"test": "test10",
"author": "wuzhe"
}
},
{
"_index": "megacorp",
"_type": "employee",
"_id": "",
"_score": ,
"_source": {
"first_name": "John",
"last_name": "Smith",
"age": ,
"about": "I love to go rock climbing",
"interests": [
"sports",
"music"
]
}
},
{
"_index": "test",
"_type": "test",
"_id": "",
"_score": ,
"_source": {
"first_name": "John",
"last_name": "Smith",
"age": ,
"about": "I love to go rock climbing",
"interests": [
"sports",
"music"
]
}
}
]
}
}
我们可以看到响应中的hits段,total代表了es中总共查询到的文档个数,hits里的hits部分则是具体文档的内容,包括文档的index、type、id以及source。空搜索默认返回的是前10个文档的内容。
若想返回更多文档,Elasticsearch 接受 from
和 size
参数:
size 表示应该返回的结果数,默认是10
from 表示应该跳过的结果数, 默认是0
例
GET 127.0.0.1/_search?size=20&from=10
表示获取第11条到30条的文档
- 需要注意的一点是:
理解为什么深度分页是有问题的,我们可以假设在一个有 5 个主分片的索引中搜索。 当我们请求结果的第一页(结果从 1 到 10 ),每一个分片产生前 10 的结果,并且返回给 协调节点,协调节点对 50 个结果排序得到全部结果的前 10 个。现在假设我们请求第 1000 页--结果从 10001 到 10010 。所有都以相同的方式工作除了每个分片不得不产生前10010个结果以外。 然后协调节点对全部 50050 个结果排序最后丢弃掉这些结果中的 50040 个结果。可以看到,在分布式系统中,对结果排序的成本随分页的深度成指数上升。这就是 web 搜索引擎对任何查询都不要返回超过 1000 个结果的原因。
took字段代表的这次搜索的响应时间。
shards
部分告诉我们在查询中参与分片的总数,以及这些分片成功了多少个失败了多少个。正常情况下我们不希望分片失败,但是分片失败是可能发生的。如果我们遭遇到一种灾难级别的故障,在这个故障中丢失了相同分片的原始数据和副本,那么对这个分片将没有可用副本来对搜索请求作出响应。假若这样,Elasticsearch 将报告这个分片是失败的,但是会继续返回剩余分片的结果。
timed_out字段
告诉我们查询是否超时。默认情况下,搜索请求不会超时。但如果低响应时间比完成结果更重要,可以指定 timeout超时时间
例:
GET 127.0.0.1:9200/_search?timeout=10ms
这样的话,在搜索超时之前,ES会返回每个分片中已经查询到的结果,
在请求超时之前,Elasticsearch 将会返回已经成功从每个分片获取的结果。 但timeout
不是停止执行查询,它仅仅是告知正在协调的节点返回到目前为止收集的结果并且关闭连接。在后台,其他的分片可能仍在执行查询即使是结果已经被发送了。
二 指定索引以及类型
如果想在一个或多个特殊的索引并且在一个或者多个特殊的类型中进行搜索。我们可以通过在URL中指定特殊的索引和类型达到这种效果。
GET 127.0.0.1:9200/_search
在所有的索引中搜索所有的类型
GET 127.0.0.1:9200/test/_search
在 test索引下搜索所有的类型
GET 127.0.0.1:9200/test1,test2/_search
在 test1 和 test2 中搜索。
除了指定索引,指定类型的方式和指定索引是一样的
- 127.0.0.1/9200/test/test/_search
在索引test,类型test下搜索所有文档
ES还提供了‘*’作为通配符
GET 127.0.0.1:9200/t*/_search
在所有以t开头的索引下搜索
GET 127.0.0.1:9200/*/test/_search
在所有索引下的test的类型下搜索
三 轻量搜索
ES提供两种形式的搜索API ,一种是轻量的:查询字符串版本,另一种则是更完整的请求体版本。
先来说一下轻量搜索:查询字符串版本,这种查询方式要求在查询字符串中传递所有的参数。这种方式非常适用于通过命令行做即席查询。
这种搜索方式的结构为
ip:port/_search?q=查询字符串
查询字符串的生成是对以下规则生成的字符串做一次urlEncode
1、若想要查询某个字段包含某个单词的所有文档
+name:xx
表示为查询name字段包含xx的所有文档
2、多个条件之间用空格分割
+name:xx +age:20
表示为查询name包含xx且age包含20的所有文档
3、+
前缀表示必须与查询条件匹配, -
前缀表示一定不与查询条件匹配。没有 +
或者 -
的所有其他条件都是可选的,匹配的越多,文档就越相关。
+name:xx -age:>20
表示为name包含xx并且排除age>20的所有文档
4、对_all字段查询,,ES会取出一个文档所有字段的值拼接成一个大的字符串,作为 _all
字段进行索引
+(xx)
表示查询所有包含xx的文档
复杂查询示例
+name:(xx yy) +age:> +(football basketball)
表示 查询name属性为xx 或yy 且age属性>20 ,且所有文档内容包含football 或者basketball的文档
编码后的查询字符串为
%2Bname%3A%28xx+yy%+%2Bage%3A%3E20+%2B%28football+basketball%
查询请求为
GET 127.0.0.1:9200/_search?q=%2Bname%3A%28xx+yy%29+%2Bage%3A%3E20+%2B%28football+basketball%29
从中,我们可以看出轻量搜索可以通过简洁的查询字符串表达很复杂的查询。对于通过命令做一次性查询,或者是在开发阶段,都非常方便。
但是,这种精简让调试更加晦涩和困难。而且很脆弱,一些查询字符串中很小的语法错误,像 -
, :
, /
或者 "
不匹配等,将会返回错误而不是搜索结果。
最后,查询字符串搜索允许任何用户在索引的任意字段上执行可能较慢且重量级的查询,这可能会暴露隐私信息,甚至将集群拖垮。
所以结论是除非是非常信任用户,否则不推荐直接向用户暴露查询字符串功能。
elasticsearch(4) 轻量搜索的更多相关文章
- elasticsearch(5) 请求体搜索
上一篇提到的轻量搜索非常简单便捷,但是通过请求体查询可以更充分的利用查询的强大功能.因为_search api中大部分参数是通过HTTP请求体而非查询字符串来传递的. 一 空查询 对于空查询来说,最简 ...
- 编写轻量ajax组件01-对比webform平台上的各种实现方式
前言 Asp.net WebForm 和 Asp.net MVC(简称MVC) 都是基于Asp.net的web开发框架,两者有很大的区别,其中一个就是MVC更加注重http本质,而WebForm试图屏 ...
- 推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler定时器
在C#WINFORM或者是ASP.NET的WEB应用程序中,根据各种定时任务的需求,比如:每天的数据统计,每小时刷新系统缓存等等,这个时候我们得应用到定时器这个东东. .NET Framework有自 ...
- OWIN轻量型框架介绍
OWIN轻量型框架介绍 阅读目录 引言 框架的特色 如何启动 各项功能 静态路由的3种写法 伪静态路由的支持 处理Form表单提交的文件 流式处理Post请求的数据 多种请求类型自动识别 响应处理 请 ...
- 阿里云 轻量应用服务器(LAMP) 使用日志记录
phpStudy(PHP运行环境一键安装包) https://www.jb51.net/softs/182860.html 0:PHP开发工具 https://netbeans.org/downloa ...
- 轻量应用服务器安装 phpMyAdmin
第一步:在phpMyAdmin官方网站http://www.phpmyadmin.net/downloads/下载源码包并解压 cd /usr/local/src wget https://files ...
- 实战ELK(4)Metricbeat 轻量型指标采集器
一.介绍 用于从系统和服务收集指标.从 CPU 到内存,从 Redis 到 Nginx,Metricbeat 能够以一种轻量型的方式,输送各种系统和服务统计数据. 1.系统级监控,更简洁(轻量型指标采 ...
- hexo——轻量、简易、高逼格的博客
背景 写blog虽然经历了N多不同时代的产品,恒久不变的始终是自己无人问津的网站.虽然没几个人看,还是隔断时间就要折腾一下.从最开始的wordpress,到tale,到现在的hexo,网站变得越来越简 ...
- ElasticSearch 2 (16) - 深入搜索系列之近似度匹配
ElasticSearch 2 (16) - 深入搜索系列之近似度匹配 摘要 标准的全文搜索使用TF/IDF处理文档.文档里的每个字段或一袋子词.match 查询可以告诉我们哪个袋子里面包含我们搜索的 ...
随机推荐
- Docker报错 WARNING: IPv4 forwarding is disabled. Networking will not work.
问题:创建容器的时候报错WARNING: IPv4 forwarding is disabled. Networking will not work. # docker run -it -p 3000 ...
- Cordova入门系列(四)自定义Cordova插件--showToast
前三篇Cordova入门系列,简单讲解了Cordova,以及如何调用Cordova插件,今天我们讲解一下如何自己做一个插件. 自定义插件,就是自己写一些安卓java代码,然后和js代码以及配置文件,封 ...
- conda命令简单使用
Anaconda是一种Python语言的免费增值开源发行版,用于进行大规模数据处理.预测分析,和科学计算,致力于简化包的管理和部署.Anaconda使用软件包管理系统Conda进行包管理. 1.查看系 ...
- Postman应用笔记
Postman应用: 项目组织格式 Collections 集合--项目--根路径文件夹 文件夹 集合下只支持1级文件夹 文件夹 Request --请求 url 认证参数,头信息,体信息(Autho ...
- python 数据分类汇总
STEP1: #读取数据: import pandas as pdinputfile_1 = "F:\\大论文实验\\数据处理\\贫困人口数据_2015.xlsx" data1 = ...
- js转盘大抽奖 自定义概率
公司项目搞优惠活动,让做一个转盘抽奖的活动,转盘抽奖让他转起来 按照概率停止其实都麻烦,但是概率如果设置在前端就会很大的安全漏洞,所以无论为了安全性还是后期的维护问题都要把概率写到后台配置里然后读取配 ...
- [GXOI/GZOI2019]与或和
考虑拆位,计算每一个二进制位的贡献. 问题转化为求一个01矩阵的全0/1的子矩形个数. 考虑计算以第i行第j列为右下角的合法子矩形个数. 发现合法的左上角范围向左是单调下降的. 可以用一个单调栈来维护 ...
- IntelliJ IDEA 2017.3.1安装步骤
https://www.jetbrains.com/idea/download/#section=windows 下载旗舰版 1.下载完成后,运行安装: 2.next: 3.选择你要安装的目录,nex ...
- 【转】PO/POJO/BO/DTO/VO的区别
PO :persistent object持久对象 1 .有时也被称为Data对象,对应数据库中的entity,可以简单认为一个PO对应数据库中的一条记录. 2 .在hibernate持久化框架中 ...
- restore not found的错误(问题2)
最近在写gan,那么就牵扯到在一个session中加载两个图,restore的时候会有问题.如这篇文章写的(http://blog.csdn.net/u014659656/article/detail ...