gpt4 book ai didi

elasticsearch - 使用 Spring-data-elasticsearch、ElasticsearchRepository 从 Elasticsearch 获取聚合信息

转载 作者:行者123 更新时间:2023-12-02 23:10:58 41 4
gpt4 key购买 nike

我想从 ES 中获得汇总结果,例如 avgSize (名称为“大小”的字段的平均值),totalhits对于匹配一个术语的文档,以及将来的一些其他聚合,我不认为 ElasticsearchRepository有任何方法可以调用。我构建了查询和聚合构建器,如下所示。我想使用我的 Repository 接口(interface),但我不确定返回的 ObjectType 应该是什么?它应该是我的 DTO 中的文档类型吗?我还看到了 searchQuery 的示例。直接传递给 ElasticsearchTemplate但是,拥有扩展 ElasticsearchRepository 的存储库接口(interface)的意义何在?
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>并在这个返回的对象中找到聚合。

关于elasticsearch - 使用 Spring-data-elasticsearch、ElasticsearchRepository 从 Elasticsearch 获取聚合信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60553017/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com