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-solr
menciona
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
3. Seleccione docs
, es decir, el documento, y luego seleccione la versión actual.Si current
desea ver directamente la versión especificada, también puede acceder a ella según el número de versión.
4. Después de ingresar, seleccione reference
y luego seleccione html
, puede ingresar la documentación oficial
Documento oficial Spring-data-solr
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-solr
Los 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-solr
las dependencias spring-data-solr
y solr
la 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-solr
ver la relación correspondiente viendo el archivo
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
@SolrDocument
y usarlacollection
para describir el nombre del núcleo.
Al mismo tiempo,
@Id
indica el campo de clave principal y@Indexed
el 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 Repository
una 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-es
un 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.
Si desea implementar una consulta de paginación, puede usar el SolrCrudRepository integrado, que hereda de PagingAndSortingRepository, que proporciona una interfaz de paginación.
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.
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)
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 basePackages
es 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
9. Pruebe la interfaz de consulta al mismo tiempo
3. Consulta compleja
De hecho, la Repository
interfaz 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 SolrTemplate
integrado
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.query
construir 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 Criteria
objetos, por lo que también podemos consultar construyendo
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
Resumir
Este artículo no enumera la SolrTemplate
gramá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