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:
spring.elasticsearch.uris=https://search.example.com:9200
spring.elasticsearch.socket-timeout=10s
spring.elasticsearch.username=user
spring.elasticsearch.password=secret
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:
spring.elasticsearch.restclient.sniffer.interval=10m
spring.elasticsearch.restclient.sniffer.delay-after-failure=30s
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:
spring.elasticsearch.webclient.max-in-memory-size=1MB
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:
@Component
public class MyBean {
private final ElasticsearchRestTemplate template;
public MyBean(ElasticsearchRestTemplate template) {
this.template = template;
}
// ...
}
@Component
class MyBean(private val template: ElasticsearchRestTemplate) {
}
<
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:
spring.data.elasticsearch.repositories.enabled=false
spring:
data:
elasticsearch:
repositories:
enabled: false
GO TO FULL VERSION