当前位置: 首页 > 知识库问答 >
问题:

使用Spring数据Elasticsearch、ElasticsearchRepository从Elasticsearch获取聚合信息

常雅达
2023-03-14

我希望从ES中获得聚合结果,例如,对于与术语匹配的文档,avgSize(名称为“size”的字段的平均值)、totalhits,以及将来的一些其他聚合,我认为ElasticsearchRepository没有任何方法可调用。我构建了查询和聚合生成器,如下所示。我想使用我的存储库接口,但我不确定返回的ObjectType应该是什么?它应该是我的DTO中的文档类型吗?此外,我还看到了一些示例,其中searchQuery直接传递给ElasticsearchTemplate,但是拥有扩展ElasticsearchRepository的存储库接口有什么意义

存储库界面

public interface CCFilesSummaryRepository extends ElasticsearchRepository<DataReferenceSummary, UUID> {

}

弹性配置

@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;
    }
}

服务方式

  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;

  }

DataReferernce摘要现在只是一个POJO,我在构建过程中收到一个错误,上面写着无法构建Bean CCFilesSummaryRepository, illegalArgumentException DataReferernceSummary。不是一个amanged对象


共有1个答案

燕富
2023-03-14

首先,数据引用摘要必须是一个用文档注释的类。

在Spring Data Elasticsearch 3.2.0(当前版本)中,需要将存储库返回类型定义为聚合页面

从即将发布的4.0版开始,您必须将返回类型定义为SearchHits

 类似资料:
  • 我正在使用Spring Elasticsearch chRepository来查询Elasticsearch: 我可以成功运行搜索查询并检索映射到MyDocument bean中的elasticsearch结果列表 虽然发送到elasticsearch和响应的查询是正确的(我可以在调试日志中看到突出显示块)并且结果也合适,但我不知道如何在我的java代码中获取突出显示信息。 我不想使用Elasti

  • 我尝试使用下面的elasticsearch查询来处理Spring数据。目的是为字段返回唯一的结果。就像与SQL数据库进行比较一样。 我将该字段配置为关键字,它使查询在api中完美运行,如下所示: 我的问题是,当我尝试使用StringQuery运行时,相同的查询在Spring数据中不起作用,我得到以下错误。我猜它使用不同的api来运行查询。 我尝试过使用类型来实现相同的结果,没有重复和没有对象加载,

  • 框架集合由搜索查询选择的所有数据。框架中包含许多构建块,有助于构建复杂的数据描述或摘要。聚合的基本结构如下所示 - 有以下不同类型的聚合,每个都有自己的目的 - 指标聚合 这些聚合有助于从聚合文档的字段值计算矩阵,并且某些值可以从脚本生成。 数字矩阵或者是平均聚合的单值,或者是像一样的多值。 平均聚合 此聚合用于获取聚合文档中存在的任何数字字段的平均值。 例如, 请求正文 响应 如果该值不存在于一

  • 我参考的是Spring Data Elasticsearch 它们似乎是实现相同目标的两种不同API,但我不确定这两种类型之间有什么区别,更重要的是何时使用哪种。 有人能提供建议和指导吗?

  • 我有以下内容:我注意到在运行代码的末尾,如果我打印出aggregations.asMap(). get('subject');我得到:org.elasticsearch.search.aggregations.bucket.terms.StringTerms@6cff59fa 打印出“聚合”给了我:org.elasticsearch.search.aggregations.InternalAggr

  • 我想在我的java应用程序中获得聚合。 首先,我用curl构造了REST查询。它看起来像: 结果和我预期的一样 之后我在java中创建了一些代码 问题是: 如何获取当前bucket项的“contract\u sum”聚合值? 当我在IntelliJ Idea中使用调试工具时,它似乎可以 请帮助我的代码示例。