上一篇我们已经分析了spring-data-solr https://blog.csdn.net/weixin_42333583/article/details/82628887
接下来我们就带大家认识一下spring-data-solr在项目中的使用
首先大家需要solr服务器安装好, 直接访问solr的地址,这样下面操作的步骤更直观一些.
第一步:导包
需要导入测试的包,另外需要导入下面的这个包,哈哈,很明显这也是spring框架帮我封装好的,跟spring-data-redis一样简单配置就可以使用.
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-solr</artifactId>
<version>1.5.5.RELEASE</version>
</dependency>
第二步:获取solrTemplate 在resouorce目录下直接创建solr相关的配置,这样才能使用solrTemplate
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:solr="http://www.springframework.org/schema/data/solr"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/data/solr http://www.springframework.org/schema/data/solr/spring-solr.xsd">
<!--solr服务器地址-->
<solr:solr-server id="solr" url="http://127.0.0.1:8080/solr"></solr:solr-server>
<!--solrtemplate获取-->
<bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
<constructor-arg ref="solr"/>
</bean>
</beans>
第三步:创建pojo,并在pojo的成员变量属性上加相应的标签
此标签里面的内容一定是对应solrhome里面的schema-xml里面配置好的相应字段
普通字段只用加@Filed("schema.xml中相应的字段")
动态字段要加两个标签 @Dynamic @Field("item_spec_*")
以下是l\solr-4.10.2-apach-tomcat2\solrhome\collection1\conf 路径下的shema.xml中的配置,所以pojo里面的字段需要跟这些字段对相应着
pojo如下:
package com.pyg.pojo;
import org.apache.solr.client.solrj.beans.Field;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
public class TbItem implements Serializable{
@Field
private Long id;
@Field("item_title")
private String title;
@Field("item_price")
private BigDecimal price;
@Field("item_imag")
private String image;
@Field("item_goodsid")
private Long goodsId;
@Field("item_category")
private String category;
@Field("item_brand")
private String brand;
@Field("item_seller")
private String seller;
@Dynamic
@Field("item_spec_*")
private String spec;
省略getter和setter方法....
第四步: 注入solrTemplate后直接使用
package com.pyg.solr.test;
import com.pyg.pojo.TbItem;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.solr.core.SolrTemplate;
import org.springframework.data.solr.core.query.Criteria;
import org.springframework.data.solr.core.query.Query;
import org.springframework.data.solr.core.query.SimpleQuery;
import org.springframework.data.solr.core.query.result.ScoredPage;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class TbItemCURD {
@Autowired
private SolrTemplate solrTemplate;
//------------------------增加单个对象操作-----------------------------------------------
@Test
public void add(){
TbItem item = new TbItem();
item.setId(1L);
item.setPrice(new BigDecimal(1999));
item.setBrand("小米");
solrTemplate.saveBean(item);
solrTemplate.commit();
}
//------------------------增加多个对象-----------------------------------------------
@Test
public void multiAdd(){
List<TbItem> list= new ArrayList<TbItem>();
for(int i=1;i<=100;i++){
TbItem item = new TbItem();
item.setId(i+0L);
item.setBrand("华为"+i);
item.setPrice(new BigDecimal(2000+i));
item.setNum(99999);
item.setTitle("华为荣耀系列产品");
item.setStatus("1");
list.add(item);
}
solrTemplate.saveBeans(list);
solrTemplate.commit();
}
//------------------------根据主键查询一个对象-----------------------------------------------
@Test
public void findOne(){
TbItem item = solrTemplate.getById(1L, TbItem.class);
System.out.println("title:"+item.getTitle());
}
//------------------------分页查询-----------------------------------------------
@Test
public void findByOther(){
Query query=new SimpleQuery("*:*");
query.setOffset(0);
query.setRows(10);
ScoredPage<TbItem> tbItems = solrTemplate.queryForPage(query, TbItem.class);
List<TbItem> content = tbItems.getContent();//获取内容
for (TbItem tbItem : content) {
System.out.println("brand:"+tbItem.getBrand());
}
System.out.println("总条数"+tbItems.getTotalElements());//获取总条数
System.out.println("本页展示的条数"+tbItems.getTotalPages());//获取本页展示的条数
}
//-----------条件查询(注意条件查询只能对支持分词的字段查询,其余均无法查询)-------------
@Test
public void multifind(){
Query query = new SimpleQuery();
Criteria contains = new Criteria("item_title").contains("华为");
query.addCriteria(contains);
ScoredPage<TbItem> tbItems = solrTemplate.queryForPage(query, TbItem.class);
List<TbItem> content = tbItems.getContent();
for (TbItem tbItem : content) {
System.out.println(tbItem.getTitle());
}
}
//---------------------------按主键删除------------------------------------
@Test
public void deleteById(){
solrTemplate.deleteById("1");
solrTemplate.commit();
}
//删除全部数据
@Test
public void deleteAll(){
SimpleQuery query = new SimpleQuery("*:*");
solrTemplate.delete(query);
solrTemplate.commit();
}
//修改操作不用写,主键只要一样就会覆盖
}