欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > ElasticSearch中的DSL查询与DSL过滤

ElasticSearch中的DSL查询与DSL过滤

2024/10/24 22:24:57 来源:https://blog.csdn.net/qq_56438516/article/details/140935434  浏览:    关键词:ElasticSearch中的DSL查询与DSL过滤

DSL查询

定义

对于简单查询,使用查询字符串比较好,但是对于复杂查询,由于条件多,逻辑嵌套复杂,查询字符串不易组织与表达,且容易出错,因此推荐复杂查询通过DSL使用JSON内容格式的请求体代替。

DSL查询是由ES提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。DSL有两部分组成:DSL查询(like)和DSL过滤(非like)。

语法

GET /cm/user/_search
{"query": {"match_all": {}},"from": 20, "size": 10,"_source": ["username", "age", "id"],"sort": [{"join_date": "desc"},{"age": "asc"}]
}

 match_all 表示 查询所有数据,查询返回fullName,age和email几个列,按照加入日期和年龄进行排序

定向查询

GET /cm/user/_search
{"query" : {"match" : {"username" : "老李"}}
}

 查询username中包含“老李”的内容,match指的是“标准查询”,该查询方式会对查询的内容进行分词。DSL查询可以支持的查询方式很多,如term词元查询 ,range范围查询等等。

DSL过滤

定义

DSL过滤语句和DSL查询语句非常相似,但是它们的使用目的却不同:DSL过滤查询文档的方式更像是对于我的条件"有"或者"没有"(等于 ;不等于),而DSL查询语句则像是"有多像"(模糊查询)。

查询与过滤的区别

DSL过滤和DSL查询在性能上的区别:

  • 过滤结果可以缓存并应用到后续请求。-> 精确过滤后的结果拿去模糊查询性能高

  • 查询语句同时匹配文档,计算相关性,所以更耗时,且不缓存。

  • 过滤语句可有效地配合查询语句完成文档过滤。

总结:需要模糊查询(分词查询)的使用DSL查询 ,需要精确查询的使用DSL过滤,在开发中组合使用(组合查询) ,关键字查询使用DSL查询,其他的都 是用DSL过滤。

GET /cm/user/_search
{"query": { "bool": { 		//booleanQuery 组合"must": [{	//与(must) 或(should) 非(must not) "match": { //match : 匹配,吧查询的内容分词后去查询"username": "rose"},}],"should": [{	//与(must) 或(should) 非(must not) "match": { //match : 匹配,吧查询的内容分词后去查询"username": "jack"},}],"filter": {"term": {"name": "jack rose"  }}}},"from": 20,"size": 10,"_source": ["name", "age", "username"],"sort": [{"join_date": "desc"}, {"age": "asc"}]
}

解释:

  • query : 查询,所有的查询条件在query里面

  • bool : 组合搜索bool可以组合多个查询条件为一个查询对象,这里包含了 DSL查询和DSL过滤的条件

  • must : 必须匹配 :与(must) 或(should) 非(must_not)

  • match:分词匹配查询,会对查询条件分词 , multi_match :多字段匹配

  • filter: 过滤条件

  • term:词元查询,不会对查询条件分词

  • from,size :分页

  • _source :查询结果中需要哪些列

  • sort:排序

总计:ES在当前的市场中应用面十分广泛,此次给大家简单介绍一下其中的DSL查询与过滤,希望能够给大家带来帮助。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com