Vincent_201707 2024-05-21 10:37 采纳率: 50%
浏览 45

用Java来实现elasticsearch的查询,如何用log在后台打印出对应的查询语句

'菜'狗'请教'大'神',elasticsearch的dsl查询语句,用java来实现。怎么设置可以像实现sql语句一样,每次调用的时候,log可以在后台打印出,对应的查询语句,来验证我的代码是不是正确形成了对应的dsl语句。

比如用java写sql语句,设置log可以在后台查看

2024-05-21 10:22:14.514  INFO 20008 --- [nio-9021-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 3 ms
2024-05-21 10:22:14.540 DEBUG 20008 --- [nio-9021-exec-1] org.mybatis.spring.SqlSessionUtils       : Creating a new SqlSession
2024-05-21 10:22:14.542 DEBUG 20008 --- [nio-9021-exec-1] org.mybatis.spring.SqlSessionUtils       : SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@624aeb44] was not registered for synchronization because synchronization is not active
2024-05-21 10:22:14.580  INFO 20008 --- [nio-9021-exec-1] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
2024-05-21 10:22:14.692 DEBUG 20008 --- [nio-9021-exec-1] o.m.s.t.SpringManagedTransaction         : JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7e46701e] will not be managed by Spring
2024-05-21 10:22:14.695 DEBUG 20008 --- [nio-9021-exec-1] c.v.e.mapper.SongMapper.selectList       : ==>  Preparing: SELECT * FROM song
2024-05-21 10:22:14.707 DEBUG 20008 --- [nio-9021-exec-1] c.v.e.mapper.SongMapper.selectList       : ==> Parameters: 
2024-05-21 10:22:14.751 DEBUG 20008 --- [nio-9021-exec-1] c.v.e.mapper.SongMapper.selectList       : <==      Total: 808
2024-05-21 10:22:14.752 DEBUG 20008 --- [nio-9021-exec-1] org.mybatis.spring.SqlSessionUtils       : Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@624aeb44]

就像这个,可以看到 ==> Preparing: SELECT * FROM song 是我要的sql语句

怎么可以设置对应的DSL的语句生成呢?
logging:
  level:
    com.baomidou: debug
    com.baomidou.mybatisplus: debug
    com.baomidou.dynamic: debug
    com.vincent.esspringboot.*: debug
    org.mybatis: debug
    org.springframework.jdbc.core: debug
    org.elasticsearch: debug
这是目前,我的yml文件,log的设置
多谢🙏!
  • 写回答

3条回答 默认 最新

  • 关注

    上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    对于elasticsearch的DSL查询语句,可以使用XContentBuilder来构建查询语句,并通过打印XContentBuilder的json字符串形式得到对应的查询语句。具体实现方法如下:

    1.导入相关依赖

    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>7.11.2</version>
    </dependency>
    

    2.构建查询语句

    private String buildQueryString(QueryBuilder queryBuilder) throws IOException {
        XContentBuilder contentBuilder = XContentFactory.jsonBuilder();
        contentBuilder.startObject();
        QueryBuilders.toJson(queryBuilder, contentBuilder);
        contentBuilder.endObject();
        return Strings.toString(contentBuilder);
    }
    
    //调用方法
    QueryBuilder queryBuilder = //构建查询语句
    String queryString = buildQueryString(queryBuilder);
    log.debug("query string: {}", queryString);    //打印查询语句
    

    3.设置log

    通过在yml文件中设置log,可以控制日志级别,从而打印相应的信息。在这里,需要设置org.elasticsearch.client.RestHighLevelClient的debug级别,用于打印es的请求和响应信息。

    logging:
      level:
        org.elasticsearch.client.RestHighLevelClient: DEBUG   #设置elasticsearch的debug级别
    

    综上所述,实现方法如下:

    private String buildQueryString(QueryBuilder queryBuilder) throws IOException {
        XContentBuilder contentBuilder = XContentFactory.jsonBuilder();
        contentBuilder.startObject();
        QueryBuilders.toJson(queryBuilder, contentBuilder);
        contentBuilder.endObject();
        return Strings.toString(contentBuilder);
    }
    
    //调用方法
    QueryBuilder queryBuilder = //构建查询语句
    String queryString = buildQueryString(queryBuilder);
    log.debug("query string: {}", queryString);    //打印查询语句
    

    同时在yml文件中设置log:

    logging:
      level:
        org.elasticsearch.client.RestHighLevelClient: DEBUG   #设置elasticsearch的debug级别
    
    评论

报告相同问题?

问题事件

  • 创建了问题 5月21日

悬赏问题

  • ¥15 CSS通配符清除内外边距为什么可以覆盖默认样式?
  • ¥15 SPSS分类模型实训题步骤
  • ¥15 求解决扩散模型代码问题
  • ¥15 工创大赛太阳能电动车项目零基础要学什么
  • ¥20 limma多组间分析最终p值只有一个
  • ¥15 nopCommerce开发问题
  • ¥15 torch.multiprocessing.spawn.ProcessExitedException: process 1 terminated with signal SIGKILL
  • ¥15 QuartusⅡ15.0编译项目后,output_files中的.jdi、.sld、.sof不更新怎么解决
  • ¥15 pycharm输出和导师的一样,但是标红
  • ¥15 想问问富文本拿到的html怎么转成docx的