SpringBoot集成Redis Search快速入门演示
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
后运行命令:
docker-compose up -d
3.代码工程
目的
利用redis搜索实现文本搜索功能
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>
控制器
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.*;
@RestController
public 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());
}
}
@ Redis Hash方法
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;
@RedisHash
public 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;
@Repository
public 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;
@Document
public 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;
@Repository
public interface StudentRepository extends CrudRepository<Student, String> {
Optional<Student> findByName(String name);
Optional<Student> searchByLastName(String name);
}
演示应用
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")
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
应用程序.yaml
server:
port: 8088
spring:
redis:
host: localhost
port: 6379
只是一些关键代码,请参阅以下代码库中的所有代码
代码存储库
4.测试
启动SpringBoot应用程序
测试散列法
插入实体
查询
模糊查询redis数据(rab)
查看redis数据库数据
Redis数据库模糊查询
测试json文档方法
以同样的方式插入JSON文档,然后在Redis数据库中查看它