CodeGym /Cursos Java /Módulo 5. Spring /búsqueda elástica

búsqueda elástica

Módulo 5. Spring
Nivel 17 , Lección 7
Disponible

Elasticsearch es un motor RESTful de análisis y búsqueda distribuido, de código abierto. Spring Boot proporciona configuración automática básica para clientes de Elasticsearch.

Spring Boot admite varios clientes:

  • Clientes Java oficiales de bajo nivel y clientes REST de alto nivel

  • ReactiveElasticsearchClient proporcionado por Spring Data Elasticsearch

Spring Boot proporciona un "inicio" especial llamado spring-boot-starter-data-elasticsearch.

Conexión a Elasticsearch a través de clientes REST

Elasticsearch viene con dos clientes REST diferentes que se puede utilizar para enviar solicitudes al clúster: un cliente de bajo nivel del módulo org.elasticsearch.client:elasticsearch-rest-client y un cliente de alto nivel del módulo org.elasticsearch.client:elasticsearch-high-level-client. Además, Spring Boot proporciona soporte para un cliente reactivo basado en WebClient de Spring Framework, desde el módulo org.springframework.data:spring-data-elasticsearch. De forma predeterminada, los clientes se dirigirán a localhost:9200. Puede utilizar las propiedades spring.elasticsearch.* para ajustar aún más la configuración del cliente, como se muestra en el siguiente ejemplo:

Propiedades
spring.elasticsearch.uris=https://search.example.com:9200
spring.elasticsearch.socket-timeout=10s
spring.elasticsearch.username=user
spring.elasticsearch.password=secret
Yaml
spring:
  elasticsearch:
    uris: "https://search.example.com:9200"
    socket-timeout: "10s"
    username: "user"
    password: "secret"

Conexión a Elasticsearch a través de RestClient

Si elasticsearch-rest-client está en el classpath, Spring Boot configurará y registrará automáticamente el bean RestClient. Si elasticsearch-rest-high-level-client está en el classpath, el bean RestHighLevelClient también se configurará automáticamente. Debido a la desaprobación de RestHighLevelClient por parte de Elasticsearch, su configuración automática ha quedado obsoleta y se eliminará en una versión futura. Además de las propiedades descritas anteriormente, puede registrar una cantidad arbitraria de beans que implementen RestClientBuilderCustomizer para una personalización más detallada de RestClient y RestHighLevelClient. Para obtener control total sobre la configuración del cliente, defina el bean RestClientBuilder.

Además, si elasticsearch-rest-client-sniffer está en el classpath, Sniffer se configurará automáticamente para descubrir automáticamente nodos de un clúster de Elasticsearch en ejecución e instalarlos en un contenedor RestClient. Puede personalizar aún más la configuración de Sniffer, como se muestra en el siguiente ejemplo:

Propiedades
spring.elasticsearch.restclient.sniffer.interval=10m
spring.elasticsearch.restclient.sniffer.delay-after-failure=30s
Yaml
spring:
  elasticsearch:
    restclient:
      sniffer:
        interval: "10m"
        delay-after-failure: "30s"

Conexión a Elasticsearch a través de ReactiveElasticsearchClient

Spring Data Elasticsearch contiene un ReactiveElasticsearchClient para consultar instancias de Elasticsearch de forma reactiva. Es un complemento para WebClient de WebFlux, por lo que las dependencias spring-boot-starter-elasticsearch y spring-boot-starter-webflux son útil para habilitar el código de herramientas de soporte.

De forma predeterminada, Spring Boot configurará y registrará automáticamente el ReactiveElasticsearchClient. Además de las propiedades descritas anteriormente, las propiedades spring.elasticsearch.webclient.* se pueden usar para configurar opciones específicas de programación reactiva, como se muestra en el siguiente ejemplo:

Propiedades
spring.elasticsearch.webclient.max-in-memory-size=1MB
Yaml
spring:
  elasticsearch:
    webclient:
      max-in-memory-size: "1MB"

Si las propiedades de configuración de spring.elasticsearch. y spring.elasticsearch.webclient. no son suficientes y desea administrar completamente la configuración del cliente, puede registrar un bean personalizado ClientConfiguration.

Conexión a Elasticsearch a través de Spring Data

Para conectarse a Elasticsearch, se debe definir un bean RestHighLevelClient, que Spring Boot configura automáticamente o la aplicación lo pasa manualmente (consulte las secciones anteriores). Con esta configuración, ElasticsearchRestTemplate se puede implementar como cualquier otro Spring Bean, como se muestra en el siguiente ejemplo:

Java
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.stereotype.Component;
@Component
public class MyBean {
    private final ElasticsearchRestTemplate template;
    public MyBean(ElasticsearchRestTemplate template) {
        this.template = template;
    }
 // ...
 public boolean someMethod(String id) {
        devolver this.template.exists(id, Usuario.clase);
    }
}
Kotlin
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate
import org.springframework.stereotype.Component
@Component
class MyBean(private val template: ElasticsearchRestTemplate) {
 // ...
 fun someMethod(id: String): Boolean {
        return template.exists(id, User::class.java)
    }
}
<

Dado spring-data-elasticsearch y las dependencias necesarias para usar WebClient (generalmente spring-boot-starter-webflux), Spring Boot También puede configurar automáticamente ReactiveElasticsearchClient y ReactiveElasticsearchTemplate como beans. Son el equivalente reactivo de otros clientes REST.

Repositorios de Spring Data Elasticsearch

Spring Data incluye soporte de repositorio para Elasticsearch. Al igual que con los repositorios JPA discutidos anteriormente, el principio básico es que las consultas se crean automáticamente en función de los nombres de los métodos.

De hecho, tanto Spring Data JPA como Spring Data Elasticsearch comparten la misma infraestructura general. Puede tomar el ejemplo de JPA del artículo anterior y, siempre que City sea ahora una clase de Elasticsearch con la anotación @Document, en lugar de un objeto JPA con anotación @Entity, funcionará exactamente igual.

Spring Boot admite repositorios de Elasticsearch clásicos y reactivos a través de los beans ElasticsearchRestTemplate o ReactiveElasticsearchTemplate. Lo más probable es que Spring Boot configure automáticamente estos beans si están presentes las dependencias necesarias.

Si desea utilizar su propia plantilla para brindar soporte para los repositorios de Elasticsearch, puede agregar su propio ElasticsearchRestTemplate o ElasticsearchOperations a través de un bean marcado con @Bean annotation si su nombre es "elasticsearchTemplate". Lo mismo se aplica a ReactiveElasticsearchTemplate y ReactiveElasticsearchOperations, pero el nombre del bean debe ser "reactiveElasticsearchTemplate".

Puedes desactivar el soporte del repositorio usando la siguiente propiedad:

Propiedades
spring.data.elasticsearch.repositories.enabled=false
Yaml
spring:
  data:
    elasticsearch:
      repositories:
        enabled: false
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION