SpringBoot操作ES进行各种高级查询(值得收藏)
    		       		warning:
    		            这篇文章距离上次修改已过449天,其中的内容可能已经有所变动。
    		        
        		                
                在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.           
评论已关闭