Linux环境安装solr以及SpringDataSolr的使用

solr的安装

01环境准备

环境要求
  • VMware Linux CentOS-6.5。
  • JDK 1.7.0_07
  • Tomcat-7.0.52。

02开始安装

第一步:目录准备,在usr/local/目录下创建solr目录。

图片.png

并将apache-tomcat-7.0.52.tar.gz上传至Linux,安装tomcat到此目录下(上传工具可以使用FileZilla Client)。

图片.png
图片.png

第二步:把solr-4.10.3的压缩包上传到Linux系统。并解压得到solr-4.10.3文件夹。(我安装的是solr-4.10.3。)


图片.png

第二步:将/usr/local/src/solr-4.10.3/dist目录下的solr-4.10.3.war包复制到tomcat(我tomcat安装路径为/usr/local/tomcat7)的wepapp下面改名为solr.war,并启动tomcat解压solr.war。

图片.png

第三步:删除solr.war包,注意一定要先关闭tomcat再删除solr.war包,否则解压后的solr工程文件夹也会被删除。

图片.png

第四步:添加solr工程依赖的jar包。将/usr/local/src/solr-4.10.3/example/lib/ext下面的所有jar包都复制到solr工程WEB-INF/lib下面。


图片.png

第五步:添加solrhome:将/usr/local/src/solr-4.10.3/example下面的solr目录,复制到/usr/local/solr/下面,并改名为solrhome。

图片.png
图片.png

第六步:修改solr工程的配置web.xml文件。将web.xml中的 env-entry 标签中的env-entry-value路径改为/usr/local/solr/solrhome,注意要去掉 env-entry 标签的注释

图片.png
图片.png

第七步:启动Tomcat,在浏览器中输入http://192.168.25.200:8080/solr。访问solr页面。出现下面页面代表安装成功。

图片.png

SpringDataSolr的使用

IK Analyzer

IK Analyzer 是一个开源的,基亍 java 语言开发的轻量级的中文分词工具包。从 2006年 12 月推出 1.0 版开始, IKAnalyzer 已经推出了 4 个大版本。最初,它是以开源项目Luence 为应用主体的,结合词典分词和文法分析算法的中文分词组件。从 3.0 版本开始,IK 发展为面向 Java 的公用分词组件,独立亍 Lucene 项目,同时提供了对 Lucene 的默认优化实现。在 2012 版本中,IK 实现了简单的分词歧义排除算法,标志着 IK 分词器从单纯的词典分词向模拟语义分词衍化。

配置IK Analyzer
  • 1、把IKAnalyzer2012FF_u1.jar 添加到 solr 工程的 lib 目录下
  • 2、创建WEB-INF/classes文件夹 把扩展词典、停用词词典、配置文件放到 solr 工程的 WEB-INF/classes 目录下。
  • 3、修改 Solrhome 的 schema.xml 文件,配置一个 FieldType,使用 IKAnalyzer

     

配置域

域相当于数据库的表字段,用户存放数据,因此用户根据业务需要去定义相关的Field(域),一般来说,每一种对应着一种数据,用户对同一种数据进行相同的操作。
域的常用属性:

  • name:指定域的名称
  • type:指定域的类型
  • indexed:是否索引
  • stored:是否存储
  • required:是否必须
  • multiValued:是否多值

修改solrhome的schema.xml 文件 设置业务系统 Field

    
    
    
    
    
    
    
复制域

复制域的作用在于将某一个Field中的数据复制到另一个域中,扩大搜索范围。






动态域

当我们需要动态扩充字段时,我们需要使用动态域。对于品优购,规格的值是不确定的,所以我们需要使用动态域来实现。需要实现的效果如下:

  

搭建工程

引入依赖
   
    
        org.springframework.data
        spring-data-solr
        1.5.5.RELEASE
     
    
        org.springframework
        spring-test
        4.2.4.RELEASE
    
    
        junit
        junit
        4.9
    
  
配置文件

在src/main/resources下创建 applicationContext-solr.xml



    
    
    
    
        
    

编写代码
创建pojo
package com.cehae.pojo;

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

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

public class Item implements Serializable {

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

    @Override
    public String toString() {
        return "TbItem [id=" + id + ", title=" + title + ", sellPoint=" + sellPoint + ", price=" + price
                + ", stockCount=" + stockCount + ", num=" + num + ", barcode=" + barcode + ", image=" + image
                + ", categoryid=" + categoryid + ", status=" + status + ", createTime=" + createTime + ", updateTime="
                + updateTime + ", itemSn=" + itemSn + ", costPirce=" + costPirce + ", marketPrice=" + marketPrice
                + ", isDefault=" + isDefault + ", goodsId=" + goodsId + ", sellerId=" + sellerId + ", cartThumbnail="
                + cartThumbnail + ", category=" + category + ", brand=" + brand + ", spec=" + spec + ", seller="
                + seller + "]";
    }

    private static final long serialVersionUID = 1L;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title == null ? null : title.trim();
    }

    public String getSellPoint() {
        return sellPoint;
    }

    public void setSellPoint(String sellPoint) {
        this.sellPoint = sellPoint == null ? null : sellPoint.trim();
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public Integer getStockCount() {
        return stockCount;
    }

    public void setStockCount(Integer stockCount) {
        this.stockCount = stockCount;
    }

    public Integer getNum() {
        return num;
    }

    public void setNum(Integer num) {
        this.num = num;
    }

    public String getBarcode() {
        return barcode;
    }

    public void setBarcode(String barcode) {
        this.barcode = barcode == null ? null : barcode.trim();
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image == null ? null : image.trim();
    }

    public Long getCategoryid() {
        return categoryid;
    }

    public void setCategoryid(Long categoryid) {
        this.categoryid = categoryid;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status == null ? null : status.trim();
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    public String getItemSn() {
        return itemSn;
    }

    public void setItemSn(String itemSn) {
        this.itemSn = itemSn == null ? null : itemSn.trim();
    }

    public BigDecimal getCostPirce() {
        return costPirce;
    }

    public void setCostPirce(BigDecimal costPirce) {
        this.costPirce = costPirce;
    }

    public BigDecimal getMarketPrice() {
        return marketPrice;
    }

    public void setMarketPrice(BigDecimal marketPrice) {
        this.marketPrice = marketPrice;
    }

    public String getIsDefault() {
        return isDefault;
    }

    public void setIsDefault(String isDefault) {
        this.isDefault = isDefault == null ? null : isDefault.trim();
    }

    public Long getGoodsId() {
        return goodsId;
    }

    public void setGoodsId(Long goodsId) {
        this.goodsId = goodsId;
    }

    public String getSellerId() {
        return sellerId;
    }

    public void setSellerId(String sellerId) {
        this.sellerId = sellerId == null ? null : sellerId.trim();
    }

    public String getCartThumbnail() {
        return cartThumbnail;
    }

    public void setCartThumbnail(String cartThumbnail) {
        this.cartThumbnail = cartThumbnail == null ? null : cartThumbnail.trim();
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category == null ? null : category.trim();
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand == null ? null : brand.trim();
    }

    public String getSpec() {
        return spec;
    }

    public void setSpec(String spec) {
        this.spec = spec == null ? null : spec.trim();
    }

    public String getSeller() {
        return seller;
    }

    public void setSeller(String seller) {
        this.seller = seller == null ? null : seller.trim();
    }
}
创建测试类TestTemplate.java开始测试
package com.cehae.test;

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

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 com.cehae.pojo.Item;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext-solr.xml")
public class TestTemplate {

    @Autowired
    private SolrTemplate solrTemplate;

    /**
     * 添加数据
     */
    @Test
    public void testAdd() {

        // 创建商品
        Item item = new Item();
        // 设置域的数据
        item.setId(1L);// 注意是必填域
        item.setBrand("苹果");
        item.setCategory("手机");
        item.setGoodsId(1L);
        item.setSeller("苹果手机直营店");
        item.setTitle("苹果X");
        item.setPrice(new BigDecimal(8888));

        // 保存数据
        solrTemplate.saveBean(item);

        // 提交
        solrTemplate.commit();
    }

    /**
     * 根据主键查询
     */
    @Test
    public void testFindById() {

        Item item = solrTemplate.getById(1L, Item.class);

        System.out.println("item = " + item);
    }

    /**
     * 根据主键删除
     */
    @Test
    public void deleteById() {

        solrTemplate.deleteById("1");
        // 提交
        solrTemplate.commit();
    }

    /**
     * 根据主键批量删除
     */
    @Test
    public void deleteByIds() {

        List list = new ArrayList();

        for (int i = 0; i <= 100; i++) {

            list.add(i + "");
        }

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

    /**
     * 批量保存
     */
    @Test
    public void testAddList() {

        List list = new ArrayList();

        for (int i = 0; i < 100; i++) {
            Item item = new Item();
            item.setId(i + 1L);
            item.setBrand("苹果" + i);
            item.setCategory("手机");
            item.setGoodsId(1L);
            item.setSeller("苹果官方直营店");
            item.setTitle("苹果X" + i);
            item.setPrice(new BigDecimal(2000 + i));
            list.add(item);
        }

        solrTemplate.saveBeans(list);

        solrTemplate.commit();
    }

    /**
     * 分页查询
     */
    @Test
    public void testPageQuery() {

        // 查询表达式
        Query query = new SimpleQuery("*:*");
        // 设置开始索引
        query.setOffset(20);
        // 每页大小
        query.setRows(10);

        // 查询分页结果
        ScoredPage items = solrTemplate.queryForPage(query, Item.class);

        for (Item item : items) {
            System.out.println("item = " + item);
        }

        // ScoredPage扩展属性
        System.out.println("总记录数 = " + items.getTotalElements());
        System.out.println("总页数 = " + items.getTotalPages());
        System.out.println("每页大小  = " + items.getSize());
    }

    /**
     * 条件查询
     */
    @Test
    public void testPageQueryMulti() {
        // 查询表达式
        Query query = new SimpleQuery("*:*");

        // 添加条件:指定域和条件的值 contains:包含,is:匹配
        // Criteria criteria = new Criteria("item_category").is("手机");
        Criteria criteria = new Criteria("item_category").contains("手机");

        // 追加条件
        criteria = criteria.and("item_brand").contains("2");

        query.addCriteria(criteria);

        // 设置开始索引
        // query.setOffset(20);
        // 每页大小
        // query.setRows(10);

        // 查询分页结果
        ScoredPage items = solrTemplate.queryForPage(query, Item.class);

        for (Item item : items) {
            System.out.println("item = " + item);
        }

        // ScoredPage扩展属性
        System.out.println("总记录数 = " + items.getTotalElements());
        System.out.println("总页数 = " + items.getTotalPages());
        System.out.println("每页大小  = " + items.getSize());
    }

    /**
     * 删除所有
     */
    @Test
    public void testDeletAll() {

        // 设置删除条件
        Query query = new SimpleQuery("*:*");

        solrTemplate.delete(query);

        solrTemplate.commit();
    }
}

测试结果:

图片.png

源码下载

GitHub

你可能感兴趣的:(Linux环境安装solr以及SpringDataSolr的使用)