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

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://www.kler.cn/a/567960.html

相关文章:

  • Oracle 认证为有哪几个技术方向
  • Java基础语法练习34(抽象类-abstract)(抽象类最佳实践-模版设计模式)
  • 数据挖掘中特征发现与特征提取的数学原理
  • 十、Spring Boot:Spring Security(用户认证与授权深度解析)
  • Cherry Studio + 火山引擎 构建个人AI智能知识库
  • 智慧园区后勤单位消防安全管理:安全运营和安全巡检
  • Postgresql高可用之Pacemaker+Corosync
  • 【前端基础】Day 2 CSS层叠样式表
  • Spring Boot 中 @Repository 注解全析
  • 文件上传漏洞绕过WAF
  • 【docker好用系列】llama-factory环境配置
  • Qt中如果槽函数运行时间久,避免阻塞主线程的做法
  • GPT-4.5 怎么样?如何升级使用ChatGPTPlus/Pro? GPT-4.5设计目标是成为一款非推理型模型的巅峰之作
  • 【nextjs官方demo】Chapter 6连接数据库报错
  • 深入解析React性能优化三剑客:React.memo、useMemo与useCallback
  • Go语言学习笔记(七)——标准库
  • 从指数族到混合模型的全新视角
  • 面试问题——如何解决移动端1px 边框问题?
  • SpringBoot项目中读取resource目录下的文件(六种方法)
  • 2025:人形机器人量产潮与AI硬件终端创业风暴