spring-boot - Spring Data Elasticsearch 返回空聚合桶
问题描述
我正在使用以下 Spring Boot 2.0.6.RELEASE 和 Spring Data Elasticsearch 3.0.11.RELEASE。
Elasticsearch 集群是 6.8.5 版本
我编写了一些 Java 代码来执行对索引进行聚合的查询,如下所示:
QueryBuilder bools = QueryBuilders.boolQuery().must(matchQuery("zip-code", 90402))
.must(matchQuery("zip-plus-4", 2411));
AggregationBuilder streetAggregation = AggregationBuilders.terms("street").field("street.keyword").size(10000);
SearchRequestBuilder searchRequestBuilder = new SearchRequestBuilder(elasticsearchClient, SearchAction.INSTANCE)
.setIndices("pallc_index") //
.setTypes("pallc") //
.setQuery(bools) //
.setSize(0) //
.setExplain(true) //
.addAggregation(streetAggregation);
log.debug("srb : {}", searchRequestBuilder);
SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
log.debug("Search Response : {}", searchResponse);
记录查询的此代码段末尾的调试行转储以下 Elasticsearch 查询:
{
"size" : 0,
"query" : {
"bool" : {
"must" : [
{
"match" : {
"zip-code" : {
"query" : 90402,
"operator" : "OR",
"prefix_length" : 0,
"max_expansions" : 50,
"fuzzy_transpositions" : true,
"lenient" : false,
"zero_terms_query" : "NONE",
"boost" : 1.0
}
}
},
{
"match" : {
"zip-plus-4" : {
"query" : 2411,
"operator" : "OR",
"prefix_length" : 0,
"max_expansions" : 50,
"fuzzy_transpositions" : true,
"lenient" : false,
"zero_terms_query" : "NONE",
"boost" : 1.0
}
}
}
],
"disable_coord" : false,
"adjust_pure_negative" : true,
"boost" : 1.0
}
},
"explain" : true,
"aggregations" : {
"street" : {
"terms" : {
"field" : "street.keyword",
"size" : 10000,
"min_doc_count" : 1,
"shard_min_doc_count" : 0,
"show_term_doc_count_error" : false,
"order" : [
{
"_count" : "desc"
},
{
"_term" : "asc"
}
]
}
}
}
}
如果我使用 Postman(或 curl)执行此查询,那么我会从 Elasticsearch 获得以下响应:
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 18,
"max_score": 0.0,
"hits": []
},
"aggregations": {
"street": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "20TH",
"doc_count": 18
}
]
}
}
}
可以看出,对于“street”返回了一个聚合桶,其键为“20TH”。
如果我尝试检查 Java 代码的响应,我可以看到聚合但存储桶是空的。
这是与 Java 代码中的搜索响应调试相关的日志行:
15:32:53.144 DEBUG [http-nio-20004-exec-1] com.smoltech.service.PallcAddressService - Search Response : {"took":8,"timed_out":false,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},"hits":{"total":0,"max_score":0.0,"hits":[]},"aggregations":{"street":{"doc_count_error_upper_bound":0,"sum_other_doc_count":0,"buckets":[]}}}
另一件奇怪的事情是,在 Java 代码的结果中(基本上与 Postman 运行相同的查询)它显示 0 个命中,而 Postman 返回 18 个命中。
我做错了什么?
解决方案
如果有疑问 - 检查您的配置,然后再次检查!我意识到在执行 Java 代码时我使用了错误的 Spring 配置文件,这意味着我指向了错误的 ES 集群!
我的编辑回复:0 次点击与 18 次点击是我需要的线索......
推荐阅读
- macos - LaunchAgent 不运行 shell 脚本
- python - 如何在 Python 中找到带有正则表达式的字符串
- python - GCP AI 平台自定义预测例程无法使用管道加载模型,错误:92
- mysql - 如何标点使用 FROM_UNIXTIME 的 INSERT 语句
- r - Shiny - 如何在 flowLayout 中添加垂直/水平分隔线
- c# - 每x次更改图像路径
- node.js - QuickReplies 作为对话流的槽填充
- javascript - 您刷新页面的数组中的Vuejs数据为空
- r - 诊断错误:当 x 是矩阵时,无法指定 nrow 或 ncol
- javascript - 你如何计算javascript中两个时间戳之间的差异,不包括周末和晚上?