ITPub博客

首页 > 数据库 > 数据库开发技术 > Spring Boot集成Redis Search快速入门Demo

Spring Boot集成Redis Search快速入门Demo

原创 数据库开发技术 作者:hblog 时间:2024-09-23 21:00:23 0 删除 编辑

1.什么是Redis Search?

RedisSearch 是一个基于 Redis 的搜索引擎模块,它提供了全文搜索、索引和聚合功能。通过 RedisSearch,可以为 Redis 中的数据创建索引,执行复杂的搜索查询,并实现高级功能,如自动完成、分面搜索和排序。利用 Redis 的高性能特点,RedisSearch 可以实现高效的搜索和实时分析。对于微服务架构来说,RedisSearch 可以作为搜索服务的一部分,提供快速、高效的搜索能力,对于提高用户体验和性能具有重要的意义。

2.环境搭建

Docker Compose

version: '3'services:
redis: image: redis/redis-stack container_name: redis ports: - 6379:6379
redis-insight: image: redislabs/redisinsight container_name: redis-insight ports: - 8001:8001

Run following command:

docker-compose up -d

3.代码工程

实验目的

利用redis search 实现文本搜索功能

pom.xml

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>3.2.1</version>    </parent>    <modelVersion>4.0.0</modelVersion>
<artifactId>RedisSearch</artifactId>
<properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> </properties> <dependencies>

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.redis.om</groupId> <artifactId>redis-om-spring</artifactId> <version>0.8.2</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>

</dependencies></project>

controller

package com.et.controller;

import com.et.redis.document.Student;import com.et.redis.document.StudentRepository;import com.et.redis.hash.Person;import com.et.redis.hash.PersonRepository;import jakarta.websocket.server.PathParam;import org.springframework.http.HttpStatus;import org.springframework.http.ResponseEntity;import org.springframework.web.bind.annotation.*;

@RestControllerpublic class WebController {
private PersonRepository personRepository; private StudentRepository studentRepository;
public WebController(PersonRepository personRepository, StudentRepository studentRepository) { this.personRepository = personRepository; this.studentRepository = studentRepository; }
@PostMapping("/person") public Person save(@RequestBody Person person) { return personRepository.save(person); }
@GetMapping("/person") public Person get(@PathParam("name") String name, @PathParam("searchLastName") String searchLastName) { if (name != null) return this.personRepository.findByName(name) .orElseThrow(() -> new RuntimeException("person not found"));
if (searchLastName != null) return this.personRepository.searchByLastName(searchLastName) .orElseThrow(() -> new RuntimeException("person not found"));
return null; }
// ---- Student Endpoints @PostMapping("/student") public Student saveStudent(@RequestBody Student student) { return studentRepository.save(student); }
@GetMapping("/student") public Student getStudent(@PathParam("name") String name, @PathParam("searchLastName") String searchLastName) { if (name != null) return this.studentRepository.findByName(name) .orElseThrow(() -> new RuntimeException("Student not found"));
if (searchLastName != null) return this.studentRepository.searchByLastName(searchLastName) .orElseThrow(() -> new RuntimeException("Student not found"));
return null; } @ExceptionHandler(value = RuntimeException.class) public ResponseEntity handleError(RuntimeException e) { return ResponseEntity .status(HttpStatus.NOT_FOUND) .body(e.getMessage()); }

}

@RedisHash 方式

package com.et.redis.hash;
import com.redis.om.spring.annotations.Indexed;import com.redis.om.spring.annotations.Searchable;import org.springframework.data.annotation.Id;import org.springframework.data.redis.core.RedisHash;
@RedisHashpublic class Person {
@Id private String id; @Indexed private String name;
@Searchable private String lastName;
public String getId() { return id; }
public void setId(String id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getLastName() { return lastName; }
public void setLastName(String lastName) { this.lastName = lastName; }}

package com.et.redis.hash;
import org.springframework.data.repository.CrudRepository;import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repositorypublic interface PersonRepository extends CrudRepository<Person, String> {
Optional<Person> findByName(String name); Optional<Person> searchByLastName(String name);}

@Document 方式

package com.et.redis.document;
import com.redis.om.spring.annotations.Document;import com.redis.om.spring.annotations.Indexed;import com.redis.om.spring.annotations.Searchable;import org.springframework.data.annotation.Id;
@Documentpublic class Student {
@Id private String id; @Indexed private String name;
@Searchable private String lastName;
public String getId() { return id; }
public void setId(String id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getLastName() { return lastName; }
public void setLastName(String lastName) { this.lastName = lastName; }}

package com.et.redis.document;
import org.springframework.data.repository.CrudRepository;import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repositorypublic interface StudentRepository extends CrudRepository<Student, String> {
Optional<Student> findByName(String name); Optional<Student> searchByLastName(String name);}

DemoApplication



package com.et;
import com.redis.om.spring.annotations.EnableRedisDocumentRepositories;import com.redis.om.spring.annotations.EnableRedisEnhancedRepositories;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@EnableRedisDocumentRepositories(basePackages = "com.et.redis.document")@EnableRedisEnhancedRepositories(basePackages = "com.et.redis.hash")@SpringBootApplicationpublic class DemoApplication {
public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); }}

application.yaml

server:  port: 8088spring:  redis:    host: localhost    port: 6379

只是一些关键代码,所有代码请参见下面代码仓库

代码仓库

  • https://github.com/Harries/springboot-demo(redis search)

4.测试

启动Spring boot应用

测试hash方式

插入一个实体查询    模糊查询redis数据(*rab*)查看redis数据库数据redis数据库模糊查询

测试json document方式

同样的方式插入json文档,然后在你redis数据库里面查看

5.引用

  • https://blog.devgenius.io/redis-search-with-spring-boot-and-redis-om-searchable-indexed-ttl-ccf2fb027d96

  • https://refactorfirst.com/spring-boot-with-redis-stack-and-redis-insight

  • http://www.liuhaihua.cn/archives/711433.html

原文作者:HBLOG;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-05-04

  • 博文量
    210
  • 访问量
    111739