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:9200
para ver los datos después de la vuelta:
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
una conexión exitosa
Para el atributo de clave primaria de la clase con la entidad @JestId
Nota:
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();
}
Í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:
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:9200
datos devueltos para ver:
Configuración:
# 节点名称
spring.data.elasticsearch.cluster-name=docker-cluster
# 使用的是9300端口 并不是使用Http的9200端口通信的
spring.data.elasticsearch.cluster-nodes=111.111.111.111:9300
La conexión se realiza correctamente
Nota : Si el inicio puede ser la versión sin éxito SpringDataElasticsearch y no Elasticsearch ajuste
Solución:
1, actualización SpringBoot versión
2, instalar la versión correspondiente de Elasticsearch
Para las clases de entidad con la @Document
anotació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ó ElasticsearchRepository
Esta 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);
Í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);
}
consulta exitosa
Más formas de referirse a la documentación oficial: documento oficial