ES如何打印DSL

devtools/2025/3/4 3:20:02/

看了一下官网版本已经来到了8.17

正常打印似乎不行,突破的地方则是 藏在@JsonpDeserializable 这个注解上;

@JsonpDeserializable
public class SearchRequest

因此只有反序列化出来之后才能打印,似乎就这么简单,看源码或许能更快的解决问题

方法一 查询打印

SearchRequest.Builder builder = new SearchRequest.Builder();
builder.query(q -> q.bool(boolQuery));
SearchRequest build = builder.build();
log.info("search request:【{}】", searchDSL(build));
java">    public String searchDSL(SearchRequest searchRequest) {// 创建 JSON 生成器和 JSON 映射器try (StringWriter writer = new StringWriter();JsonGenerator generator = Json.createGenerator(writer)) {JsonpMapper mapper = new JacksonJsonpMapper();searchRequest.serialize(generator, mapper);generator.close();return writer.toString();} catch (Exception e) {log.error("search exception", e);}return null;}

打印es请求日志,在application.properties中添加 或者放到yaml 文件中

logging.level.org.elasticsearch.client.RestClient=DEBUG

效果

2025-02-26T22:59:26.458+08:00  INFO 35528 --- [unique-search] [nio-8080-exec-4] c.u.framework.common.utils.EsClient      : search request:【{"query":{"bool":{"must":[{"term":{"id":{"value":"1"}}},{"term":{"edition":{"value":"工信部出版社"}}},{"fuzzy":{"bookName":{"value":"我"}}}]}}}】
2025-02-26T22:59:26.594+08:00 DEBUG 35528 --- [unique-search] [nio-8080-exec-4] org.elasticsearch.client.RestClient      : request [POST https://localhost:9200/textbook/_search?typed_keys=true] returned [HTTP/1.1 200 OK]

方式二 AOP打印

使用aop对调用的方法进行处理;

java">import co.elastic.clients.elasticsearch.core.SearchRequest;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;@Aspect
@Component
@Slf4j
public class WebLogAspect {@Pointcut("execution(public * co.elastic.clients.elasticsearch.ElasticsearchClient.search(..))")public void before() {}@Before("before()")public void logRequest(JoinPoint joinPoint) {Object[] args = joinPoint.getArgs();if (args.length > 0 && args[0] instanceof SearchRequest) {SearchRequest searchRequest = (SearchRequest) args[0];log.info("请求参数: {}", searchRequest);}}
}

效果

2025-03-01T18:23:02.180+08:00  INFO 30812 --- [unique-search] [nio-8080-exec-4] c.u.framework.common.aop.WebLogAspect    : 请求参数: SearchRequest: POST /textbook/_search?typed_keys=true {"from":0,"query":{"bool":{"must":[{"wildcard":{"email":{"value":"*qq.com"}}}]}},"size":10,"sort":[{"id":{"order":"desc"}}]}


http://www.ppmy.cn/devtools/164353.html

相关文章

【FL0091】基于SSM和微信小程序的社区二手物品交易小程序

🧑‍💻博主介绍🧑‍💻 全网粉丝10W,CSDN全栈领域优质创作者,博客之星、掘金/知乎/b站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战,以及程序定制化开发…

C/C++跳动的爱心

系列文章 序号直达链接1C/C李峋同款跳动的爱心2C/C跳动的爱心3C/C经典爱心4C/C满屏飘字5C/C大雪纷飞6C/C炫酷烟花7C/C黑客帝国同款字母雨8C/C樱花树9C/C奥特曼10C/C精美圣诞树11C/C俄罗斯方块小游戏12C/C贪吃蛇小游戏13C/C孤单又灿烂的神14C/C闪烁的爱心15C/C哆啦A梦16C/C简单…

0x01 html和css

css 对于三种css使用方式&#xff1a; 第一种&#xff1a;行内样式 <span style"color: grey;">2024年05月15日 20:07</span>第二种&#xff1a;内部样式 <!DOCTYPE html> <html lang"en"> <head>...<style>span{…

Exoplayer(MediaX)实现音频变调和变速播放

在K歌或录音类应用中变调是个常见需求&#xff0c;比如需要播出萝莉音/大叔音等。变速播放在影视播放类应用中普遍存在&#xff0c;在传统播放器Mediaplayer中这两个功能都比较难以实现&#xff0c;特别在低版本SDK中&#xff0c;而Exoplayer作为google官方推出的Mediaplayer替…

机器学习:监督学习、无监督学习和强化学习

机器学习&#xff08;Machine Learning, ML&#xff09;是人工智能&#xff08;AI&#xff09;的一个分支&#xff0c;它使计算机能够从数据中学习&#xff0c;并在没有明确编程的情况下执行任务。机器学习的核心思想是使用算法分析数据&#xff0c;识别模式&#xff0c;并做出…

Go 接口使用

个人学习笔记 接口作用 1. 实现多态 多态允许不同的类型通过实现相同的接口&#xff0c;以统一的方式进行处理。这使得代码更加灵活和可扩展&#xff0c;提高了代码的复用性。 示例代码&#xff1a; package mainimport ("fmt" )// 定义一个接口 type Speaker int…

图数据库Neo4j面试内容整理-Neo4j 数据库模型设计

Neo4j 数据库模型设计 是将实际业务问题转化为图数据模型的过程。与关系型数据库不同,Neo4j 是基于图的数据库,它通过 节点(Node)、关系(Relationship) 和 属性(Property) 来表示和存储数据。在 Neo4j 中,数据被建模为图结构,其中节点代表实体,关系代表实体之间的关…

Hive之正则表达式RLIKE详解及示例

目录 一、RLIKE 语法及核心特性 1. 基本语法 2. 核心特性 二、常见业务场景及示例 场景1&#xff1a;过滤包含特定模式的日志&#xff08;如错误日志&#xff09; 场景2&#xff1a;验证字段格式&#xff08;如邮箱、手机号&#xff09; 场景3&#xff1a;提取复杂文本中…