随着数据量的增加和数据结构的复杂化,传统的关系型数据库已经不能满足用户的需求,而搜索引擎则成为了一种更加高效、可扩展的数据检索方案。而 Elasticsearch 则是一个流行的搜索引擎,在 Java 生态系统中,ElasticsearchRestTemplate 是一个使用起来非常方便的 Elasticsearch 客户端,本文将介绍 ElasticsearchRestTemplate 如何实现排序、模糊查询、条件查询、区间查询、距离排序、多条件查询等功能。
- 环境搭建
首先我们需要在 pom.xml 中添加 ElasticsearchRestTemplate 的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
然后在 application.properties 中配置 Elasticsearch 集群的地址:
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300
接着,我们需要定义一个 ElasticsearchRepository 来操作 Elasticsearch 中的数据,以 User 为例:
@Repository
public interface UserRepository extends ElasticsearchRepository<User, String> {
}
我们可以定义一些对 User 的属性进行操作的方法,比如模糊查询、条件查询、区间查询等。
- 排序
排序是一种非常常见的需求,比如我们要按照 User 的年龄升序排列,可以这样写:
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withSort(SortBuilders.fieldSort("age").order(SortOrder.ASC))
.build();
List<User> users = elasticsearchTemplate.queryForList(searchQuery, User.class);
这里用了 SortBuilders 工具类来构建排序规则,然后将其设置在 SearchQuery 中进行查询。
- 模糊查询
模糊查询是一种模糊匹配的方式,比如我们要查询名字中含有 “Tom” 的 User,可以这样写:
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.fuzzyQuery("name", "Tom"))
.build();
List<User> users = elasticsearchTemplate.queryForList(searchQuery, User.class);
这里用了 QueryBuilders 工具类来构建查询规则,然后将其设置在 SearchQuery 中进行查询。fuzzyQuery() 方法接收两个参数,第一个参数是要查询的字段,第二个参数是要匹配的值。
- 条件查询
条件查询是一种根据特定条件查询数据的方式,比如我们要查询所有年龄大于 20 岁的 User,可以这样写:
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.rangeQuery("age").gt(20))
.build();
List<User> users = elasticsearchTemplate.queryForList(searchQuery, User.class);
这里用了 QueryBuilders 工具类来构建查询规则,然后将其设置在 SearchQuery 中进行查询。rangeQuery() 方法接收一个参数,即要查询的字段,然后使用 gt() 来指定大于的值。
- 区间查询
区间查询是一种根据特定范围查询数据的方式,比如我们要查询年龄在 20 到 30 岁之间的 User,可以这样写:
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.rangeQuery("age").from(20).to(30))
.build();
List<User> users = elasticsearchTemplate.queryForList(searchQuery, User.class);
这里用了 QueryBuilders 工具类来构建查询规则,然后将其设置在 SearchQuery 中进行查询。rangeQuery() 方法接收一个参数,即要查询的字段,然后使用 from() 和 to() 来指定查询范围。
- 距离排序
距离排序是一种根据地理位置排序的方式,比如我们要查询离某个坐标最近的 User,可以这样写:
GeoPoint location = new GeoPoint(40.12, -71.34);
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withSort(SortBuilders.geoDistanceSort("location", location)
.unit(DistanceUnit.KILOMETERS)
.order(SortOrder.ASC))
.build();
List<User> users = elasticsearchTemplate.queryForList(searchQuery, User.class);
这里用了 SortBuilders 工具类来构建排序规则,然后将其设置在 SearchQuery 中进行查询。geoDistanceSort() 方法接收两个参数,第一个参数是要排序的字段,第二个参数是要排序的坐标点。
- 多条件查询
多条件查询是一种综合查询的方式,比如我们要查询名字中含有 “Tom” 而且年龄大于 20 岁的 User,可以这样写:
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.boolQuery()
.must(QueryBuilders.fuzzyQuery("name", "Tom"))
.must(QueryBuilders.rangeQuery("age").gt(20)))
.build();
List<User> users = elasticsearchTemplate.queryForList(searchQuery, User.class);
这里用了 QueryBuilders 工具类来构建查询规则,然后将其设置在 SearchQuery 中进行查询。boolQuery() 方法表示使用布尔逻辑查询,must() 方法表示同时满足两个条件。
总结文章来源:https://www.toymoban.com/news/detail-485157.html
本文介绍了 ElasticsearchRestTemplate 如何实现排序、模糊查询、条件查询、区间查询、距离排序、多条件查询等功能。使用 ElasticsearchRestTemplate 可以非常方便地进行 Elasticsearch 操作,让我们的搜索功能更加高效、可扩展。文章来源地址https://www.toymoban.com/news/detail-485157.html
到了这里,关于ElasticsearchRestTemplate 基本使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!