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项目,导入依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
        </dependency>
    </dependencies>

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

spring:
  elasticsearch:
    uris: http://localhost:9200
    username: ""
    password: ""

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

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

三、Spring Boot客户端搜索文档

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

@Document(indexName = "hotel")
@Data
public class Hotel {
    @Id
    String id;
    String title;
    String city;
    String price;
}

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

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

import org.springframework.data.repository.CrudRepository;

import java.util.List;

public interface EsRepository extends CrudRepository<Hotel,String> {

    List<Hotel> findByTitle(String title);
}

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

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class EsService {

    @Autowired
    EsRepository esRepository;

    public List<Hotel> getHotelByTitle(String title){
        return esRepository.findByTitle(title);
    }
}

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;

@RestController
public class ESController {
    @Autowired
    EsService esService;

    @RequestMapping("/testEs")
    public String getTitle(){
        List<Hotel> hotels = esService.getHotelByTitle("java");
        if(hotels!=null&&hotels.size()>0){
            return hotels.toString();
        }else{
            return "no data";
        }
    }
}

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

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆天至尊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值