Inicio rápido de Solr: integre spring-data-solr para realizar la operación del cliente (10)

0 Prefacio

El capítulo anterior introdujo el cliente solr oficial SolrJ, pero el uso de solrJ es relativamente inconveniente. Todavía necesita hacer algunas operaciones de cliente responsables y escribir declaraciones. ¿Existe un marco ORM más conveniente? Esto se spring-data-solrmenciona

1. Introducción

En primer lugar, si no sabe cómo ver los documentos oficiales del kit de herramientas relacionado con los datos de primavera, aquí hay una explicación unificada para todos.

1. Todos los documentos de spring-data se pueden ver en esta ruta https://docs.spring.io/spring-data/

2. Encuentra solr y haz clic para entrar

inserte la descripción de la imagen aquí
3. Seleccione docs, es decir, el documento, y luego seleccione la versión actual.Si currentdesea ver directamente la versión especificada, también puede acceder a ella según el número de versión.

inserte la descripción de la imagen aquí
4. Después de ingresar, seleccione referencey luego seleccione html, puede ingresar la documentación oficial

Documento oficial Spring-data-solr

inserte la descripción de la imagen aquí

Asegúrate de hacer un buen uso de los documentos oficiales, que pueden ayudarnos a evitar muchos desvíos. Este artículo también presenta brevemente las operaciones básicas de spring-data-solr. Para más usos, debe combinar documentos oficiales para expandir

spring-data-solrLos pasos de uso en realidad se explican en el código fuente de github , pero esperaremos a que lo construyas en detalle a continuación.

2. uso

1. Introduzca spring-data-solrlas dependencias spring-data-solry solrla relación correspondiente con los números de versión es la siguiente

spring-data-solr Solr
4.0.x 7.4.0
4.1.x 8.2.0
4.2.x 8.5.1
4.3.x 8.5.2

Si su solr está usando una versión anterior a la 7.4, puede spring-data-solrver la relación correspondiente viendo el archivo

inserte la descripción de la imagen aquí
Debido a que estoy usando aquí solr8.2.0, introduzco dependencias

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-solr</artifactId>
            <version>4.1.13.RELEASE</version>
        </dependency>

2. Agregar archivo de configuraciónapplication.properties

spring.data.solr.host=http://192.168.244.41:8983/solr

3. Crea una clase de entidadOrders

La entidad demostrada anteriormente se usa aquí. Si desea vincular spring-data-solr, debe agregar anotaciones a la clase de entidad @SolrDocumenty usarla collectionpara describir el nombre del núcleo.

Al mismo tiempo, @Idindica el campo de clave principal y @Indexedel campo de índice, y los atributos de nombre y tipo son consistentes con los configurados en el esquema administrado.

@Data
@SolrDocument(collection = "orders")
public class Orders {
    
    

    @Field("id")
    @Id
    @Indexed(name = "id", type = "long")
    private Long id;

    @Field("order_no")
    @Indexed(name = "order_no", type = "string")
    private String orderNo;

    @Field("address")
    @Indexed(name = "address", type = "text_general")
    private String address;

    @Field("product_name")
    @Indexed(name = "product_name", type = "string")
    private String productName;

    @Field("remarks")
    @Indexed(name = "remarks", type = "string")
    private String remarks;

    @Field("status")
    @Indexed(name = "status", type = "int")
    private Integer status;

    @Field("create_user")
    @Indexed(name = "create_user", type = "string")
    private String createUser;

    @Field("create_time")
    @Indexed(name = "create_time", type = "date")
    private Date createTime;

    @Field("labels")
    @Indexed(name = "labels", type = "string")
    private List<String> labels;

}

4. Cree Repositoryuna clase para declarar los métodos de adición, eliminación, modificación y consulta del núcleo correspondiente. Si lo ha usado, se sentirá spring-data-esun poco familiarizado. De hecho, el uso de los dos es similar.

public interface OrdersRepository extends CrudRepository<Orders, Long> {
    
    
}

CrudRepository viene con muchas interfaces de uso común para agregar, eliminar, modificar y consultar.
inserte la descripción de la imagen aquí
Si desea implementar una consulta de paginación, puede usar el SolrCrudRepository integrado, que hereda de PagingAndSortingRepository, que proporciona una interfaz de paginación.
inserte la descripción de la imagen aquí

Al mismo tiempo, spring-data-solr admite sintaxis autoexpandible, que también se explica en el documento oficial , y los métodos de interfaz se pueden implementar rápidamente a través de conectores (AND, OR) y nombres de campo.

inserte la descripción de la imagen aquí
No encontré la descripción de las palabras clave admitidas en general en spring-data-solr, pero se menciona en spring-data-elasticsearch , puede consultar

(Nota: todas las gramáticas siguientes solo se han verificado en spring-data-es, y spring-data-solr no se ha verificado. Es solo para referencia. La tasa de uso de solr bajo Tucao aquí no es tan alta como es, y los documentos oficiales proporcionados por spring-data También es muy diferente, muchos es tienen descripciones detalladas, pero no en solr, puede hacer referencias cruzadas, muchos contenidos son comunes)
inserte la descripción de la imagen aquí

Aquí escribimos dos, y al mismo tiempo cambiamos la clase heredada aSolrCrudRepository

@Repository
public interface OrdersRepository extends SolrCrudRepository<Orders, Long> {
    
    

    List<Orders> findByAddressOrProductName(String address, String productName);

    List<Orders> findByProductName(String productName);
}

5. Agregue anotaciones a la clase de inicio @EnableSolrRepositories(basePackages = "com.example.solrdemo.dao")para comenzar a escanear la clase Repository, que basePackageses la ruta del paquete de la clase Repository

6. Escriba la capa del controlador y escriba la interfaz de prueba

@RestController
@RequestMapping("orders/data")
public class OrdersDataController {
    
    

    @Autowired
    private OrdersRepository ordersRepository;

    @GetMapping("save2")
    public void save2(Long id){
    
    
        Orders orders = new Orders();
        orders.setId(id);
        orders.setOrderNo("20230601000"+id);
        orders.setAddress("贵州省遵义市");
        orders.setProductName("小米手机");
        orders.setRemarks("送货上门");
        orders.setCreateUser("root");
        orders.setCreateTime(new Date());
        orders.setStatus(1);
        ordersRepository.save(orders);
    }

    @GetMapping("searchByName")
    public List<Orders> searchByName(String productName){
    
    
        return ordersRepository.findByProductName(productName);
    }

    @GetMapping("searchByAddressAndName")
    public List<Orders> search2(String address, String name){
    
    
        return ordersRepository.findByAddressOrProductName(address, name);
    }

}

7. Llame a la nueva interfaz: http://localhost:8092/orders/data/save?id=10

8. La consulta en solr-admin encontró que los datos se agregaron correctamente

inserte la descripción de la imagen aquí

9. Pruebe la interfaz de consulta al mismo tiempo

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

3. Consulta compleja

De hecho, la Repositoryinterfaz anterior solo puede cumplir con la realización de nuestra interfaz simple. Puede haber escenarios gramaticales más complejos en la producción real. En este momento, podemos usar el SolrTemplateintegrado

1. Primero crea una clase de configuración e inicialízalaSolrTemplate

@Configuration
public class SolrConfig {
    
    

    @Value("${spring.data.solr.host}")
    private String host;

    @Bean
    public SolrClient solrClient(){
    
    
        return new HttpSolrClient.Builder(host).build();
    }

    @Bean
    public SolrTemplate solrTemplate(){
    
    
        return new SolrTemplate(solrClient());
    }
}

2. solrTemplate proporciona consultas, las más simples solo necesitan Query.queryconstruir declaraciones de consulta

 @GetMapping("save2")
    public void save2(Long id){
    
    
        Orders orders = new Orders();
        orders.setId(id);
        orders.setOrderNo("20230601000"+id);
        orders.setAddress("贵州省遵义市");
        orders.setProductName("小米手机");
        orders.setRemarks("送货上门");
        orders.setCreateUser("root");
        orders.setCreateTime(new Date());
        orders.setStatus(1);
        solrTemplate.saveBean("orders", orders);
        solrTemplate.commit("orders");
    }

    @GetMapping("search3")
    public Page<Orders> search3(String address, String name){
    
    

        Query query = Query.query("address:"+address+" AND product_name:"+name);

        Page<Orders> orders = solrTemplate.query("orders", query, Orders.class);
        return orders;
    }

Pero a veces queremos un método de construcción orientado a objetos. Podemos ver que el parámetro del método Query.query también admite Criteriaobjetos, por lo que también podemos consultar construyendo

inserte la descripción de la imagen aquí

3. Se puede ver más uso en el documento oficial:
https://docs.spring.io/spring-data/data-solr/docs/current/reference/html/#solr.misc.partialUpdates

inserte la descripción de la imagen aquí

Resumir

Este artículo no enumera la SolrTemplategramática más detallada, sino más bien para proporcionar una entrada para el aprendizaje. El propósito de este artículo no es estudiar la gramática avanzada de forma intensiva, sino guiarlo para que domine los conceptos básicos y lidere la entrada. Se incluyen usos más profundos Depende de ti Pruébalo con documentos oficiales

código fuente del proyecto

El código fuente de la demostración en este artículo es el siguiente: https://gitee.com/wuhanxue/wu_study/tree/master/demo/solr-demo

Supongo que te gusta

Origin blog.csdn.net/qq_24950043/article/details/131259481
Recomendado
Clasificación