我是Spring Data elasticsearch的新手。我正在做一个项目,在这个项目中,我正在索引不同项目中遇到的错误(只是举个例子)。
我想获取所有的项目,在每个项目的错误数。
以下是我的文档:
@Data
@Document(indexName = "all_bugs")
public class Bug{
@Id
private String recordId;
private Project project;
private String bugSummary;
private String status;
// other fields omitted for brevity
}
这是Project
类
@Data
public class Project {
private String projectId;
private String name;
}
现在所有的bug都在elasticsearch中,我可以在Kibana控制台中执行这个查询,得到***所有项目,每个项目中的bug计数***
GET /all_bugs/_search
{
"size": 0,
"aggs": {
"distinct_projects": {
"terms": {
"field": "project.projectId",
"size": 10
},
"aggs": {
"project_details": {
"top_hits": {
"size": 1,
"_source": {
"includes": ["project.projectId", "project.name"]
}
}
}
}
}
}
}
虽然我知道我需要做得更好,但我面临的问题是Spring Data Elasticsearch部分。这是我构造聚合的方法。
@Autowired
private ElasticsearchOperations elasticsearchOperations;
public List<DistinctProject> getDistinctProjects() {
TermsAggregationBuilder aggregation = AggregationBuilders
.terms("distinct_projects")
.field("projects.projectId")
.size(10)
.subAggregation(AggregationBuilders
.topHits("project_details")
.size(1)
.fetchSource(new String[]{"project.name", "project.projectId"}, null));
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
.withAggregations(aggregation)
.build();
SearchHits<DistinctProject> searchHits = elasticsearchOperations.search(searchQuery, DistinctProject.class);
//I dont' know what to do from here...
}
现在,我带着SearchHits<DistinctProject>
。***问题是,我如何从这里获得聚合来构造我的响应?***在本例中,DistinctProject
只是一个DTO,我想在其中存储projectId
,name
和docCount
,以便我可以创建一个List并将其返回给调用者。
现在,这里的问题是,到目前为止,我看过的所有文档都建议我实现searchHits.getAggregations().get("distinct_projects")
,但这在我们正在使用的Spring Data Elasticsearch 4.4.11中不可用。根据这里的文件
SearchHits class does not contain the
org.elasticsearch.search.aggregations.Aggregations了。相反,它现在包含org.springframework.data.elasticsearch.core.AggregationsContainer类的示例
因此,searchHits.getAggregations().get("distinct_projects")
抛出一个编译错误。我不能再继续了。
我也引用了P.J.Meisch的答案,但这也引用了Spring Data Elasticsearch的旧版本
如果有人能帮我离开这个街区我会很感激的。
My spring Boot 版本是2.7.11,Spring Data elasticsearch版本是4.4.11。
谢了,斯里拉姆
1条答案
按热度按时间hujrc8aj1#
我测试了你的代码。遗憾的是,Spring Data Elasticsearch中没有用于聚合的数据模型。但是你可以把聚合数据当作json,自己解析它。