Я хотел бы получить агрегированные результаты от ES, такие как avgSize
(среднее поле с именем 'size'), totalhits
для документов, которые соответствуют термину, и некоторые другие агрегаты в будущем, для которых я не буду ' Я думаю, ElasticsearchRepository
имеет какие-либо методы для вызова. Я построил Query и Aggregate Builders, как показано ниже. Я хочу использовать свой интерфейс репозитория, но я не уверен, каким должен быть возвращаемый 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