依赖
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()); }