elasticsearch - 使用 Spring-data-elasticsearch、ElasticsearchRepository 从 Elasticsearch 获取聚合信息
问题描述
我想从 ES 中获取聚合结果,例如avgSize
(名称为“大小”的字段的平均值),totalhits
用于匹配术语的文档,以及将来的其他一些聚合结果,我认为ElasticsearchRepository
没有任何方法可以调用。我构建了查询和聚合构建器,如下所示。我想使用我的 Repository 接口,但我不确定返回的 ObjectType 应该是什么?它应该是我的 DTO 中的文档类型吗?我也看到searchQuery
了直接传递给的例子,ElasticsearchTemplate
但是扩展存储库接口的意义何在ElasticsearchRepository
Repository Interface
public interface CCFilesSummaryRepository extends ElasticsearchRepository<DataReferenceSummary, UUID> {
}
Elastic configuration
@Configuration
@EnableElasticsearchRepositories(basePackages = "com.xxx.repository.es")
public class ElasticConfiguration {
@Bean
public ElasticsearchOperations elasticsearchTemplate() throws UnknownHostException {
return new ElasticsearchTemplate(elasticsearchClient());
}
@Bean
public Client elasticsearchClient() throws UnknownHostException {
Settings settings = Settings.builder().put("cluster.name", "elasticsearch").build();
TransportClient client = new PreBuiltTransportClient(settings);
client.addTransportAddress(new TransportAddress(InetAddress.getLocalHost(), 9200));
return client;
}
}
Service Method
public DataReferenceSummary createSummary(final DataSet dataSet) {
try {
QueryBuilder queryBuilder = QueryBuilders.matchQuery("type" , dataSet.getDataSetCreateRequest().getContentType());
AvgAggregationBuilder avgAggregationBuilder = AggregationBuilders.avg("avg_size").field("size");
ValueCountAggregationBuilder valueCountAggregationBuilder = AggregationBuilders.count("total_references")
.field("asset_id");
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(queryBuilder)
.addAggregation(avgAggregationBuilder)
.addAggregation(valueCountAggregationBuilder)
.build();
return ccFilesSummaryRepository.search(searchQuery).iterator().next();
} catch (Exception e){
e.printStackTrace();
}
return null;
}
DataReferernceSummary
现在只是一个 POJO,我在构建过程中遇到了一个错误,上面写着Unable to build Bean CCFilesSummaryRepository, illegalArgumentException DataReferernceSummary. is not a amanged Object
解决方案
首先DataReferenceSummary
必须是一个用 注释的类@Document
。
在 Spring Data Elasticsearch 3.2.0(当前版本)中,您需要将存储库返回类型定义为AggregatedPage<DataReferenceSummary>
,返回的对象将包含聚合。
从即将发布的 4.0 版开始,您必须将返回类型定义为SearchHits<DataReferenceSummary>
并在此返回的对象中查找聚合。
推荐阅读
- linux - glibc_2.27 未找到电子
- xss - Vee-validate 似乎可以验证 XSS 威胁电子邮件地址 - 是否需要额外的卫生设施?
- google-apps-script - 是否有永久批准脚本的选项?
- python - 根据文件夹中以前的文件版本更改输出文件名
- docker - Docker 运行命令,只需一行命令即可实现几步
- swift - 如何在 init“内容”属性中计算和初始化?迅速
- postgresql - 如何设置 DataGrip 通过使用 DataGrip 的隧道以 SSL 模式连接 Cloud SQL
- reactjs - 以位置为中心渲染谷歌地图 OverlayView
- ios - 导航到另一个屏幕时,应用程序在 IOS 上冻结 - React Navigation
- jmeter - 有没有办法在 Jmeter 中为嵌入式资源的请求添加参数?