SpringBoot操作ES进行各种高级查询(值得收藏)
在Spring Boot中,我们可以使用Spring Data Elasticsearch来操作ES进行各种复杂查询。以下是一些示例:
- 分页查询
public Page<Item> findByName(String name, Pageable pageable) {
return repository.findByName(name, pageable);
}
在这个例子中,我们使用Spring Data Elasticsearch的分页功能进行查询。
- 通过布尔查询查询
public List<Item> findByName(String name) {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.matchQuery("name", name));
Iterable<Item> searchResult = elasticsearchTemplate.search(
new QueryStringQueryBuilder(queryString), Item.class
);
return StreamSupport.stream(searchResult.spliterator(), false).collect(Collectors.toList());
}
在这个例子中,我们使用布尔查询构建器创建了一个查询,然后使用ElasticsearchTemplate的search方法进行查询。
- 通过函数查询进行查询
public List<Item> findByName(String name) {
FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders
.functionScoreQuery()
.add(QueryBuilders.matchQuery("name", name), ScoreFunctionBuilders.weightFactor(10));
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(functionScoreQueryBuilder)
.build();
List<Item> items = elasticsearchTemplate.queryForList(searchQuery, Item.class);
return items;
}
在这个例子中,我们使用函数查询构建器创建了一个查询,然后使用ElasticsearchTemplate的queryForList方法进行查询。
- 通过地理位置查询
public List<Item> findByLocation(double lat, double lon) {
GeoDistanceQueryBuilder geoDistanceQueryBuilder = QueryBuilders
.geoDistanceQuery("location")
.point(lat, lon)
.distance(10, DistanceUnit.KILOMETERS);
Iterable<Item> searchResult = elasticsearchTemplate.search(geoDistanceQueryBuilder, Item.class);
return StreamSupport.stream(searchResult.spliterator(), false).collect(Collectors.toList());
}
在这个例子中,我们使用地理距离查询构建器创建了一个查询,然后使用ElasticsearchTemplate的search方法进行查询。
- 通过高亮查询
public Page<Item> searchByName(String name, Pageable pageable) {
QueryStringQueryBuilder queryBuilder = new QueryStringQueryBuilder(name);
queryBuilder.field("name");
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(queryBuilder)
.withHighlightFields(
new HighlightBuilder.
评论已关闭