Spring Boot integra el tutorial súper detallado de Elasticsearch


SpringBoot integra el tutorial ultra detallado de Elasticsearch

última versión premium

(1) Importar springboot para integrar coordenadas de clientes de alto nivel ES

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>

(2) Use la programación para configurar el servidor ES conectado y obtener el objeto del cliente

@SpringBootTest
class HighClientTest {
    
    
    private RestHighLevelClient client;
      @Test
      void testCreateClient() throws IOException {
    
    
          HttpHost host = HttpHost.create("http://localhost:9200");
          RestClientBuilder builder = RestClient.builder(host);
          client = new RestHighLevelClient(builder);
  
          client.close();
      }
}

(3) Clase de entidad de libro

@Data
public class Book {
    
    
    private Integer id;
    private String type;
    private String name;
    private String description;
}

(4) Conectarse a la capa Dao

@Mapper
public interface BookDao extends BaseMapper<Book> {
    
    
}

(5) Usar el objeto de cliente para operar ES

Por ejemplo, cree un índice: (Aquí, primero debe realizar la operación de eliminación de índice anterior; de lo contrario, se informará un error)

@SpringBootTest
class HighClientTest{
    
    
    private RestHighLevelClient client;
      @Test
      void testCreateIndex() throws IOException {
    
    
          HttpHost host = HttpHost.create("http://localhost:9200");
          RestClientBuilder builder = RestClient.builder(host);
          client = new RestHighLevelClient(builder);
          
          CreateIndexRequest request = new CreateIndexRequest("books");
          client.indices().create(request, RequestOptions.DEFAULT); 
          
          client.close();
      }
}

(6) Crear un índice (tokenizador IK)

@Test
void testCreateIndexByIK() throws IOException {
    
    
    CreateIndexRequest request = new CreateIndexRequest("books");
    String json = "{\n" +
            "    \"mappings\":{\n" +
            "        \"properties\":{\n" +
            "            \"id\":{\n" +
            "                \"type\":\"keyword\"\n" +
            "            },\n" +
            "            \"name\":{\n" +
            "                \"type\":\"text\",\n" +
            "                \"analyzer\":\"ik_max_word\",\n" +
            "                \"copy_to\":\"all\"\n" +
            "            },\n" +
            "            \"type\":{\n" +
            "                \"type\":\"keyword\"\n" +
            "            },\n" +
            "            \"description\":{\n" +
            "                \"type\":\"text\",\n" +
            "                \"analyzer\":\"ik_max_word\",\n" +
            "                \"copy_to\":\"all\"\n" +
            "            },\n" +
            "            \"all\":{\n" +
            "                \"type\":\"text\",\n" +
            "                \"analyzer\":\"ik_max_word\"\n" +
            "            }\n" +
            "        }\n" +
            "    }\n" +
            "}";
    //设置请求中的参数
    request.source(json, XContentType.JSON);
    client.indices().create(request, RequestOptions.DEFAULT);
}

**Nota: **El tokenizador IK se establece en forma de parámetros de solicitud. Para establecer los parámetros de solicitud, utilice el método de origen en el objeto de solicitud para establecerlos. En cuanto a los parámetros, depende de su tipo de operación. Cuando se requieren parámetros en la solicitud, se puede usar el formulario actual para la configuración de parámetros.

(7) Agregar documentos :

   @Test
    //添加文档
    void testCreateDoc() throws IOException {
    
    
        Book book = bookDao.selectById(1);
        IndexRequest request = new IndexRequest("books").id(book.getId().toString());
        String json = JSON.toJSONString(book);
        request.source(json,XContentType.JSON);
        client.index(request,RequestOptions.DEFAULT);
    }

El objeto de solicitud que se usa para agregar un documento es IndexRequest, que es diferente del objeto de solicitud que se usa para crear un índice.

(8) Agregar documentos en lotes :

 //批量添加文档
    @Test
    void testCreateDocAll() throws IOException{
    
    
        List<Book> bookList = bookDao.selectList(null);
        BulkRequest bulk = new BulkRequest();
        for (Book book : bookList) {
    
    
            IndexRequest request = new IndexRequest("books").id(book.getId().toString());
            String json = JSON.toJSONString(book);
            request.source(json,XContentType.JSON);
            bulk.add(request);
        }
        client.bulk(bulk,RequestOptions.DEFAULT);
    }

**Nota:** Al realizar el procesamiento por lotes, primero cree un objeto BulkRequest, que puede entenderse como un contenedor para almacenar objetos de solicitud. Después de inicializar todas las solicitudes, agréguelas al objeto BulkRequest y luego use el objeto BulkRequest. El método se ejecuta a la vez.

Consultar documentos por id :

//根据id查询文档
    @Test
    void testGet() throws IOException {
    
    
        GetRequest request = new GetRequest("books","1");
        GetResponse response = client.get(request, RequestOptions.DEFAULT);
        String json = response.getSourceAsString();
        System.out.println(json);
    }

El objeto de solicitud utilizado para consultar documentos por id es GetRequest.

Consultar documentos por estado :

@Test
//按条件查询
void testSearch() throws IOException {
    
    
    SearchRequest request = new SearchRequest("books");
    SearchSourceBuilder builder = new SearchSourceBuilder();
    builder.query(QueryBuilders.termQuery("all","spring"));
    request.source(builder);

    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    SearchHits hits = response.getHits();
    for (SearchHit hit : hits) {
    
    
        String source = hit.getSourceAsString();
        //System.out.println(source);
        Book book = JSON.parseObject(source, Book.class);
        System.out.println(book);
    }
}

**Nota: **El objeto de solicitud que se usa para consultar documentos por condición es SearchRequest. El método termQuery del objeto SearchRequest se llama al realizar la consulta y se debe proporcionar el nombre del atributo de consulta. Aquí, el uso de campos combinados es compatible, que es todo lo que se agrega al definir el atributo de índice.

Eliminar según id:

    @Test
    void testDelete() throws IOException {
    
    
       DeleteRequest request = new DeleteRequest("books","1");
       client.delete(request,RequestOptions.DEFAULT);
    }

Resumir:

1. Use el índice para agregar un solo documento, en bloque para agregar todos los documentos, acceda a la consulta por identificación, elimine para eliminar por identificación y actualice para actualizar por identificación.

2. Los índices se utilizan para operar el índice;

Supongo que te gusta

Origin blog.csdn.net/weixin_54040016/article/details/127322807
Recomendado
Clasificación