Explicación detallada de la integración de Springboot con Elasticsearch

contenido

Pasos de configuración de la integración

Paso 1: Agregar dependencias relacionadas con Maven

Paso 2: configurar el host y el puerto de elasticsearch

Paso 3: configurar el cliente de Elasticsearch

Paso 4: Crear entidad de documento

Paso 5: crear capas de controlador, servicio y dao

Realización de funciones relacionadas

1. Agregar documentos

 2. Modificar el documento

 3. Consultar documentos por DNI

 4. Eliminar documentos por ID

 5. Consulta todos los documentos

6. Consulta condicional (condición única)

 7. Consulta condicional (múltiples condiciones)

 8. Consulta de paginación (orden descendente)

 9. Consulta de paginación (ascendente)

 10. Consulta de paginación

 11. Consulta de rango ( > )

12. Consultas de rango ( >= ) 

 13. Consulta de rango ( < )

 14. Consultas de rango ( <= )


Pasos de configuración de la integración

Paso 1: Agregar dependencias relacionadas con Maven

<!-- 指定 Springboot 版本 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.7</version>
    <relativePath/>
</parent>

<!-- 相关jar包 -->
<dependencies>
    <!-- SpringBoot核心jar包 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <!-- web开发包:包含Tomcat和Springmvc -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- ES 核心包 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>
    <!-- lombok 实体简化插件 -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

Paso 2: configurar el host y el puerto de elasticsearch

elasticsearch:
  host: 127.0.0.1
  port: 9200

Paso 3: configurar el cliente de Elasticsearch

@Data
@Configuration
@ConfigurationProperties(prefix = "elasticsearch")
public class ElasticSearchConfig extends AbstractElasticsearchConfiguration {

    private String host;
    private Integer port;

    @Override
    public RestHighLevelClient elasticsearchClient() {
        return new RestHighLevelClient(RestClient.builder(new HttpHost(host, port)));
    }

}

Paso 4: Crear entidad de documento

@Data
@Document(indexName = "users")
public class User {

    @Id
    @Field(type = FieldType.Long)
    private Long id;

    @Field(type = FieldType.Text)
    private String name;

    @Field(type = FieldType.Keyword)
    private String sex;

    @Field(type = FieldType.Integer)
    private Integer age;

    @Field(type = FieldType.Text)
    private String address;

}

Paso 5: crear capas de controlador, servicio y dao

(5.1) capa controladora

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

}

(5.2) capa de servicio

public interface UserService {

}

(5.3) capa de implementación del servicio (UserDao ver 5.4)

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

}

(5.4) capas dao

@Repository
public interface UserDao extends ElasticsearchRepository<User, Long> {

}

Después de crear toda la clase relacionada, la estructura del proyecto debería tener el siguiente aspecto:

Realización de funciones relacionadas

Aquí hay un ejemplo de la función real y enumera las clases de implementación del controlador y las capas de servicio como referencia.

Para algunas funciones principales, ES ya las ha encapsulado y las admite de forma predeterminada (como el ejemplo 1-6). Estas implementaciones relacionadas no requieren que escribamos la capa dao, pero es necesario realizar manualmente algunas consultas comerciales más. .Escribir.

1. Agregar documentos

capa de controlador:

@PostMapping("/save")
public String save(@RequestBody User user) {
    long id = System.currentTimeMillis();
    user.setId(id);
    userService.save(user);
    return "新增成功,id为:" + id;
}

capa de servicio:

@Override
public Long save(User user) {
    userDao.save(user);
    return user.getId();
}

Efecto de prueba:

 2. Modificar el documento

[Nota] Para agregar y modificar documentos, la capa dao llama al método save(). Cuando el id no existe, ES (ElasticSearch) realizará la nueva operación. Cuando el objeto id ya existe, realizará la operación de modificación.

capa de controlador:

@PostMapping("/update")
public String update(@RequestBody User user) {
    userService.save(user);
    return "修改成功";
}

capa de servicio:

@Override
public Long save(User user) {
    userDao.save(user);
    return user.getId();
}

Efecto de prueba:

 3. Consultar documentos por DNI

capa de controlador:

@GetMapping("/{id}")
public User getById(@PathVariable("id") Long id) {
    return userService.getById(id);
}

capa de servicio:

@Override
public User getById(Long id) {
    Optional<User> find = userDao.findById(id);
    if (find.isPresent()) {
        return find.get();
    }
    return null;
}

Efecto de prueba:

 4. Eliminar documentos por ID

capa de controlador:

@DeleteMapping("/{id}")
public String deleteById(@PathVariable("id") Long id) {
    userService.deleteById(id);
    return "删除成功";
}

capa de servicio:

@Override
public void deleteById(Long id) {
    userDao.deleteById(id);
}

Efecto de prueba:

 5. Consulta todos los documentos

capa de controlador:

@GetMapping("/all")
public List<User> all() {
    return userService.getAll();
}

capa de servicio:

@Override
public List<User> getAll() {
    Iterable<User> users = userDao.findAll();
    if (users == null) {
        return Collections.emptyList();
    }
    List<User> userList = new ArrayList<User>();
    users.forEach(o -> userList.add(o));
    return userList;
}

Efecto de prueba:

6. Consulta condicional (condición única)

Por ejemplo: datos de consulta cuyo nombre contiene "Mary"

capa de controlador:

@GetMapping("/listByName")
public List<User> listByName(String name) {
    return userService.getListByName(name);
}

capa de servicio:

@Override
public List<User> getListByName(String name) {
    return userDao.findByName(name);
}

capas dao:

List<User> findByName(String name);

Efecto de prueba:

 7. Consulta condicional (múltiples condiciones)

Por ejemplo: consulta los datos cuyo nombre contiene "Mary" y cuya edad es 25.

capa de controlador:

@GetMapping("/listByNameAndAge")
public List<User> listByNameAndAge(String name, Integer age) {
    return userService.getListByNameAndAge(name, age);
}

capa de servicio:

@Override
public List<User> getListByNameAndAge(String name, Integer age) {
    return userDao.findByNameAndAge(name, age);
}

capas dao:

List<User> findByNameAndAge(String name, Integer age);

 8. Consulta de paginación (orden descendente)

capa de controlador:

@GetMapping("/listOrderByAgeDesc")
public List<User> listOrderByAgeDesc() {
    return userService.getListOrderByAgeDesc();
}

capa de servicio:

@Override
public List<User> getListOrderByAgeDesc() {
    return userDao.findByOrderByAgeDesc();
}

capas dao:

List<User> findByOrderByAgeDesc();

Efecto de prueba:

 9. Consulta de paginación (ascendente)

 capa de controlador:

@GetMapping("/listOrderByAgeAsc")
public List<User> listOrderByAgeAsc() {
    return userService.getListOrderByAgeAsc();
}

capa de servicio:

@Override
public List<User> getListOrderByAgeAsc() {
    return userDao.findByOrderByAgeAsc();
}

capas dao:

List<User> findByOrderByAgeAsc();

Efecto de prueba:

 10. Consulta de paginación

capa de controlador:

@GetMapping("/page")
public Page<User> page(Integer pageNum, Integer pageSize) {
    return userService.getPage(pageNum, pageSize);
}

capa de servicio:

@Override
public Page<User> getPage(int pageNum, int pageSize) {
    // 注意,这里的pageNum是从0开始的,如果要查询第1页数据,pageNum应该为0
    Pageable pageable = PageRequest.of(pageNum, pageSize);
    return userDao.findAll(pageable);
}

Efecto de prueba:

 11. Consulta de rango ( > )

capa de controlador:

@GetMapping("/listGreaterThanAge")
public List<User> listGreaterThanAge(Integer age) {
    return userService.getListGreaterThanAge(age);
}

capa de servicio:

@Override
public List<User> getListGreaterThanAge(Integer age) {
    return userDao.findByAgeGreaterThan(age);
}

capas dao:

List<User> findByAgeGreaterThan(Integer age);

Efecto de prueba:

12. Consultas de rango ( >= ) 

capa de controlador:

@GetMapping("/listGreaterThanEqualAge")
public List<User> listGreaterThanEqualAge(Integer age) {
    return userService.getListGreaterThanEqualAge(age);
}

capa de servicio:

@Override
public List<User> getListGreaterThanEqualAge(Integer age) {
    return userDao.findByAgeGreaterThanEqual(age);
}

capas dao:

List<User> findByAgeGreaterThanEqual(Integer age);

Efecto de prueba:

 13. Consulta de rango ( < )

capa de controlador:

@GetMapping("/listLessThanAge")
public List<User> listLessThanAge(Integer age) {
    return userService.getListLessThanAge(age);
}

capa de servicio:

@Override
public List<User> getListLessThanAge(Integer age) {
    return userDao.findByAgeLessThan(age);
}

capas dao:

List<User> findByAgeLessThan(Integer age);

Efecto de prueba:

 14. Consultas de rango ( <= )

capa de controlador:

@GetMapping("/listLessThanEqualAge")
public List<User> listLessThanEqualAge(Integer age) {
    return userService.getListLessThanEqualAge(age);
}

capa de servicio:

@Override
public List<User> getListLessThanEqualAge(Integer age) {
    return userDao.findByAgeLessThanEqual(age);
}

capas dao:

List<User> findByAgeLessThanEqual(Integer age);

Efecto de prueba:

Supongo que te gusta

Origin blog.csdn.net/sunnyzyq/article/details/121823162
Recomendado
Clasificación