首页 > 其他分享 >ElasticSearch中的DSL查询与DSL过滤

ElasticSearch中的DSL查询与DSL过滤

时间:2024-08-11 19:27:07浏览次数:7  
标签:查询 DSL 过滤 ElasticSearch 分词 match must

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查询与过滤,希望能够给大家带来帮助。

标签:查询,DSL,过滤,ElasticSearch,分词,match,must
From: https://blog.csdn.net/qq_56438516/article/details/140935434

相关文章

  • SpringBoot整合ElasticSearch
    文章目录SpringBoot整合ES实现ElasticsearchRepository使用ElasticsearchRestTemplate索引操作文档操作SpringBoot整合ES官方文档:https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#new-features.4-4-0版本选择Elasticsearch7.......
  • Windows ,elasticsearch 启动报错 failed to obtain node locks
    报错:2024.08.1118:14:45ERRORes[][o.e.b.ElasticsearchUncaughtExceptionHandler]uncaughtexceptioninthread[main]org.elasticsearch.bootstrap.StartupException:java.lang.IllegalStateException:failedtoobtainnodelocks,tried[[D:\soft\Java\sonarq......
  • SonarQube启动时,elasticsearch 报错 with lock id [0]; maybe these locations are n
     报错: 查看elasticsearch日志,在安装位置\sonarqube-9.9.6.92038\logs\es.log2024.08.1118:14:45ERRORes[][o.e.b.ElasticsearchUncaughtExceptionHandler]uncaughtexceptioninthread[main]org.elasticsearch.bootstrap.StartupException:java.lang.IllegalStateE......
  • 【Java毕设选题推荐】基于SpringBoot的协同过滤算法美食推荐小程序
    前言:我是IT源码社,从事计算机开发行业数年,专注Java领域,专业提供程序设计开发、源码分享、技术指导讲解、定制和毕业设计服务......
  • 过滤器、拦截器、AOP、ControllerAdvcie执行顺序对比
    过滤器、拦截器、AOP、ControllerAdvcie执行顺序对比0.执行顺序过滤器➡拦截器➡AOP➡ControllerAdvice➡Controller没有异常的情况下,执行顺序如下:有异常的情况下,执行顺序如下:tip:当产生异常后,无论是否有ControllerAdvice处理,HandlerInterceptor都不会执行post......
  • 【Java毕设选题推荐】基于SpringBoot的springbootJAVA的邮件过滤系统设计与实现
    前言:我是IT源码社,从事计算机开发行业数年,专注Java领域,专业提供程序设计开发、源码分享、技术指导讲解、定制和毕业设计服务......
  • Elasticsearch Mapping类型修改
    背景通常数据库进行分库分表后,目前比较常规的作法,是通过将数据异构到Elasticsearch来提供分页列表查询服务;在创建Elasticsearch索引时,基本都是会参考目前的业务需求、关系数据库中的类型以及对数据的相关规划来定义相关字段mapping的类型.在Elasticsearch的mapping中的列(或则......
  • 【Pyspark-驯化】一文搞懂Pyspark中过滤数据when和otherwise函数的使用技巧
    【Pyspark-驯化】一文搞懂Pyspark中过滤数据when和otherwise函数的使用技巧 本次修炼方法请往下查看......
  • 数据库安全-ElasticSearch漏洞复现
    CVE-2014-3120命令执行漏洞一、漏洞详情老版本ElasticSearch支持传入动态脚本(MVEL)来执行一些复杂的操作,而MVEL可执行Java代码,而且没有沙盒,所以我们可以直接执行任意代码。MVEL执行命令代码:importjava.io.*;newjava.util.Scanner(Runtime.getRuntime().exec("whoami").getIn......
  • 深入浅出Java RestClient与Elasticsearch:一次简单的聚合查询实现
    文章目录一、什么是聚合查询?二、开始编写代码三、代码解析四、总结在当今的大数据时代,Elasticsearch作为一个分布式搜索和分析引擎,被广泛应用于各类数据密集型应用中。而使用Java与Elasticsearch交互进行数据操作时,JavaHighLevelRestClient提供了一种方便且......