如何在 Spring 引导应用程序中显示弹性搜索查询



我正在尝试在 Spring 启动应用程序中进行弹性搜索,我想调试 ElasticsearchRepository 执行的查询。

logging.level.org.elasticsearch.index.search.slowlog.query=INFO spring.data.elasticsearch.properties.index.search.slowlog.threshold.query.info=1ms但我没有看到查询打印在 log

使用 Springboot 2.2.6 和 RestHighLevelClient ,以下方法有效:

logging.level.org.springframework.data.elasticsearch.client.WIRE : trace

这也记录在springboot-data-elasticsearch中。

但是,您需要注意以文档中所述的相同方式初始化RestHighLevelClient Bean。即,使用ClientConfiguration生成器。起初,我创建了 bean 作为 new RestHighLevelClient() 它不起作用。例:

    @Bean(destroyMethod = "close")
    public RestHighLevelClient restClient() {
        ClientConfiguration clientConfiguration = ClientConfiguration.builder()
                .connectedTo(esHost +":" + esPort).usingSsl()
                .build();
        RestHighLevelClient client = RestClients.create(clientConfiguration).rest();
        return client;
    }

我尝试了其他答案,但它在 Spring boot 2.2.2 和 elasticsearch 6.7.2 中不起作用,下面可能对我有用,因为我使用 RestHighLevelClient ,要获取请求和响应正文,我必须在应用程序中启用 apache http 日志记录。

logging.level.org.elasticsearch.client=TRACE
logging.level.org.apache.http=TRACE

在 Spring Boot 2 中,您可以使用以下内容启用查询调试:

logging.level.org.springframework.data.elasticsearch.core=DEBUG

生成的日志将是这样的:

{
  "from" : 0,
  "size" : 10,
  "query" : {
    "bool" : {
      "must" : [
        {
          "query_string" : {
            "query" : "some string",
            "fields" : [
              "nome^1.0"
            ],
            "use_dis_max" : true,
            "tie_breaker" : 0.0,
            "default_operator" : "and",
            "auto_generate_phrase_queries" : false,
            "max_determinized_states" : 10000,
            "enable_position_increments" : true,
            "fuzziness" : "AUTO",
            "fuzzy_prefix_length" : 0,
            "fuzzy_max_expansions" : 50,
            "phrase_slop" : 0,
            "escape" : false,
            "split_on_whitespace" : true,
            "boost" : 1.0
          }
        }
      ],
      "disable_coord" : false,
      "adjust_pure_negative" : true,
      "boost" : 1.0
    }
  },
  "version" : true
}

此致敬意。

我没有使用其他答案,最终认识到问题如下。希望它对谁有相同(错误(的方式有所帮助!

我最初使用 Spring Boot Admin 的"更改日志记录级别"功能(它是 Spring Boot /actuator 的包装器(来更改日志级别。它非常适合普通组件,但奇怪的是,它不适用于弹性搜索。

因此,我必须写下来

logging:
  level:
    org.springframework.data.elasticsearch.client.WIRE: TRACE

在我的application.yml.并且必须重新部署整个应用程序。然后一切都很好,我看到了日志。

我正在使用elasticsearchTemplate.queryForPage()所以在源代码中有一个 if 条件;

    if (QUERY_LOGGER.isDebugEnabled()) {
        QUERY_LOGGER.debug(requestBuilder.toString());
    }

在我的情况下.xml通过将以下行添加到 logback-spring 来激活它;

    <logger name="org.springframework.data.elasticsearch.core.QUERY" level="DEBUG"/>

相关内容

  • 没有找到相关文章

最新更新