• Spring Data Elasticsearch介绍(七)


            Spring Data Elasticsearch是Spring Boot套件中的一个组件,在Spring Boot中连接ES可以使用Spring Data Elasticsearch。

            Spring Data Elasticsearch是Spring Data项目的一部分,该项目致力于提供一致的基于Spring的数据查询和存储编程模型。

            Spring Data Elasticsearch封装了创建客户端的逻辑并与服务端保持长连接,让我们不必关注于网络连接问题。并且,通过对Repository接口的自动实现,Spring Data Elasticsearch可以直接通过方法名的语义实现查询功能,如常见的findBy+字段名+操作。

            Spring Data Elasticsearch还具有OR-Mapping功能,即查询到数据后,可以将数据直接封装到自定义的POJO中,方便后续对数据进行加工处理。

    示例:

    一、创建Springboot项目,导入依赖

    1. <dependencies>
    2. <dependency>
    3. <groupId>org.springframework.bootgroupId>
    4. <artifactId>spring-boot-starter-webartifactId>
    5. <version>2.7.0version>
    6. dependency>
    7. <dependency>
    8. <groupId>org.springframework.bootgroupId>
    9. <artifactId>spring-boot-starter-data-elasticsearchartifactId>
    10. <version>2.7.0version>
    11. dependency>
    12. <dependency>
    13. <groupId>org.projectlombokgroupId>
    14. <artifactId>lombokartifactId>
    15. <version>1.18.22version>
    16. dependency>
    17. dependencies>

    二、在application.yml中配置ES连接信息

    1. spring:
    2. elasticsearch:
    3. uris: http://localhost:9200
    4. username: ""
    5. password: ""

            其中,uris、username和password项需要填写协调节点服务地址(IP地址+端口号)、用户名和密码。当有多个协调节点时,可以设置uris的值为多个协调节点的服务地址,中间用逗号分隔。

            至此,当项目启动时Spring Data Elasticsearch就会创建客户端,然后连接ES服务端并与其保持长连接。

    三、Spring Boot客户端搜索文档

    1. import lombok.Data;
    2. import org.springframework.data.annotation.Id;
    3. import org.springframework.data.elasticsearch.annotations.Document;
    4. @Document(indexName = "hotel")
    5. @Data
    6. public class Hotel {
    7. @Id
    8. String id;
    9. String title;
    10. String city;
    11. String price;
    12. }

            在上面的代码中,在ID字段中添加了一个注解@Id。注意,一个Spring Data Elasticsearch的POJO必须定义一个被@Id修饰的字段,它是和索引中的_id相对应的。当搜索完成时,Spring Data Elasticsearch会将该POJO的字段填充为搜索结果显示的数据,包括ID字段(填充为文档的_id值)。

            EsRepository定义为接口,它需要继承CrudRepository接口。在EsRepository接口中,可以按照业务需求定义方法,Spring Data Elasticsearch会自动找到其类库中合适的实现类。EsRepository的定义代码如下:

    1. import org.springframework.data.repository.CrudRepository;
    2. import java.util.List;
    3. public interface EsRepository extends CrudRepository {
    4. List findByTitle(String title);
    5. }

            在EsRepository中定义了findByTitle()方法,Spring Data Elasticsearch会自动根据方法名称识别出方法的具体逻辑,然后生成Bean并填充逻辑代码实现该方法。

            完成EsRepository的定义后,在Service中就可以定义EsRepository类型的成员变量了,由Spring Boot完成注入,在getHotelByTitle()方法中调用EsRepository的对应方法完成搜索。

    1. import org.springframework.beans.factory.annotation.Autowired;
    2. import org.springframework.stereotype.Service;
    3. import java.util.List;
    4. @Service
    5. public class EsService {
    6. @Autowired
    7. EsRepository esRepository;
    8. public List<Hotel> getHotelByTitle(String title){
    9. return esRepository.findByTitle(title);
    10. }
    11. }

            Controller的实现部分,URL还是只映射到/testEs。在Controller中,使用EsService搜索到结果以后直接将其打印到网页上。EsController的实现代码如下:

    1. import org.springframework.beans.factory.annotation.Autowired;
    2. import org.springframework.web.bind.annotation.RequestMapping;
    3. import org.springframework.web.bind.annotation.RestController;
    4. import java.util.List;
    5. @RestController
    6. public class ESController {
    7. @Autowired
    8. EsService esService;
    9. @RequestMapping("/testEs")
    10. public String getTitle(){
    11. List hotels = esService.getHotelByTitle("java");
    12. if(hotels!=null&&hotels.size()>0){
    13. return hotels.toString();
    14. }else{
    15. return "no data";
    16. }
    17. }
    18. }

    启动程序后,在浏览器中输入http://localhost:8080/testEs,结果如下图所示。

     

  • 相关阅读:
    Redis实战——短信登录
    SWT/ANR问题--StorageManagerService卡住
    相比Superset和Metabase,DataEase开源工具为什么更易用?
    骨传导耳机品牌排行榜前十名,目前最好的几款骨传导耳机推荐
    React 全栈体系(八)
    编译和链接
    5+甲基化+预后模型搭配实验
    30天工作量,推荐4个ai写作生成器工具,一键搞定!
    在Qt的点云显示窗口中添加坐标轴C++
    《论文阅读》常识感知的提示用于可控的同情对话生成 2023 AAAI
  • 原文地址:https://blog.csdn.net/ntzzzsj/article/details/126109651