springDataSolr的使用示例,crud操作,分页查询的操作

pring Data Solr:

这是一个spring组织生产的一个操作solr的工具, 底层使用的是solrJ. 使用它可以将solrj那种原有的面向命令的操作
改为面向对象的操作, Java程序员使用起来更容易理解, 方便.

spring Data Solr里面的Criteria对象中的方法, is和contains的区别:

contains: 是相当于数据库中like模糊查询的方式, 将查询关键字当成一个整体进行模糊查询
is: 将查询关键字使用对应这个域的分词器进行切分词, 然后将切分出来的每个词, 进行查询.

1.导入相关jar

  <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-solr</artifactId>
        <version>1.5.5.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>4.2.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.9</version>
    </dependency>

2.写applicationContext-solr.xml 的xml,IOC配置文件

<?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:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:solr="http://www.springframework.org/schema/data/solr"
       xsi:schemaLocation="http://www.springframework.org/schema/data/solr
  		http://www.springframework.org/schema/data/solr/spring-solr-1.0.xsd
		http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context
		http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- solr服务器地址 -->
    <solr:solr-server id="solrServer" url="http://192.168.200.128:8080/solr" />
    <!-- solr模板,使用solr模板可对索引库进行CRUD的操作 -->
    <bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
        <constructor-arg ref="solrServer" />
    </bean>
</beans>

3.提前配置好,数据库中商品对象的业务域,和实体类和业务域映射的注解(具体参照,solr简介篇:超链接)
实体类示例:注意get和set方法,省略了

public class Item implements Serializable {
    /**
     * 商品id,同时也是商品编号
     */
    @Field
    private Long id;

    /**
     * 商品标题
     */
    @Field("item_title")
    private String title;

    /**
     * 商品卖点
     */
    private String sellPoint;

    /**
     * 商品价格,单位为:元
     */
    @Field("item_price")
    private BigDecimal price;

    private Integer stockCount;

    /**
     * 库存数量
     */
    private Integer num;

    /**
     * 商品条形码
     */
    private String barcode;

    /**
     * 商品图片
     */
    @Field("item_image")
    private String image;

    /**
     * 所属类目,叶子类目
     */
    private Long categoryid;

    /**
     * 商品状态,1-正常,2-下架,3-删除
     */
    private String status;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 更新时间
     */
    private Date updateTime;

    private String itemSn;

    private BigDecimal costPirce;

    private BigDecimal marketPrice;

    private String isDefault;
    @Field("item_goodsid")
    private Long goodsId;

    private String sellerId;

    private String cartThumbnail;
    @Field("item_category")
    private String category;
    @Field("item_brand")
    private String brand;

    private String spec;
    @Field("item_seller")
    private String seller;

4.增加或者修改操作,删除操作代码
在这里插入图片描述

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext-solr.xml")
//solr 索引库的,增删操作
public class TestIndexManager {
    @Autowired
    private SolrTemplate solrTemplate;
    //增加或者修改的操作
    @Test
    public void testIndexCreatAndUpdate(){
        //存放索引数据的集合
        List<Item> itemList = new ArrayList<>();

        for (long i = 1; i <=100 ; i++) {
            Item item = new Item();
            item.setId(i);
            item.setTitle("三星手机");
            item.setCategory("手机");
            item.setPrice(new BigDecimal("9999"));
            item.setBrand("三星");
            //添加单个索引进集合
            itemList.add(item);
        }
        //保存商品详情进solr,
        // 注意,如果添加单个索引,不是集合,方法名用saveBean,没有S,不然报id异常
        solrTemplate.saveBeans(itemList);
        //提交操作
        solrTemplate.commit();
    }
    //删除的的操作
    @Test
    public void del(){
        //根据索引的对象的id 进行删除
//        solrTemplate.deleteById("1");

        //创建solr jar包中的Query对象,写查询条件
        Query query = new SimpleQuery("*:*");
        //根据查询条件进行删除
        solrTemplate.delete(query);
        //提交操作
        solrTemplate.commit();
    }
}

5.搜索的操作代码
在这里插入图片描述

public class TestIndexSearch {
    @Autowired
    private SolrTemplate solrTemplate;

    @Test
    public void testSearch() {
        //创建查询对象
        //Query query = new SimpleQuery("*:*");

        //创建查询对象
        Query query = new SimpleQuery();
        //创建查询条件对象, 注意这里的Criteria对象和mybatis中的那个不是同一个, 只是同名而已
        Criteria criteria = new Criteria("item_title").contains("手机");
        //查询对象中放入查询条件
        query.addCriteria(criteria);

        //从第几条开始查询
        query.setOffset(11);
        //设置每页查询多少条数据
        query.setRows(20);
        //查询并返回结果
        ScoredPage<Item> items = solrTemplate.queryForPage(query, Item.class);

        //总页数
        int totalPages = items.getTotalPages();
        //查询到的总记录数
        long totalElements = items.getTotalElements();
        //查询到的数据集合
        List<Item> content = items.getContent();
        //每页有多少条数据
        int numberOfElements = items.getNumberOfElements();

        System.out.println("====结束======");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值