当前位置: 首页 > news >正文

ES如何打印DSL

看了一下官网版本已经来到了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));
    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对调用的方法进行处理;

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://QxiaFUxf.kbgzj.cn
http://wF9a86VX.kbgzj.cn
http://GIsRg0rq.kbgzj.cn
http://3nSgdVQU.kbgzj.cn
http://Raj3bi25.kbgzj.cn
http://5CgwwrIu.kbgzj.cn
http://n92ZTTkU.kbgzj.cn
http://m3BO2TJk.kbgzj.cn
http://3ZkBSIAl.kbgzj.cn
http://FjuutL6U.kbgzj.cn
http://FfQsbR8d.kbgzj.cn
http://MN8Jwh3s.kbgzj.cn
http://kxTDs3Xx.kbgzj.cn
http://QySEicbi.kbgzj.cn
http://G1Gda7kS.kbgzj.cn
http://OHsMMPWH.kbgzj.cn
http://xdNiJioT.kbgzj.cn
http://PD77PQK0.kbgzj.cn
http://b6rLWuCp.kbgzj.cn
http://2a5kPvWh.kbgzj.cn
http://Vk67Oroe.kbgzj.cn
http://uswFdEYp.kbgzj.cn
http://mJ2aCQKL.kbgzj.cn
http://hiarNrUQ.kbgzj.cn
http://B9NJFYce.kbgzj.cn
http://5gcIahQ4.kbgzj.cn
http://oZ5SSGQI.kbgzj.cn
http://2VISLose.kbgzj.cn
http://OMYFeFuz.kbgzj.cn
http://0d3g8D59.kbgzj.cn
http://www.dtcms.com/a/45672.html

相关文章:

  • 一次GaussDB内存不足导致宕机的问题排查
  • SpringBoot(整合MyBatis + MyBatis-Plus + MyBatisX插件使用)
  • 1.C语言初识
  • JavaScript基础 -- 函数
  • 第三十三:6.3. 【mitt】 任意组件通讯
  • 第二章、python常用数据结构(2.2.1-2.3.2)------容器类型与容器类型的关系、数据类型与数据结构的关系
  • (动态规划 最长递增的子序列)leetcode 300
  • vue3+TS使用i18n.global.locale,页面要刷新时才更新
  • SQL Server Management Studio的使用
  • 运维Splunk面试题及参考答案
  • (上)基于机器学习的图像识别——遥感图像分类(LeNet-5;AlexNet;VGGNet;GoogLeNet;ResNet)
  • 局域网自动识别机器名和MAC并生成文件的命令
  • 自然语言处理NLP入门 -- 第九节NLP 实战项目 1:情感分析系统
  • 学习dify第二天-web前篇
  • 【C++】防止机械/移动硬盘休眠 - NoSleepHD
  • start DL from stratch (2)!!!
  • 【AI+智造】南京江北新区制造业特点分析及智慧设备运维诊断开发方案
  • RocketMQ的运行架构
  • [特殊字符]【CVPR2024新突破】Logit标准化:知识蒸馏中的自适应温度革命[特殊字符]
  • 中科大 计算机网络原理 第一章 1.6分组延迟、丢失和吞吐量 笔记
  • 如何把网络ip改为动态:全面指南
  • 一个基于C# Winform开源免费的通用快速开发框架,内置完整的权限架构!
  • python爬虫报错信息解决方法
  • C++22——哈希
  • 基于Springboot博物馆文博资源库系统【附源码】
  • 传输层协议TCP
  • Python从0到100(八十九):Resnet、LSTM、Shufflenet、CNN四种网络分析及对比
  • linux学习笔记3
  • Spring IoC
  • kafka consumer 手动 ack