因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享
背景
初学者面对ES的DSL(domain specific language)查询显得一脸懵逼,看着各种嵌套的语句不知道有什么规律,下面就给大家总结一下,方便学习理解记忆。
根下面的关键字
-
「query」:代表查询,搜索 类似于SQL的select关键字 -
「aggs」:代表聚合,类似于SQL的group by 关键字,对查询出来的数据进行聚合 求平均值最大值等 -
「highlight」:对搜索出来的结果中的指定字段进行高亮显示,搜索“「中华人民共和国万岁」”,结果里面符合搜索关键字 全部是红色的高亮显示。
-
「sort」:指定字段对查询结果进行排序显示,类比SQL的order by关键字
-
「from」和*「size」:对查询结果分页,类似于SQL的limit关键字
-
「post_filter」:后置过滤器,在聚合查询结果之后,再对查询结果进行过滤。
query:叶子查询
"mappings": {
"properties": {
"age": {
"type": "long"
},
"country": {
"type": "keyword",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
-
「match」:全局查询,如果是多个词语,会进行分词查询。字母字母默认转换成全小写,进行匹配。
{
"query":{
"match":{
"name":"比尔盖茨"
}
}
}
-
「match_phrase」:查询短语,会对短语进行分词,match_phrase的分词结果必须在text字段分词中都包含,而且顺序必须相同,而且必须都是连续的
{
"query":{
"match_phrase":{
"country":"中 国"
}
}
}
-
「term」:单个词语查询,会精确匹配词语,会根据输入字段精确匹配。
{
"query":{
"term":{
"country":"America"
}
}
}
-
「terms」:多个词语查询,精确匹配,满足多个词语中的任何一个都会返回。
{
"query":{
"terms":{
"country":["America","america"]
}
}
}
-
「exists」:类似于SQL的ISNULL,字段不为空的会返回出来。
{
"query":{
"exists":{
"field":"country"
}
}
}
-
「range」:类似于SQL的between and关键字,返回查询
{
"query":{
"range":{
"age":{
"lte":50,
"gte":20
}
}
}
}
-
「ids」:一次查询多个id,批量返回。
{
"query":{
"ids":{
"values":["JJpNJHgBLLjdyTtc34ag","JZp5JHgBLLjdyTtcEobD"]
}
}
}
-
「fuzzy」:模糊查询
「编辑距离」:就是一个词语变成另外一个词语要编辑的次数,也叫**莱文斯坦距离(Levenshtein distance)**,指两个字符串之间,由一个转成另一个所需的最少编辑操作次数,包括
-
将一个字符替换成另一个字符 -
插入一个字符 -
删除一个字符
{
"query":{
"fuzzy":{
"name":{
"value":"fain",
"fuzziness": 1, // 允许的编辑距离 (match也能配合这个设置)
"prefix_length": 0, // 前多少个字符要保持一致 (match也能配合这个设置)
"max_expansions": 50, // (match也能配合这个设置)
"transpositions": true // true:莱温斯坦距离拓展版,false:经典莱温斯坦距离(match也能配合这个设置)
}
}
}
}
query:复合查询
-
「must」:返回的文档必须满足must子句的条件,并且参与计算分值. -
「must_ not」:返回的文档必须不满足must_not定义的条件 -
「should」:返回的文档可能满足should子句的条件。在一个Bool查询中,如果没有must或者filter,有一个或者多个should子句,那么只要满足一个就可以返回。minimum_should_match参数定义了至少满足几个子句 -
「filter」:返回的文档必须满足filter子句的条件。不会参与计算分值,如果一个查询既有filter又有should,那么至少包含一个should子句,Filter过滤的结果会进行缓存,查询效率更高,建议使用filter。
如喜欢本文,请点击右上角,把文章分享到朋友圈
如有想了解学习的技术点,请留言给若飞安排分享
·END·
相关阅读:
一张图看懂微服务架构路线 基于Spring Cloud的微服务架构分析 微服务等于Spring Cloud?了解微服务架构和框架 如何构建基于 DDD 领域驱动的微服务? 小团队真的适合引入SpringCloud微服务吗?
DDD兴起的原因以及与微服务的关系
微服务之间的最佳调用方式
微服务架构设计总结实践
基于 Kubernetes 的微服务项目设计与实现
微服务架构-设计总结
为什么微服务一定要有网关?
主流微服务全链路监控系统之战
微服务架构实施原理详解 微服务的简介和技术栈 微服务场景下的数据一致性解决方案 设计一个容错的微服务架构
作者:今天例外
来源:https://blog.csdn.net/qq_15022971/article/details/114630565
版权申明:内容来源网络,仅供分享学习,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢!
我们都是架构师!
关注架构师(JiaGouX),添加“星标”
获取每天技术干货,一起成为牛逼架构师
技术群请加若飞:1321113940 进架构师群
投稿、合作、版权等邮箱:admin@137x.com
发表评论