Ejemplo básico de agregar, eliminar, modificar y buscar integrando Spring Boot y búsqueda elástica
Para conocer el proceso de instalación de ElasticSearch, puede consultar los escritos anteriores del blogger:
/i6827758978567504392/
Para obtener una introducción básica a ElasticSearch, puede consultar a los escritos anteriores del blogger:
/i6884427730096488971/
Introducción al proyecto Maven:
springframework.boot
Spring-Start-Start- Data-Elastic Search p>
Nota: El número de versión de ElasticSearch está relacionado con el número de versión de Spring Boot. El número de versión de Spring Boot es 2.1.6, por lo que el número de versión de instalación de ElasticSearch es 7.7.0.
Paquete com.opendi.generator.elasticsearch.model;
Importado de Lombok. Datos;
Importar datos de marco de primavera. Importar datos de marco de primavera. Anotaciones de campo de búsqueda elástica.
Importar datos de marco de primavera. lista;
@data
@Document(indexName="post ", type="post ", shards=1, replicas = 0)
Clase pública Publicar {
@Id
ID de cadena privada;
Título de cadena privada;
@Field(type=FieldType.embedded Set)
Etiqueta de lista de distribución personal;
}
Paquete com.opendi.generator.model;
Importado en Lombok.
Datos;
Importar datos de marco de primavera. Importar datos del marco de primavera. Anotaciones de búsqueda elástica.
@datos. >
@Document(indexName = "libro ", tipo = "_doc ", fragmentos = 1, réplicas = 0)
Clase pública BookBean {
@Id
Id. de cadena privada;
@Field(tipo = FieldType.Keyword)
Título de cadena privada;
@Field(tipo = FieldType. palabra clave )
Autor de cadena privada;
@Field(tipo = FieldType.
Palabras clave)
Cadena privada postDate
BookBean público(){}
BookBean público(ID de cadena, Título de cadena, Autor de cadena, Fecha de publicación de cadena de caracteres) {
this.id = id
this.title = título
this.author = autor;
this .postDate = postDate
}
Cadena pública getId() {
Id. de retorno;
}
Cadena pública void setId(Cadena id) {
this.id = id
}
Cadena pública getTitle() {
Devolver título;
}
SetTitle vacío público (título de cadena){
this.title = título
} p>
Cadena pública getAuthor( ) {
Devuelve el autor;
}
public void setAuthor(Autor de cadena){
this.author = autor;
}
Cadena pública getPostDate() {
Devolver postDate
} p>
public void setPostDate(String postDate ){
this.postDate = postDate
}
@Override
cadena pública toString() {
Return "BookBean{"
" id='" id '''
", title='" título '' '
", autor= '" autor '''
", postDate='" postDate '''
'}';
}
}
Paquete com.opendi.generator.elasticsearch.mapper;
Importar com.opendi.generator.elasticsearch.model.post;
Importar Spring Framework. .página de datos.
Importar datos de marco de primavera. /p>
La interfaz pública PostRepository extiende ElasticsearchRepository {
Página findByTitle (título de cadena, paginación o paginación);
}
Paquete com.opendi. generador.Dao;
Importar com.opendi.generator.model.book
bean;
Importar org.página de dominio.
Importar org.página de dominio. marco de primavera. búsqueda elástica. repositorio elástico;
/**
*Relación de interfaz:
* ElasticsearchRepository-gt; Almacenamiento de paginación y clasificación: gt; biblioteca de almacenamiento de petróleo crudo
*/
La interfaz pública BookRepository extiende ElasticsearchRepository {
//FindById opcional (identificación de cadena);
Página findByAuthor(Autor de cadena, se puede paginar o paginar);
Página findByTitle(Título de cadena, se puede paginar o paginar);
}< / p>
Utilice las herramientas de operación en ElasticSearch para operar con los datos.
Paquete com.opendi.generator.elasticsearch.service;
Importar com.opendi.generator.elasticsearch.model.post;
Importar Spring Framework. .data.domain.page;
Importar solicitud org.spring framework.data.domain.page;
Importar Java.util.optional;
Interfaz pública servicio de publicación {
Guardar publicación (publicar publicación);
opcional findOne(id de cadena);
iterable buscar todo();
p>
Página findByTitle(Título de cadena, solicitud de página PageRequest);
}
Especifique el objeto de operación:
Generador de paquetes opendi. .servicio de búsqueda elástica.
importación de com.generador de búsqueda elástica.
Importar .opendi.servicio de búsqueda elástica.
importar marco de primavera. > Importar datos de org.spring.página de dominio;
importar datos de org.spring.
Importar Java . util opcional;
@Service
La clase pública PostServiceImpl implementa PostService {
@Conexión automática
Repositorio de publicaciones privado;
@override
Guardado de publicaciones públicas (publicación posterior) {
guardado de publicaciones (publicación); p>
Respuesta;
}
@override
Público opcional findOne(id de cadena) {
Devolver repositorio de publicaciones. encontrar byid(id);
}
@override
Público iterable findAll() {
Devolver repositorio de publicaciones .find all( );
}
@override
Página pública findByTitle(título de cadena, página PageRequest
eRequest) {
Devolver publicación repository.findbytitle(título, solicitud de página);
}
}
Paquete com.opendi. generador.servicio;
Importar bean com.opendi.generator.model.book;
Importar org.spring framework.data.domain.page;
Importar org.spring framework.data.domain.pagerequest;
Importar Java.util.list;
Importar Java.util.optional;
Servicio de libro de interfaz pública
Opcional findById(string id);
Guardar BookBean (blog de BookBean);
eliminar vacío (blog de BookBean);
Opcional findOne (id de cadena);
lista buscar todo();
Página findByAuthor (autor de cadena, solicitud de página PageRequest);
Página findByTitle(Título de cadena, Solicitud de página PageRequest);
}
Paquete com.opendi.generator.service.impl;
Importar com.opendi.generator Dao.
Importar com.opendi.generador.
Importar .opendi.servicio de libro. .beans.factory.annotation.autowired;
Importar org.spring framework.beans.factory.annotation.qualifier;
Importar página de dominio org.spring. /p>
Importar marco de organización .datos .dominio .lista de utilidades .
Importar Java . util opcional;
@Service("blogService")
La clase pública BookServiceImpl implementa BookService {
@Automatic. conexión
@Qualifier("bookRepository ")
Repositorio de libros privado;
@Coverage
Público opcional findById(string id) {
>////Método en CrudRepository
Devolver repositorio de libros .find byid(id);
}
@Override
Público Guardar BookBean (Blog de BookBean){
Devolver bookRepository.save(Blog);
}
@Overwrite
Eliminar vacío público ( BookBean Blog) {
bookRepository.delete(blog);
}
@override
público opcional findOne(String id) {
Devolver repositorio de libros .find byid(id);
}
@Override
Lista pública findAll() {
return(List)repositorio de libros .find all();
}
@override
Página pública findByAuthor(Autor de cadena, página de solicitud de página solicitud) {
return bookRepository.findByAuthor(autor, solicitud de página);
}
@override
página pública findByTitle(String título, PageRequest pageRequest) {
Devolver el repositorio de libros findbytitle(título, solicitud de página);
}
}
llamará. Las funciones subyacentes de ElasticSearch funcionan y pueden agregar, eliminar y modificar ElasticSearch.
Configuración de conexión de Elasticsearch del servidor de conexión:
Spring:
Datos:
Elasticsearch:
Nombre del clúster: es2018
Nodo de clúster: 10.172.8.154:9300
Repositorio:
Habilitado: verdadero
Elasticsearch:
Broma:
uri: .opendi.generador.
Importar com.opendi.generador.
Importar com.opendi. generador.service.bookservice;
Importar org.spring framework.beans.factory.annotation.autowired;
Importar org.spring framework.web variable de ruta. /p>
Importar org.framework de primavera.web.anotación de enlace.
importar marco de organización de primavera. Importar org. spring framework. web. bind. anotación. controlador resto;
Importar Java util. /p>
@Conexión automática
Servicio de libros privados;
@RequestMapping("/book/{id} ") p>
@ResponseBody p>
bean de libro público getBookById(@ ID de cadena de variable de ruta){
Opcional opcional = servicio de libro buscar byid(id);
libro de bean libro = optar. ();
sistema . println(libro);
Devolver el libro
}
@RequestMapping("/ save ")
@ResponseBody
Public void Save(){
system . set property(" es . set . netty . runtime . disponible . procesadores " ," false ");
book beanbook = newbookbean(" 1 "," Primeros pasos con ES","Cheng Yuqiang"," 2018-10-01 ");
sistema . println(libro);
servicio de libro .
}
}
Paquete com. opendi.generador
.controller de búsqueda elástica;
Importar com.opendi.generator.elasticsearch.model.post;
Importar com.opendi.generator.elasticsearch.model.tag;
Importar com.opendi.generator.elasticsearch.model.tag;
p>
Importar com.opendi.servicio de búsqueda elástica. io . anotaciones . API;
Importar anotaciones io .auto cableadas;
>Importar datos de org.spring.página de dominio;
Importar datos de org.spring framework. .Anotación de enlace.Obtener mapeo;
Importar org.spring framework.
. >Importar Java . util . matrices;
Importar Java . lista de utilidades;
@ Api(tags = "ejemplo de búsqueda elástica")
@RestController
Post-controlador de clase pública{
@Conexión automática
Servicio de correo privado;
@ApiOperation(value="Obtener resultados de ES" )
@GetMapping(value="getList ")
Lista pública ltpage gtgetList() lt;/page
{
Lista ltpage gtlist = new ArrayList ltpage gt(); lt/page lt;/page
Etiqueta Etiqueta = new Tag();
tag setid(" 1 "); p>
etiqueta .set name(" tech ");
Etiqueta Etiqueta 2 = nueva Etiqueta();
etiqueta 2
etiqueta 2 . setname(" búsqueda elástica ");
Publicar publicación = nueva publicación();
postid(" 1 "); >
post.setTitle("Esta es la publicación ");
post.setTags(Arrays.asList(etiqueta, etiqueta 2));
postservi
ce . guardar(publicación);
Publicar publicación 2 = nueva publicación();
publicación 2 . settitle(" oferta 2 ");
publicación 2. establecer etiquetas(arrays. as list(tag));
postservice(publicación 2);
publicaciones de página = postservice . findbytitle("Esta es la publicación", nueva PageRequest(0, 10));
publicaciones de página 2 = postservice(" oferta 2 ", nueva PageRequest(0, 10) ));
publicaciones de página 3 = postservice . findbytitle(" oferta 2 ", nueva PageRequest(0, 10));
lista .add(publicaciones 2);
lista .add(publicaciones 3
orden de devolución; >}
Impresión de consola: