Spring Data Solr

Spring Data Solr


Spring Data Solr 介绍

虽然支持任何编程语言的能力具有很大的市场价值,你可能感兴趣的问题是:我如何将Solr的应用集成到Spring中?可以,Spring Data Solr就是为了方便Solr的开发所研制的一个框架,其底层是对SolrJ(官方API)的封装。

 

 

Spring Data Solr 入门demo

1、引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>demo</groupId>
    <artifactId>springdatasolr</artifactId>
    <version>1.0-SNAPSHOT</version>


    <dependencies>
        <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>
    </dependencies>

</project>

 

2、编写配置文件(applicationContext-solr.xml)

<?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服务器地址,其实这里是配置HttpSolr的bean,只是框架对其进行了封装-->
	<solr:solr-server id="solrServer" url="http://127.0.0.1:8080/solr" />

   
	<!-- solr模板,使用solr模板可对索引库进行CRUD的操作 -->
	<bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
		<constructor-arg ref="solrServer" />
	</bean>
</beans>

3、编写实体类,并使用注解配置对应的业务域,只需要配置存在的业务域,如果属性名和业务域名相同,可以省略名称

    @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;

    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、操作Solr索引库相关代码

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
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 pojo.TbItem;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * 测试
 * Author xushuai
 * Description
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext-solr.xml")
public class TestTmplate {

    @Autowired
    private SolrTemplate solrTemplate;

    /**
     * 增加、修改索引
     * 在solr中操作存在ID的数据时,即为修改。ID不存在,即为增加
     */
    @Test
    public void testSaveAndUpdate() {
        TbItem item = new TbItem();
        item.setId(1L);
        item.setTitle("小米 Note");
        item.setCategory("手机");
        item.setBrand("小米");
        item.setPrice(new BigDecimal("1599"));
        item.setImage("http://192.168.25.133/group1/M00/00/00/wKgZhVtKCTuABB_0AADHZlg52Gw369.jpg");
        item.setGoodsId(149187842867981L);
        item.setSeller("xiaomi");

        // 保存对象到索引库
        solrTemplate.saveBean(item);
        // 注意提交
        solrTemplate.commit();
    }

    /**
     * 批量插入
     */
    @Test
    public void testAddList() {
        List<TbItem> list = new ArrayList<TbItem>();
        for (int i = 0; i < 100; i++) {
            TbItem item = new TbItem();
            item.setId(1L + i);
            item.setTitle("小米 Note" + i);
            item.setCategory("手机");
            item.setBrand("小米");
            item.setPrice(new BigDecimal("1599"));
            item.setImage("http://192.168.25.133/group1/M00/00/00/wKgZhVtKCTuABB_0AADHZlg52Gw369.jpg");
            item.setGoodsId(149187842867981L);
            item.setSeller("xiaomi");
            list.add(item);
        }
        // 保存对象到索引库
        solrTemplate.saveBeans(list);
        // 注意提交
        solrTemplate.commit();
    }

    /**
     * 按ID查询索引
     */
    @Test
    public void testGetById() {
        // 获取指定ID的索引(ID为索引库中的ID,在这里特指item对象的id)
        TbItem item = solrTemplate.getById(1L, TbItem.class);
        System.out.println(item);
    }

    /**
     * 删除指定ID的索引
     */
    @Test
    public void testDeleteById() {
        // 删除指定ID的索引
        solrTemplate.deleteById("1");
    }

    /**
     * 删除全部索引
     */
    @Test
    public void testDeleteAll() {
        Query query = new SimpleQuery("*:*");
        solrTemplate.delete(query);
        solrTemplate.commit();
    }

    /**
     * 分页查询
     */
    @Test
    public void testFindByPage() {
        // 创建查询条件对象,参数为 查询条件表达式
        Query query = new SimpleQuery("*:*");
        /*
         * 设置分页参数
         *      setOffset(Integer):从第几条记录开始,默认为0
         *      setRows(Integer):显示记录数,默认为10
         */
        query.setOffset(10);
        query.setRows(10);

        // 执行查询
        ScoredPage<TbItem> info = solrTemplate.queryForPage(query, TbItem.class);
        // 从查询结果中,获取相关信息
        // 获取总页数
        int totalPages = info.getTotalPages();
        System.out.println("总页数:" + totalPages);
        // 获取总记录
        long totalElements = info.getTotalElements();
        System.out.println("总记录数:" + totalElements);
        List<TbItem> content = info.getContent();// 获取数据集

        // 打印输出list
        showList(content);

    }

    /**
     * 复杂条件查询
     * 使用Criteria,构造并设置查询条件,然后将其赋值给查询对象
     */
    @Test
    public void testFindByCriteria() {
        // 创建查询对象,参数为 查询条件表达式
        Query query = new SimpleQuery("*:*");
        // 创建查询条件对象,使用业务域构造
        Criteria criteria = new Criteria("item_title");
        criteria.contains("1");
        query.addCriteria(criteria);
        // 执行查询,注意:如果不指定分页参数:默认从第一页开始,每页显示10条记录
        ScoredPage<TbItem> info = solrTemplate.queryForPage(query, TbItem.class);
        // 从查询结果中,获取相关信息
        // 获取总页数
        int totalPages = info.getTotalPages();
        System.out.println("总页数:" + totalPages);
        // 获取总记录
        long totalElements = info.getTotalElements();
        System.out.println("总记录数:" + totalElements);
        List<TbItem> content = info.getContent();// 获取数据集

        // 打印输出list
        showList(content);
    }


    /**
     * 打印输出list集合中的数据
     *
     * @param list 数据集
     */
    private void showList(List<TbItem> list) {
        for (TbItem item : list) {
            System.out.println(item.getTitle());
        }
    }
}

 

猜你喜欢

转载自blog.csdn.net/qq1031893936/article/details/81092482