ElasticsearchRestTemplate 基本使用

这篇具有很好参考价值的文章主要介绍了ElasticsearchRestTemplate 基本使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

随着数据量的增加和数据结构的复杂化,传统的关系型数据库已经不能满足用户的需求,而搜索引擎则成为了一种更加高效、可扩展的数据检索方案。而 Elasticsearch 则是一个流行的搜索引擎,在 Java 生态系统中,ElasticsearchRestTemplate 是一个使用起来非常方便的 Elasticsearch 客户端,本文将介绍 ElasticsearchRestTemplate 如何实现排序、模糊查询、条件查询、区间查询、距离排序、多条件查询等功能。

  1. 环境搭建

首先我们需要在 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 的属性进行操作的方法,比如模糊查询、条件查询、区间查询等。

  1. 排序

排序是一种非常常见的需求,比如我们要按照 User 的年龄升序排列,可以这样写:

SearchQuery searchQuery = new NativeSearchQueryBuilder()
        .withSort(SortBuilders.fieldSort("age").order(SortOrder.ASC))
        .build();
List<User> users = elasticsearchTemplate.queryForList(searchQuery, User.class);

这里用了 SortBuilders 工具类来构建排序规则,然后将其设置在 SearchQuery 中进行查询。

  1. 模糊查询

模糊查询是一种模糊匹配的方式,比如我们要查询名字中含有 “Tom” 的 User,可以这样写:

SearchQuery searchQuery = new NativeSearchQueryBuilder()
        .withQuery(QueryBuilders.fuzzyQuery("name", "Tom"))
        .build();
List<User> users = elasticsearchTemplate.queryForList(searchQuery, User.class);

这里用了 QueryBuilders 工具类来构建查询规则,然后将其设置在 SearchQuery 中进行查询。fuzzyQuery() 方法接收两个参数,第一个参数是要查询的字段,第二个参数是要匹配的值。

  1. 条件查询

条件查询是一种根据特定条件查询数据的方式,比如我们要查询所有年龄大于 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() 来指定大于的值。

  1. 区间查询

区间查询是一种根据特定范围查询数据的方式,比如我们要查询年龄在 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() 来指定查询范围。

  1. 距离排序

距离排序是一种根据地理位置排序的方式,比如我们要查询离某个坐标最近的 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() 方法接收两个参数,第一个参数是要排序的字段,第二个参数是要排序的坐标点。

  1. 多条件查询

多条件查询是一种综合查询的方式,比如我们要查询名字中含有 “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() 方法表示同时满足两个条件。

总结

本文介绍了 ElasticsearchRestTemplate 如何实现排序、模糊查询、条件查询、区间查询、距离排序、多条件查询等功能。使用 ElasticsearchRestTemplate 可以非常方便地进行 Elasticsearch 操作,让我们的搜索功能更加高效、可扩展。文章来源地址https://www.toymoban.com/news/detail-485157.html

到了这里,关于ElasticsearchRestTemplate 基本使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包