es~seq_no_primary_term问题的解决

seq_no_primary_term这个错误在聚合操作时出现的问题,这个问题是由于es客户端的版本与服务端版本不兼容的问题,例如:你的客户端是6.8.7,而es服务器版本是6.5.4,这时再进行topHits聚合操作时,就会出现这个错误。

es服务器版本


118538-20210204174613577-54158737.png

es客户端版本

         <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>6.8.7</version>
         </dependency>

上面的代码可以看到,客户端与服务端的版本出现了不兼容的情况,这时客户端在进行topHits分组时,就会传seq_no_primary_term参数 ,这时服务端不认这个参数 ,就出现了问题,解决方法很简单,就是降低客户端驱动版本即可。

         <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>6.5.4</version>
         </dependency>

es聚合代码

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
// 拼接查询条件
queryBuilder.should(QueryBuilders.termQuery("createUser", "1"));
// 创建聚合查询条件
TermsAggregationBuilder operateTypeAggBuilder = AggregationBuilders.terms("commentId")
        .field("commentId").size(10000);
operateTypeAggBuilder.subAggregation(AggregationBuilders.topHits("top").size(2)
        .fetchSource("content", "delFlag"));
// 创建查询对象
SearchQuery build = new NativeSearchQueryBuilder()
        .withQuery(queryBuilder) //添加查询条件
        .addAggregation(operateTypeAggBuilder) // 添加聚合条件
        .withPageable(PageRequest.of(0, 1)) //符合查询条件的文档分页,如果文档比较大,可以把这个分页改小(不是聚合的分页)
        .build();

愿与诸君共进步,大量的面试题及答案还有资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系,可以微信搜索539413949获取,最后祝大家都能拿到自己心仪的offer

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容