Spring Data Elasticsearch opera ES de una manera más sencilla que MP

datos de primaveraES:

Spring Data Elasticsearch es parte del proyecto Spring Data, que proporciona soporte de acceso a datos integrado con Elasticsearch. Simplifica el proceso de desarrollo del uso del almacén de datos Elasticsearch en aplicaciones Spring, lo que facilita a los desarrolladores realizar operaciones de indexación, búsqueda y consulta de datos.

Características y funciones clave:

  1. Capa de abstracción del repositorio: Spring Data Elasticsearch proporciona una capa de abstracción del repositorio, similar a JPA. Al heredar ElasticsearchRepositoryla interfaz, puede definir y utilizar fácilmente varios métodos de consulta sin escribir explícitamente declaraciones de consulta de Elasticsearch.
  2. Asigna entidades automáticamente: Spring Data Elasticsearch asignará automáticamente clases de entidades a Índice (índice) y Tipo (tipo) en Elasticsearch, y también puedes especificar reglas de mapeo, como tipos de datos de campo, tokenizadores, etc.
  3. Soporte para consultas avanzadas: Spring Data Elasticsearch admite la creación de consultas complejas, incluida la búsqueda de texto completo, la consulta de rango, la consulta de filtro, las operaciones de agregación, etc. Puede utilizar el generador de consultas para generar consultas de Elasticsearch.
  4. Soporte para resaltar: puede utilizar la función de resaltado para marcar palabras clave que coincidan con su consulta en los resultados de búsqueda, mejorando así la visualización de los resultados de búsqueda.
  5. Soporte para operaciones asincrónicas: Spring Data Elasticsearch admite operaciones asincrónicas, lo cual es muy útil para procesar grandes cantidades de datos u operaciones de consulta que requieren mucho tiempo.
  6. Admite paginación y clasificación: Spring Data Elasticsearch admite funciones de paginación y clasificación, lo que le permite realizar operaciones de paginación y clasificación en los resultados de búsqueda.
  7. Integración con Spring Ecosystem: Spring Data Elasticsearch se integra perfectamente con otros componentes del marco Spring, como Spring Boot, Spring MVC, Spring Security, etc.
  8. Compatibilidad con múltiples versiones: Spring Data Elasticsearch admite múltiples versiones de Elasticsearch y puede elegir la versión de Spring Data Elasticsearch correspondiente de acuerdo con la versión de su clúster de Elasticsearch.

Después de todo, es un marco de formato. Solo necesitas crear la clase de entidad y el índice correspondiente se creará en el NoSql correspondiente (un proyecto de inicio), así que es muy bueno. Creo que puedes operarlo siempre que hayas usado MP, y es más simple. que el diputado.

hola mundo CRUD:

Sin más, ve directamente a la demo:

1. archivo de configuración yaml:

elasticsearch:
  host: 10.14.0.77
  port: 9200
logging:
  level:
    com:
      es: debug

2. clase de configuración de configuración:

package com.example.springdataes.config;


import lombok.Data;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;

/**
 * @project springdataES
 * @author capture or new
 */
@ConfigurationProperties(prefix = "elasticsearch")
@Configuration
@Data
public class ElasticsearchConfig  extends AbstractElasticsearchConfiguration {
    
    

    private String host ;
    private Integer port ;

    @Override
    public RestHighLevelClient elasticsearchClient() {
    
    
        RestClientBuilder builder = RestClient.builder(new HttpHost(host, port));
        RestHighLevelClient restHighLevelClient = new
                RestHighLevelClient(builder);
        return restHighLevelClient;
    }
}

3. Para conocer el significado de las anotaciones de clase pojo, consulte el sitio web oficial de Spring .

package com.example.springdataes.pojo;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * @project springdataES
 * @author capture or new
 */
@Data
@Document(indexName = "order", shards = 1, replicas = 1)
public class Order implements Serializable {
    
    
    @Id
    private Integer id;

    @Field(type = FieldType.Keyword)
    private Long orderNo;

    @Field(type = FieldType.Integer)
    private Integer orderType;

    @Field(type = FieldType.Long)
    private Long orderAmount;

    @Field(type = FieldType.Text)
    private String orderDesc;

    @Field(type = FieldType.Keyword)
    private String username;

    @Field(type = FieldType.Keyword)
    private String userPhone;

    private Map<String, List<String>> highlights;
}

4. Clase de interfaz del repositorio:

package com.example.springdataes.repository;

import com.example.springdataes.pojo.Order;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

/**
 * @project springdataES
 * @author capture or new
 */
public interface OrderRepository extends ElasticsearchRepository<Order, Integer> {
    
    
}

5. Clase de interfaz de servicio:

package com.example.springdataes.service;

import com.example.springdataes.pojo.Order;
import org.springframework.data.domain.Page;

import java.util.List;

/**
 * @project springdataES
 * @author capture or new
 */
public interface OrderService {
    
    
    void saveAll(List<Order> orders);

    Order findById(Integer id);

    void deleteById(Integer id);

    void updateById(Order order);

    List<Order> findList(Order order, Integer pageIndex, Integer pageSize);

    Page<Order> findAll(Integer pageIndex, Integer pageSize);

}

6. Clase de implementación del servicio:

package com.example.springdataes.service;

import com.example.springdataes.pojo.Order;
import com.example.springdataes.repository.OrderRepository;
import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.Criteria;
import org.springframework.data.elasticsearch.core.query.CriteriaQuery;
import org.springframework.data.elasticsearch.core.query.HighlightQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @project springdataES
 * @author capture or new
 */
@Service
@Slf4j
public class OrderServiceImpl implements OrderService {
    
    
    @Autowired
    OrderRepository orderRepository;

    @Autowired
    ElasticsearchRestTemplate elasticsearchRestTemplate;

    @Override
    public void saveAll(List<Order> orders) {
    
    
        orderRepository.saveAll(orders);
    }

    @Override
    public void deleteById(Integer id) {
    
    
        orderRepository.deleteById(id);
    }

    @Override
    public void updateById(Order order) {
    
    
        orderRepository.save(order);
    }

    @Override
    public List<Order> findList(Order order, Integer pageIndex, Integer pageSize) {
    
    
        CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria()
                .and(new Criteria("orderDesc").contains(order.getOrderDesc()))
                .and(new Criteria("orderNo").is(order.getOrderNo())))
                .setPageable(PageRequest.of(pageIndex, pageSize));

        SearchHits<Order> searchHits = elasticsearchRestTemplate.search(criteriaQuery, Order.class);
        List<Order> result = searchHits.get().map(item -> item.getContent()).collect(Collectors.toList());
        System.out.println(result);
        return result;
    }

    @Override
    public Page<Order> findAll(Integer pageIndex, Integer pageSize) {
    
    
        Page<Order> page = orderRepository.findAll(PageRequest.of(pageIndex, pageSize));
        System.out.println(page.getTotalElements());
        System.out.println(page.getContent());

        return page;
    }

    @Override
    public Order findById(Integer id) {
    
    
        return orderRepository.findById(id).orElse(null);
    }


}


7. Clase de controlador:

package com.example.springdataes.controller;

import com.example.springdataes.pojo.Order;
import com.example.springdataes.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @project springdataES
 * @author capture or new
 */
@RequestMapping("/doc/")
@RestController
public class DocController {
    
    

    @Autowired
    OrderService orderService;

    /**
     * 批量创建
     */
    @PostMapping("saveBatch")
    public String saveBatch(@RequestBody List<Order> orders) {
    
    
        if (CollectionUtils.isEmpty(orders)) {
    
    
            return "文档不能为空";
        }
        orderService.saveAll(orders);
        return "保存成功";
    }

    /**
     * 根据id删除
     */
    @GetMapping("deleteById")
    public String deleteById(@RequestParam Integer id) {
    
    
        orderService.deleteById(id);
        return "删除成功";
    }

    /**
     * 根据id更新
     */
    @PostMapping("updateById")
    public String updateById(@RequestBody Order order) {
    
    
        orderService.updateById(order);
        return "更新成功";
    }

    /**
     * 根据id搜索
     */
    @GetMapping("findById")
    public String findById(@RequestParam Integer id) {
    
    
        return orderService.findById(id).toString();
    }

    /**
     * 分页搜索所有
     */
    @GetMapping("findAll")
    public String findAll(@RequestParam Integer pageIndex, @RequestParam Integer pageSize) {
    
    
        return orderService.findAll(pageIndex, pageSize).toString();
    }

    /**
     * 条件分页搜索
     */
    @GetMapping("findList")
    public String findList(@RequestBody Order order, @RequestParam Integer pageIndex, @RequestParam Integer pageSize) {
    
    
        return orderService.findList(order, pageIndex, pageSize).toString();
    }

}

interfaz:

Escriba las pruebas para las dos interfaces a continuación. Fácil de operar

1. Incrementar:

Tipo de interfaz:POST

DIRECCIÓN:http://localhost:8080/doc/saveBatch

Cuerpo de la solicitud:

[
    {
    
    
        "id":2,
        "orderNo":78,
        "orderType":2,
        "orderAmount":77,
        "orderDesc":"demo",
        "username":"zhangsan",
        "userPhone":"17828493848"
    }
]

2. Búsqueda de página condicional

Tipo de interfaz:GET

DIRECCIÓN:http://localhost:8080/doc/findList?pageIndex=0&pageSize=5

Cuerpo de la solicitud:


    {
    
    
        "orderNo":78,
        "orderDesc":"demo"
    }

Supongo que te gusta

Origin blog.csdn.net/qq_63946922/article/details/132035713
Recomendado
Clasificación