上一篇我们已经分析了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(); } //修改操作不用写,主键只要一样就会覆盖 }