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


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 Vincent_201707 2024-05-21 10:37 采纳率: 50% 浏览 21 首页/ 大数据 / 用Java来实现elasticsearch的查询,如何用log在后台打印出对应的查询语句 elasticsearchjava '菜'狗'请教'大'神',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的设置 多谢🙏! 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    3条回答 默认 最新

    • Kwan的解忧杂货铺 2024-05-21 10:41
      关注

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

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

      1.导入相关依赖

      
          org.elasticsearch.client
          elasticsearch-rest-high-level-client
          7.11.2
      
      

      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级别
      

      展开全部

      评论
    • 阿里嘎多学长 2024-05-21 10:41
      关注

      以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


      【解题思路】:使用Elasticsearch Java API构建DSL查询,通过日志框架(如Log4j或SLF4J)配置日志记录器,在执行查询前记录查询语句。

      评论
    • 专家-百锦再@新空间代码工作室 全栈领域优质创作者 2024-05-21 10:42
      关注

      对于Elasticsearch的DSL查询语句,我们可以使用Java来实现,并设置log在后台打印出对应的查询语句。为了实现像SQL语句一样方便调试,可以使用log来输出生成的DSL查询语句。

      在Java代码中,我们可以使用Elasticsearch的Java API来构建DSL查询语句,并通过log来输出生成的查询语句。下面是一个简单的示例代码:

      import org.elasticsearch.action.search.SearchRequest;
      import org.elasticsearch.client.RequestOptions;
      import org.elasticsearch.client.RestHighLevelClient;
      import org.elasticsearch.index.query.QueryBuilders;
      import org.elasticsearch.search.builder.SearchSourceBuilder;
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;

      public class ElasticsearchQueryExample {
      private static final Logger LOGGER = LoggerFactory.getLogger(ElasticsearchQueryExample.class);

      public void executeQuery(RestHighLevelClient client) {try {SearchRequest searchRequest = new SearchRequest("
      index_name"
      );
      SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
      sourceBuilder.query(QueryBuilders.matchAllQuery());

      searchRequest.source(sourceBuilder);

      String queryDSL = sourceBuilder.toString();
      LOGGER.info("
      Generated Query DSL: {}"
      , queryDSL);

      client.search(searchRequest, RequestOptions.DEFAULT);
      } catch (Exception e) {LOGGER.error("
      Error executing Elasticsearch query"
      , e);
      }}}

      在上面的示例中,我们首先创建一个SearchRequest对象,并使用SearchSourceBuilder来构建DSL查询语句。在执行查询之前,我们通过logger输出生成的DSL查询语句。

      另外,为了在应用程序中设置log的级别,可以在应用的配置文件中进行配置,例如在logback.xml或者log4j2.xml中设置对应的logger级别,以便在后台打印出相应的日志信息。

      <
      logger name="
      org.elasticsearch"
      level="
      DEBUG"
      />
      <
      logger name="
      org.elasticsearch.client.RestClient"
      level="
      DEBUG"
      />
      <
      logger name="
      org.elasticsearch.client.sniff"
      level="
      DEBUG"
      />

      通过以上设置,可以实现在应用程序中调用Elasticsearch的Java API,并同时输出生成的DSL查询语句作为日志信息,方便在后台验证代码的正确性。希望以上信息能够帮助到你。如果你有任何疑问,欢迎继续提问。


      有问题你别着急,评论留言都可以,看到马上就回复,尽量及时补充齐

      展开全部

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    二值贝叶斯滤波计算4d毫米波聚类目标动静属性
    基于Springboot+vue开发实现自行车租赁管理系统
    【Java基础面试三十四】、接口中可以有构造函数吗?
    树莓派开发笔记(十二):入手研华ADVANTECH工控树莓派UNO-220套件(一):介绍和运行系统
    阿里云物联网平台
    黑马C++ 03 提高5 —— STL常用容器_stack栈容器/queue队列容器/list链表容器
    34. 在排序数组中查找元素的第一个和最后一个位置
    考研政治(一)马克思原理
    相约2023,高通公司宣布参加第六届进博会
    Redis
  • 原文地址:https://ask.csdn.net/questions/8106789