SpringBoot操作ES进行各种高级查询(值得收藏),阿里P7大佬手把手教你
warning:
这篇文章距离上次修改已过185天,其中的内容可能已经有所变动。
在Spring Boot中,你可以使用Spring Data Elasticsearch来操作ES进行各种复杂查询。以下是一些常见的操作:
- 创建Repository接口,继承ElasticsearchRepository。
public interface MyElasticsearchRepository extends ElasticsearchRepository<MyEntity, String> {
// 自定义查询方法
List<MyEntity> findByName(String name);
}
- 使用ElasticsearchTemplate或者ElasticsearchRestTemplate进行复杂查询。
@Autowired
private ElasticsearchTemplate elasticsearchTemplate;
public List<MyEntity> complexQuery(String queryString) {
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(queryStringQuery(queryString))
.build();
return elasticsearchTemplate.queryForList(searchQuery, MyEntity.class);
}
- 使用Elasticsearch的QueryBuilders构建复杂查询。
public List<MyEntity> complexQuery(String name, int age) {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()
.must(QueryBuilders.matchQuery("name", name))
.must(QueryBuilders.matchQuery("age", age));
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(boolQueryBuilder)
.build();
return elasticsearchTemplate.queryForList(searchQuery, MyEntity.class);
}
- 使用SearchSourceBuilder构建更复杂的查询。
public List<MyEntity> complexQueryWithFunctionScore(String name, int age) {
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.boolQuery()
.must(QueryBuilders.matchQuery("name", name))
.must(QueryBuilders.matchQuery("age", age)));
searchSourceBuilder.sort(new FieldSortBuilder("age").order(SortOrder.ASC));
searchSourceBuilder.trackScores(true);
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withSource(searchSourceBuilder)
.build();
return elasticsearchTemplate.queryForList(searchQuery, MyEntity.class);
}
- 使用Elasticsearch的Aggregation进行聚合查询。
public Map<String, Aggregation> aggregationQuery(String name) {
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.matchQuery("name", name))
.addAggreg
评论已关闭