Spring Data Solr入门

本文介绍了Spring Data Solr的基本概念,并通过一个详细的小Demo展示了如何设置项目依赖、配置Spring上下文、创建实体类以及进行CRUD操作,包括添加、查询、删除和分页查询等核心功能。
摘要由CSDN通过智能技术生成

Spring Data Solr简介

Spring Data Solr就是为了方便Solr的开发所研制的一个框架,其底层是对SolrJ(官方API)的封装。提供了一个模板工具类SolrTemplate,继承Spring的优良特性,将对象给SpringIOC容器管理,通过模板对象操作solr索引库,实现CRUD。

Spring Data Solr入门小Demo

 

1.创建maven工程,pom.xml中引入依赖

<dependencies>
 <!--Spring-Data-Solr-->
 <dependency>
   <groupId>org.springframework.data</groupId>
   <artifactId>spring-data-solr</artifactId>
   <version>1.5.5.RELEASE</version>
 </dependency>

 <!--spring测试依赖-->
 <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-test</artifactId>
   <version>4.1.9.RELEASE</version>
   <scope>test</scope>
 </dependency>

 <!-- Test dependencies -->
 <dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>4.12</version>
   <scope>test</scope>
 </dependency>
</dependencies>

2.在src/main/resources/spring下创建  spring-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/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
        http://www.springframework.org/schema/data/solr
        http://www.springframework.org/schema/data/solr/spring-solr.xsd">

        <!--指定solr地址 操作本地 collection1是索引库-->
        <solr:solr-server id="solrServer" url="http://192.168.200.128:8080/solr/collection1" />
        <!-- solr模板,使用solr模板可对索引库进行CRUD的操作 -->
        <bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
            <constructor-arg ref="solrServer" />
        </bean>
</beans>

3.在src/main/java下创建一个实体类  cn.zf.domain.Item(并实现序列化接口

package cd.zf.domain;

import org.apache.solr.client.solrj.beans.Field;

import java.io.Serializable;
import java.math.BigDecimal;

public class Item implements Serializable{
    @Field
    private Long id;

    @Field("item_title")
    private String title;

    @Field("item_price")
    private BigDecimal price;

    @Field("item_image")
    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;

    //...get...set...toString......

}

4.在src/test下创建一个测试类,cn.zf.test.TestSolr

4.1增加(修改

package cd.zf.test;

import cd.zf.domain.Item;
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.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.math.BigDecimal;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring/spring-solr.xml")
public class TestSolr {

    @Autowired
    private SolrTemplate solrTemplate;

    /***
     * 增加数据测试
     */
    @Test
    public void testAdd(){
        Item item = new Item();
        item.setId(1L);
        item.setBrand("华为");
        item.setCategory("手机");
        item.setGoodsId(1L);
        item.setSeller("华为2号专卖店");
        item.setTitle("华为Mate9");
        item.setPrice(new BigDecimal(2000));

        //执行保存操作
        solrTemplate.saveBean(item);

        //提交
        solrTemplate.commit();
    }
}

 

运行成功进入solr索引库查看:

4.2按主键查询

/***
 * 根据ID查询
 */
@Test
public void testGetById(){
    Item item = solrTemplate.getById("1", Item.class);
    System.out.println(item);
}

运行成功控制台查看结果:

4.3按主键删除

/***
 * 根据主键删除
 */
@Test
public void testDeleteById(){
    solrTemplate.deleteById("1");
    solrTemplate.commit();
}

运行成功进入solr索引库查看:

4.4分页查询


    /**
     * 分页查询
     */
    @Test
    public void testPageSearch(){
        //创建Query指定查询条件
        Query query = new SimpleQuery("*:*");
        //设置分页
        query.setOffset(0);//开始索引(默认0
        query.setRows(5);//每页记录数(默认10

        //分页查询
        //query:是查询条件的封装
        //Item.class:查询的数据结果集需要转换成Item
        ScoredPage<Item> scorePage = solrTemplate.queryForPage(query, Item.class);

        //获取结果集
        List<Item> items = scorePage.getContent();

        //总记录数
        System.out.println("总记录数:"+scorePage.getTotalElements());

        //输出记录
        for (Item item : items) {
            System.out.println(item);
        }
    }

运行成功控制台查看结果:

4.5条件查询(Criteria 用于对条件的封装

​
/***
 * 条件查询
 */
@Test
public void testPageSearchMutil(){
    Query query = new SimpleQuery("*:*");

    //封装查询条件
    Criteria criteria = new Criteria("item_title").contains("华为");

    //把Criteria加入到Query中
    query.addCriteria(criteria);
    //设置分页
    query.setOffset(0); //开始索引(默认0)
    query.setRows(15);   //每页记录数(默认10)

    //分页查询
    ScoredPage<Item> items = solrTemplate.queryForPage(query, Item.class);
    //总记录数
    System.out.println("总记录数:"+items.getTotalElements());

    //输出记录
    for (Item item : items.getContent()) {
        System.out.println(item);
    }
}


​

运行成功控制台查看结果:

4.6删除全部数据

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

运行成功进入solr索引库查看:

4.7插入多条数据

/**
     * 插入多条数据
     */
    @Test
    public void testBatchAdd(){
        ArrayList<Item> items = new ArrayList<Item>();
        for (int i = 0; i <20 ; i++) {
            Item item = new Item();
            item.setId(1L+(int)(Math.random()*100));
            item.setBrand("华为"+(int)(Math.random()*100));
            item.setCategory("手机"+(int)(Math.random()*100));
            item.setGoodsId(1L+(int)(Math.random()*100));
            item.setSeller("华为2号专卖店"+(int)(Math.random()*100));
            item.setTitle("华为Mate9"+(int)(Math.random()*100));
            item.setPrice(new BigDecimal(2+(int)(Math.random()*100)));

            items.add(item);
        }

        //执行保存操作
        solrTemplate.saveBeans(items);

        //提交
        solrTemplate.commit();
    }

运行成功后进入solr索引库查看:

 

over~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值