spring-boot-starter-data-elasticsearch

依赖

spring-boot 1.5.10.RELEASE

pom

... ...
<dependency>
    <groupId>com.sun.jna</groupId>
    <artifactId>jna</artifactId>
    <version>3.0.9</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
... ...

application.properties

#
# ES
#
spring.data.elasticsearch.cluster-name=elasticsearch-dev
spring.data.elasticsearch.cluster-nodes=47.94.5.129:9300
spring.data.elasticsearch.repositories.enabled=true

QuestionAnswerRecord.java

@Document(indexName = "question_answer_record", type = "question_answer_record", indexStoreType = "fs", shards = 5, replicas = 1, refreshInterval = "-1")
public class QuestionAnswerRecord {
    @Id
    private Integer id;
    private Integer lessonId;
    private Integer classroomId;
    private Integer smallClassId;
    private Integer questionId;
    @Field(type = FieldType.String, index = FieldIndex.not_analyzed)
    private String answer;
    @Field(type = FieldType.Date)
    private Date createDate;
    ... ...
}

QuestionAnswerRecordRepository.java

@Repository
public interface QuestionAnswerRecordRepository extends ElasticsearchRepository<QuestionAnswerRecord, Integer> {
    List<QuestionAnswerRecord> findAllByCreateDateBetween(Date start, Date end);

    List<QuestionAnswerRecord> findAllByQuestionIdEquals(Integer questionId);
}

Test.java

public void test() {
    Integer lessonId = 7777, classroomId = 6666;
    String[] aList = {"A", "B", "C", "D", "MISS"};
    List<QuestionAnswerRecord> saveListTemp = new ArrayList<>();
    recordRepository.deleteAll();
    Date start = null;
    for (int i = 0; i < 100; i++) {
        if (null == start) {
            start = new Date();
        }
        QuestionAnswerRecord t = new QuestionAnswerRecord();
        t.setId(i);
        t.setLessonId(lessonId);
        t.setClassroomId(classroomId);
        t.setSmallClassId(8888);
        t.setQuestionId(i * 10);
        t.setAnswer(aList[i % aList.length]);
        t.setCreateDate(DateUtil.getNow());
        saveListTemp.add(t);
    }
    recordRepository.save(saveListTemp);
    QueryBuilder queryBuilder = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("smallClassId", 8888));
    SearchQuery searchQuery = new NativeSearchQueryBuilder()
            .withQuery(queryBuilder)
            //↓根据answer分组统计统计后别名为player_count
            .addAggregation(AggregationBuilders.terms("player_count").field("answer"))
            //↓求id数量别名total_count
            .addAggregation(AggregationBuilders.count("total_count").field("id"))
            .build();
    Aggregations aggregations = elasticsearchTemplate.query(searchQuery, SearchResponse::getAggregations);
    //↓获取结果后进行解析
    StringTerms modelTerms = aggregations.get("player_count");
    for (Terms.Bucket actionTypeBucket : modelTerms.getBuckets()) {
        System.out.println(actionTypeBucket.getKey().toString() + "||" + actionTypeBucket.getDocCount());
    }
    InternalValueCount totalCount = aggregations.get("total_count");
    System.out.println(totalCount.getValue());
}

猜你喜欢

转载自my.oschina.net/u/3664884/blog/1814423