fud*_*udy 12 java elasticsearch 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<Entity> list = template.queryForList(searchQuery, Entity.class);
Run Code Online (Sandbox Code Playgroud)
虽然我怎么知道发送到elasticssearch服务器的原始http查询?如何启用日志记录,我尝试添加log4j,但似乎spring-data-elasticsearch不记录查询.
Isa*_*ank 12
这适用于 Spring Boot2.3.3.RELEASE
logging.level.org.springframework.data.elasticsearch.client.WIRE=trace
小智 10
在挖掘了 spring 数据代码后,我发现了这个有用的小记录器,称为“tracer”(名称不是很独特)
通过在 application.properties 中设置以下内容
logging.level.tracer=TRACE
它将打印出请求的完整 curl 语句以及来自 Elasticsearch 的完整 JSON 响应。
如果您使用的是spring boot,则可以在application.properties中设置以下内容:
logging.level.org.elasticsearch.index.search.slowlog.query=INFO
spring.data.elasticsearch.properties.index.search.slowlog.threshold.query.info=1ms
Run Code Online (Sandbox Code Playgroud)
这个很老了,但我仍然想分享对我有用的解决方案.要记录通过存储库执行的Spring Data Elasticsearch查询,您需要启用DEBUG包的日志记录org.springframework.data.elasticsearch.core.*,例如:
logging:
level:
org:
springframework:
data:
elasticsearch:
core: DEBUG
Run Code Online (Sandbox Code Playgroud)
之后,查询将显示在日志中:
{
"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" : { }
}
}
Run Code Online (Sandbox Code Playgroud)
人们可以期待一种类似于JPA的优雅解决方案,但它似乎并不存在.
使用Spring Boot 1.4.0和Spring Data Elasticsearch 1.7.3进行测试.
我没有Spring Data Elasticsearch的答案,但在ES本身,您可以提高慢速查询日志记录的默认设置,并查看慢速日志中的所有查询.约慢日志的更多细节在这里.
至于如何更改阈值,应使用这样的命令:
PUT /_settings
{
"index.search.slowlog.threshold.query.info": "1ms"
}
Run Code Online (Sandbox Code Playgroud)
1ms 是你可以设置的最小值.
| 归档时间: |
|
| 查看次数: |
7886 次 |
| 最近记录: |