You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Spring Data Elasticsearch如何打印查询对应的Elasticsearch JSON格式语句

Spring Data Elasticsearch如何打印查询对应的Elasticsearch JSON格式语句

我之前也碰到过一模一样的问题——能打印出CriteriaChain看到查询的逻辑结构,但就是拿不到ES能直接执行的原生JSON查询,确实有点挠头!下面给你几个简单好用的解决办法,按从省事到灵活的顺序来:

方法一:日志配置直接输出(最省事,无需改代码)

直接在你的配置文件里调整日志级别,针对框架处理ES请求转换的核心包开DEBUG级别,就能自动打印出完整的JSON查询语句:

如果是application.yml

logging:
  level:
    org.springframework.data.elasticsearch.client.elc: DEBUG

如果是application.properties

logging.level.org.springframework.data.elasticsearch.client.elc=DEBUG

配置完重启服务后,当你调用ElasticsearchTemplate::search()时,日志里就会输出包含完整JSON查询的请求体内容,不用写一行额外代码,堪称懒人福音。

方法二:代码层面手动转换(精准控制,适合特定场景)

如果不想开全局日志,只想在某段代码里拿到并打印JSON查询,可以利用框架提供的转换工具,把CriteriaQuery转换成ES原生的查询对象再序列化成JSON:

import org.springframework.data.elasticsearch.client.elc.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.CriteriaQuery;
import co.elastic.clients.elasticsearch._types.query_dsl.Query;
import co.elastic.clients.json.JsonpMapper;

// 假设你已经通过@Autowired注入了ElasticsearchTemplate
@Autowired
private ElasticsearchTemplate elasticsearchTemplate;

public void printEsJsonQuery() {
    // 先构建你的CriteriaQuery
    CriteriaQuery criteriaQuery = new CriteriaQuery(...); // 这里是你自己的查询构建逻辑

    // 1. 把CriteriaQuery转换成ES原生的Query对象
    Query esNativeQuery = elasticsearchTemplate.getQueryConverter().convertQuery(criteriaQuery.getQuery());

    // 2. 用框架自带的JsonpMapper把Query序列化成JSON字符串
    JsonpMapper jsonpMapper = elasticsearchTemplate.getElasticsearchClient()._jsonpMapper();
    String jsonQuery = jsonpMapper.toJson(esNativeQuery);

    // 打印结果
    System.out.println("Elasticsearch原生JSON查询:\n" + jsonQuery);
}

这个方法的好处是不会输出无关日志,只在你需要的地方打印查询内容,适合调试特定业务场景的查询。

小提醒

  • 你之前开的org.springframework.data.elasticsearch.core=TRACE日志级别太高,而且这个包的日志主要是框架内部的流程日志,不会直接输出完整的JSON请求体,所以换针对elc包的DEBUG级别才是正确的方向。
  • 代码转换的方式要注意:不要自己new ElasticsearchTemplate,一定要用Spring容器注入的实例,不然会因为缺少上下文配置导致转换失败。

我自己平时调试的时候用得最多的是第一个方法,零代码成本,重启就能看到结果,非常高效!如果有特殊需求再用第二个方法,你可以根据自己的场景选~

火山引擎 最新活动