Elastic Search中Query String常见语法
1 搜索所有数据
timeout参数:是超时时长定义。代表每个节点上的每个shard执行搜索时最多耗时多久。不会影响响应的正常返回。只会影响返回响应中的数据数量。
如:索引a中,有10亿数据。存储在5个shard中,假设每个shard中2亿数据,执行全数据搜索的时候,需要耗时1000毫秒。定义timeout为10毫秒,代表的是shard执行10毫秒,搜索出多少数据,直接返回。
语法:
GET _search?timeout=10ms
结果:
{
"took": 144, #请求耗时多少毫秒
"timed_out": false, #是否超时。默认情况下没有超时机制,也就是客户端等待ES搜索结束(无论执行多久),提供超时机制的话,ES则在指定时长内处理搜索,在指定时长结束的时候,将搜索的结果直接返回(无论是否搜索结束)。指定超时的方式是传递参数,参数单位是:毫秒-ms。秒-s。分钟-m。
"_shards": {
"total": 1, #请求发送到多少个shard上
"successful": 1,#成功返回搜索结果的shard
"skipped": 0, #停止服务的shard
"failed": 0 #失败的shard
},
"hits": {
"total": 1, #返回了多少结果
"max_score": 1, #搜索结果中,最大的相关度分数,相关度越大分数越高,_score越大,排位越靠前。
"hits": [ #搜索到的结果集合,默认查询前10条数据。
{
"_index": "test_index", #数据所在索引
"_type": "my_type", #数据所在类型
"_id": "1", #数据的id
"_score": 1, #数据的搜索相关度分数
"_source": { # 数据的具体内容。
"field": "value"
}
}
]
}
}
2 _all应用1
_all也是ES中的一个内置元数据。也可以成为内置变量名。代表全部的意思。一般来说_all使用的很少。
语法:
GET /_all/_search
这种_all的用法相当于在所有的索引中搜索数据。也就是_all代表所有的索引。
3 multi-index搜索模式
所谓的multi-index就是从多个index中搜索数据。相对使用较少,只有在复合数据搜索的时候,可能出现。一般来说,如果真使用复合数据搜索,都会使用_all。
如:搜索引擎中的无条件搜索。(现在的应用中都被屏蔽了。使用的是默认搜索条件,执行数据搜索。 如: 电商中的搜索框默认值, 搜索引擎中的类别)
无条件搜索,在搜索应用中称为“魔鬼搜索”,代表的是,搜索引擎会执行全数据检索,效率极低,且对资源有非常高的压力。
语法:
GET _search GET /index_name1,index_name2/_search # 搜索多个index中的数据 GET /index_name/type_name1/_search # 所属一个index中type的数据 GET /prefix_*/_search # 通配符搜索
GET /*_suffix/_search GET /index_name1,index_name2/type_name1/_search # 搜索多个index中type的数据 GET /_all/_search # _all代表所有的索引
4 分页搜索
语法:
GET /_search?size=10 # size查询数据的行数 GET /_search?from=0&size=10 # from 从第几行开始查询,行号从0开始。
4.1 deep paging问题
什么是deep paging?
就是搜索深度,如数据有100万,分页要求每页50条数据,总计2万页,现在搜索第1000页,执行的搜索语句就是: GET /_search?from=49999&size=50。执行的时候,请求发送到协调节点中,协调节点将搜索请求发送给所有的节点,而数据可能分部在多个节点中,那么搜索过程就很麻烦了。过程是集群中的每个节点将节点内符合要求的数据返回给协调节点,协调节点再将所有节点返回的数据根据默认排序条件(_score)排序,并筛选最终符合要求的数据返回给客户端。
这个搜索的过程对协调节点的压力太高。尽量避免出现deep paging操作。
上述案例解释:集群有4个节点,每个节点有1个分片(primary shard),每个分片中有数据25万。请求发起,命令为GET /_search?from=49999&size=50。协调节点将请求发给所有的节点,所有的节点分别查询第50000~50050条数据,ES的分页实际上是伪分页,每个节点返回的数据是0~50050条数据。协调节点得到的数据是50050*4条数据。协调节点实现排序,再找出50000~50050的50条数据,再返回。
5 +/-搜索
语法:
GET /products_index/phone_type/_search?q=name:plus GET /products_index/phone_type/_search?q=+name:plus GET /products_index/phone_type/_search?q=-name:plus
+ :和不定义符号含义一样,就是搜索指定的字段中包含key words的数据
- : 与+符号含义相反,就是搜索指定的字段中不包含key words的数据
6 _all应用2
如:电商平台中,搜索手机,问,是搜索商品名中包含手机的商品?还是搜索商品卖点中包含手机的商品?还是搜索商品详情描述中包含手机的商品?
在ES中,可以直接提供一个搜索关键字,不提供搜索的字段名。默认是再全字段数据中搜索关键字内容。
在ES中,每保存一个document,都会将document中所有的field拼接到一起,保存为一个命名为_all的字段。这个_all字段,就是默认搜索的字段。
_all是一个默认使用的搜索数据存储单元,不是一个可以指明使用的字段命名。
语法:
GET /index_name/type_name/_search?q=key_words
这种搜索代表索引中的Document中,任意的一个field包含key_words都会被搜索到。执行命令的时候,ES底层是使用_all元数据搜索的。在ES维护Document的时候,会将Document中的所有字段数据作为一个_all元数据执行的field。如:
Document数据是{ "name" : "zhangsan", "age" : 20, "email" : "zhangsan@163.com" },在ES保存Document的时候,会额外维护一个_all字段,字段数据为"zhangsan 20 zhangsan@163.com"。那么在搜索的时候,不指定要搜索匹配的field,ES就从_all元数据中匹配key_words。
不推荐生产环境中使用,因为数据越复杂,搜索效率越低。
Elastic Search中Query String常见语法的更多相关文章
- Elastic search中使用nested类型的内嵌对象
在大数据的应用环境中,往往使用反范式设计来提高读写性能. 假设我们有个类似简书的系统,系统里有文章,用户也可以对文章进行赞赏.在关系型数据库中,如果按照数据库范式设计,需要两张表:一张文章表和一张赞赏 ...
- Elastic Search中filter的理解
在ES中,请求一旦发起,ES服务器是按照请求参数的顺序依次执行具体的搜索过滤逻辑的.如何定制请求体中的搜索过滤条件顺序,是一个经验活.类似query(指search中的query请求参数),也是搜索的 ...
- Elastic Search中Document的CRUD操作
一. 新增Document在索引中增加文档.在index中增加document.ES有自动识别机制.如果增加的document对应的index不存在.自动创建,如果index存在,type不存在自动创 ...
- elastic search 日期为string类型导致视图无法展示时间的解决办法
尝试将结构化的json数据发送到es(elastic search)上,然后创建视图,这样就能以小时维度查看数据,直接使用post发送到es后,创建索引,结果提示 没有date类型的字段(field) ...
- Elastic Search中DSL Query的常见语法
Query DSL是一种通过request body提交搜索参数的请求方式.就是将请求头参数(?xxx=xxx)转换为请求体参数.语法格式:GET [/index_name/type_name]/_s ...
- k8s中yaml文常见语法
在k8s中,所有的配置都是 json格式的.但为了读写方便,通常将这些配置写成yaml 格式,其运行的时候,还是会靠yaml引擎将其转化为json,apiserver 也仅接受json的数据类型. y ...
- Elastic Search中mapping的问题
Mapping在ES中是非常重要的一个概念.决定了一个index中的field使用什么数据格式存储,使用什么分词器解析,是否有子字段,是否需要copy to其他字段等.Mapping决定了index中 ...
- Elastic Search中normalization和分词器
为key_words提供更加完整的倒排索引. 如:时态转化(like | liked),单复数转化(man | men),全写简写(china | cn),同义词(small | little)等. ...
- Elasticsearch由浅入深(七)搜索引擎:_search含义、_multi-index搜索模式、分页搜索以及深分页性能问题、query string search语法以及_all metadata原理
_search含义 _search查询返回结果数据含义分析 GET _search { , "timed_out": false, "_shards": { , ...
随机推荐
- codeforces#999 E. Reachability from the Capital(图论加边)
题目链接: https://codeforces.com/contest/999/problem/E 题意: 在有向图中加边,让$S$点可以到达所有点 数据范围: $ 1 \leq n \leq 50 ...
- P2089 烤鸡
题目背景 猪猪hanke得到了一只鸡 题目描述 猪猪Hanke特别喜欢吃烤鸡(本是同畜牲,相煎何太急!)Hanke吃鸡很特别,为什么特别呢?因为他有10种配料(芥末.孜然等),每种配料可以放1—3克, ...
- 微服务RESTful 接口设计规范
1.RESTful发展背景及简介 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备......).因此,必须有一种统一的机制,方便不同的前 ...
- Alpha冲刺(6/6)
队名:new game 组长博客:戳 作业博客:戳 组员情况 鲍子涵(队长) 燃尽图 过去两天完成了哪些任务 协调了一下组内的工作 复习了一下SuffixAutomata 接下来的计划 实现更多的功能 ...
- legend3---15、像粉丝数、关注数、课程数等数量数据如何处理
legend3---15.像粉丝数.关注数.课程数等数量数据如何处理 一.总结 一句话总结: 在主表中加入这种数量字段:比如在用户表中加入粉丝数,关注数字段 普通更新:增加数量的时候将数据插入到关联表 ...
- Qt串口通信专题教程
查看以前的教程:Qt编写串口通信程序全程图文讲解 查看Wincom和Lincom介绍:Qt跨平台串口通信软件Wincom与Lincom 下载软件,文档和源码:资源下载 ——————————————20 ...
- ios-runtime拦截touch事件,展示用户触摸效果
[展示效果说明] 对 app 操作录屏时,展示出手指在 app 上的触摸效果可以看到具体点击情况,感觉这样比较直观方便,也不用做视频后期了. 这里简单用 runtime 实现了一个这样的效果,不需要修 ...
- SR论文代码汇总
1.SRCNN 页面 里面有论文,matlab和caffe代码. Tensorflow https://github.com/tegg89/SRCNN-Tensorflow 2.ESPCN 论文链接 ...
- springmvc快速入门(注解版本)
1)springmvc快速入门(传统版) 步一:创建springmvc-day02这么一个web应用 步二:导入springioc,springweb和springmvc相关的jar包 ------- ...
- php的时区修改
Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to ...