如何在Spring-data-elasticsearch中启用查询日志记录

我使用spring-data-elasticsearch框架从elasticsearch服务器获取查询结果,java代码如下:

SearchQuery searchQuery = new NativeSearchQueryBuilder() .withQuery(matchAllQuery()).withSearchType(SearchType.COUNT) .addAggregation(new MinBuilder("min_createDate").field("createDate")) .build(); List list = template.queryForList(searchQuery, Entity.class); 

虽然我怎么知道发送到elasticssearch服务器的原始http查询? 如何启用日志记录,我尝试添加log4j,但似乎spring-data-elasticsearch不记录查询。

我没有Spring Data Elasticsearch的答案,但在ES本身,您可以提高慢速查询日志记录的默认设置,并查看慢速日志中的所有查询。 关于慢速登录的更多细节。

至于如何更改阈值,应使用这样的命令:

 PUT /_settings { "index.search.slowlog.threshold.query.info": "1ms" } 

1ms是您可以设置的最小值。

如果您使用的是spring boot,则可以在application.properties中设置以下内容:

 logging.level.org.elasticsearch.index.search.slowlog.query=INFO spring.data.elasticsearch.properties.index.search.slowlog.threshold.query.info=1ms 

这个很老了,但我还是想分享一下对我有用的解决方案。 要记录通过存储库执行的Spring Data Elasticsearch查询,您需要为包org.springframework.data.elasticsearch.core.*启用DEBUG日志记录,例如,如下所示:

 logging: level: org: springframework: data: elasticsearch: core: DEBUG 

之后,查询将显示在日志中:

 { "from" : 0, "size" : 1, "query" : { "bool" : { "should" : [ { "query_string" : { "query" : "John Doe", "fields" : [ "entityName" ], "default_operator" : "and" } }, { "query_string" : { "query" : "John Doe", "fields" : [ "alias" ], "default_operator" : "and" } } ] } }, "post_filter" : { "bool" : { } } } 

人们会期待一种类似于JPA的优雅解决方案,但它似乎并不存在。

在Spring Boot 1.4上测试过

我遇到了同样的问题,在ElasticsearchTemplate中只有少数方法具有日志调试级别,例如:

 public  Page queryForPage(CriteriaQuery criteriaQuery, Class clazz) { QueryBuilder elasticsearchQuery = new CriteriaQueryProcessor().createQueryFromCriteria(criteriaQuery.getCriteria()); QueryBuilder elasticsearchFilter = new CriteriaFilterProcessor().createFilterFromCriteria(criteriaQuery.getCriteria()); SearchRequestBuilder searchRequestBuilder = prepareSearch(criteriaQuery, clazz); if (elasticsearchQuery != null) { searchRequestBuilder.setQuery(elasticsearchQuery); } else { searchRequestBuilder.setQuery(QueryBuilders.matchAllQuery()); } if (criteriaQuery.getMinScore() > 0) { searchRequestBuilder.setMinScore(criteriaQuery.getMinScore()); } if (elasticsearchFilter != null) searchRequestBuilder.setPostFilter(elasticsearchFilter); if (logger.isDebugEnabled()) { logger.debug("doSearch query:\n" + searchRequestBuilder.toString()); } SearchResponse response = getSearchResponse(searchRequestBuilder .execute()); return resultsMapper.mapResults(response, clazz, criteriaQuery.getPageable()); }