SpringBoot estudio especial Part28: SpringBoot integración Elasticsearch (uso broma y la primavera de datos Elasticsearch operar)

I. Introducción

Elasticsearch es una basada en Lucene inferior servicio de búsqueda distribuida y proporciona API multi-estilo reparador Shard (corte) de modo de seguridad de datos también proporciona funciones automáticas resharding

Elasticsearch puede buscar y analizar rápidamente grandes cantidades de almacenamiento de datos

SpringBoot soporte por defecto ambas tecnologías para interactuar y elasticsearch: La broma y la primavera de datos Elasticsearch
SpringBoot por defecto utilizando la primavera de datos Elasticsearch módulo para operar

En segundo lugar, el uso

La broma es un muy popular Elasticsearch herramientas de cliente utilizando HTTP y el cliente de interacción
por defecto broma no está en vigor para tener efecto necesidad de importar broma Kit ( io.searchbox.client.JestClient)

1, funciona usando Jest

El primero es importar broma dependientes:

Nota: Dependiendo de la versión y el correspondiente Elasticsearch
ejemplo, yo era la versión 6.x Elasticsearch a continuación, utilizar la versión 6.x Jest

<dependency>
	<groupId>io.searchbox</groupId>
	<artifactId>jest</artifactId>
	<version>6.3.1</version>
</dependency>

Versión elasticsearch puede acceder ip:9200para ver los datos después de la vuelta:
Aquí Insertar imagen Descripción

parámetros de configuración Entonces:

URI de 9200 es el puerto por defecto subyacente de la máquina

spring.elasticsearch.jest.uris=http://111.111.111.111:9200

Nota: Configurar la hora de traer URI http método de petición no sólo IP: puerto de lo contrario será error de carácter ilegal en nombre de esquema de
Aquí Insertar imagen Descripción
una conexión exitosa

Para el atributo de clave primaria de la clase con la entidad @JestIdNota:

public class Student {
    
    // 用@JestId注解来标明主键 标注之后 存入Elasticsearch的id值就采用该属性的值了
    @JestId
    private Integer id;
    private String name;
    private String hobby;
    private String introduce;

    [getter和setter...]
}

Luego está la llamada:

Inyección JestClient a clase:

@Autowired
JestClient jestClient;

Elasticsearch para indexar un documento:

Student student=new Student();
student.setId(1);
student.setName("陈涛");
student.setHobby("swimming");
student.setIntroduce("Hello World");

// 构建一个索引
// index(索引名).type(类型名)
// 还可通过id(id值)来设置id 因为id已经有了 就不设置了
Index index = new Index.Builder(student).index("zjitc").type("student").build();

try {
    // 执行该索引
    jestClient.execute(index);
} catch (IOException e) {
    e.printStackTrace();
}

Aquí Insertar imagen Descripción
Índice de éxito


búsqueda de texto completo:

Sólo necesita para pasar formato JSON puede buscar la expresión

// 定义搜索表达式
String json="{\n" +
        "    \"query\" : {\n" +
        "        \"match\" : {\n" +
        "            \"introduce\" : \"Hello\"\n" +
        "        }\n" +
        "    }\n" +
        "}";

// 构建搜索
Search search = new Search.Builder(json).addIndex("zjitc").addType("student").build();

try {
    // 执行该索引
    SearchResult result = jestClient.execute(search);
    // 输出JSON格式的结果
    System.out.println(result.getJsonString());
} catch (IOException e) {
    e.printStackTrace();
}

Acerca de las expresiones de búsqueda introducción de otro blog que veo: bajo Elasticsearch buscar middleware instalación del entorno del estibador y utilizar las operaciones básicas (mantenimiento, búsqueda condicional, búsqueda de texto completo, frase de búsqueda, resalte la búsqueda)
documentos oficiales: Elasticsearch : La guía definitiva


2, funciona usando la primavera de datos Elasticsearch

Primavera de arranque proporciona una función de búsqueda muy conveniente el apoyo de la integración de la primavera de datos Elasticsearch

En primer lugar es el dependiente de importaciones:

Si crea un proyecto con SpringBoot inicializador, a continuación, seleccione el módulo de resorte datos Elasticsearch:
Aquí Insertar imagen Descripción
si el proyecto no se crea con el asistente tendrá que manualmente SpringDataElasticsearch dependencia de las importaciones:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

A continuación, los parámetros de configuración:

por defecto la primavera de datos Elasticsearch se ha configurado automáticamente los clientes TransportClient
necesidad de configurar un clúster de nodo de información clusternodes: clusterName
nombre de nodo también puede acceder a los ip:9200datos devueltos para ver:
Aquí Insertar imagen Descripción
Configuración:

# 节点名称
spring.data.elasticsearch.cluster-name=docker-cluster
# 使用的是9300端口 并不是使用Http的9200端口通信的
spring.data.elasticsearch.cluster-nodes=111.111.111.111:9300

Aquí Insertar imagen Descripción
La conexión se realiza correctamente

Nota : Si el inicio puede ser la versión sin éxito SpringDataElasticsearch y no Elasticsearch ajuste
Aquí Insertar imagen Descripción
Solución:
1, actualización SpringBoot versión
2, instalar la versión correspondiente de Elasticsearch

Para las clases de entidad con la @Documentanotación para especificar el nombre del índice y el nombre del tipo:

// 用@Document注解来指定索引名和类型名
@Document(indexName = "ciczjitc",type = "book")
public class Book {
    private Integer id;
    private String name;
    private String author;

    [getter和setter...]
}

Primavera de datos Elasticsearch también permitió ElasticsearchRepositoryEsta interfaz define una serie de operaciones de método Elasticsearch
siempre que la interfaz puede heredar

Los viajeros están ElasticsearchRepository sub-interfaces para operar:

//ElasticsearchRepository泛型:<要存储的类型,主键的类型>
public interface BookRepository extends ElasticsearchRepository<Book,Integer> {
}

Por último, el uso:

Un ElasticsearchRepository inyección de clase:

@Autowired
StudentRepository studentRepository;

Elasticsearch para indexar un documento:

Book book=new Book();
book.setId(1);
book.setName("My life");
book.setAuthor("张涛");
bookRepository.index(book);

Aquí Insertar imagen Descripción
Índice de éxito


El apoyo también consultas difusas:

Interface para agregar una interfaz ElasticsearchRepository método heredado:

public interface BookRepository extends ElasticsearchRepository<Book,Integer> {

    public List<Book> findByNameLike(String name);
}

prueba:

List<Book> books = bookRepository.findByNameLike("life");
for (Book b:books)
{
    System.out.println(b);
}

Aquí Insertar imagen Descripción
consulta exitosa

Más formas de referirse a la documentación oficial: documento oficial
Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción


Publicados 177 artículos originales · ganado elogios 5 · Vistas de 390.000 +

Supongo que te gusta

Origin blog.csdn.net/Piconjo/article/details/105298964
Recomendado
Clasificación