solr的搭建

  Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。

  Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引 。Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。

一.下载

   从Solr官方网站(http://lucene.apache.org/solr/ )

Solr使用指南可参考:https://wiki.apache.org/solr/FrontPage。

二.安装步骤(linux下)

1、安装linux、jdk、tomcat。(这个就不说了吧.嘻嘻!)

2、先在local文件夹下创建一个solr文件夹

[root@iZ82qp7lai5ytzZ ~]# mkdir /usr/local/solr

3.进入solr文件夹,把solr的压缩包上传到这里。并解压。

[root@iZ82qp7lai5ytzZ ~]# cd /usr/local/solr/


4、 把solr-4.10.3/dist/solr-4.10.3.war包部署到tomcat下。并改名为solr.war

[root@iZ82qp7lai5ytzZ ~]# cp solr-4.10.3.war /usr/local/tomcat/webapps/solr.war(此处路径根据自己tomcat的位置)

5、解压war包。启动tomcat自动解压。关闭tomcat。删除solr.war.(不关闭tomcat删除war会连解压后的文件夹一起删...)

6、把solr-4.10.3/example/lib/ext 目录下所有的jar包复制到solr工程中。

[root@iZ82qp7lai5ytzZ ~]# cp * /usr/local/tomcat/webapps/solr/WEB-INF/lib/

7、创建solrhomeSolrhome是存放solr服务器所有配置文件的目录。

[root@iZ82qp7lai5ytzZ ~]# mkdir /usr/local/solr/solrhome


将example文件夹中的solr复制到solrhome中

[root@iZ82qp7lai5ytzZ example]# cp -r solr /usr/local/solr/solrhome

8、告诉solr服务器solrhome的位置。需要修改刚刚部署到tomcat下solr工程的web.xml文件。


将路径填进去(注意注释去掉)

9、启动tomcat







10、配置业务字段

solr中默认是英文分析器,需要手工配置。配置一个FieldType(下文中有),在FieldType中指定中文分析器。

Solr中的字段必须是先定义后使用。

11、中文分析器的配置

第一步:使用IK-Analyzer。把分析器的文件夹上传到服务器。


第二步:需要把分析器的jar包添加到solr工程中


[root@iZ82qp7lai5ytzZ IK Analyzer 2012FF_hf1]# cp IKAnalyzer2012FF_u1.jar /usr/local/tomcat/webapps/solr/WEB-INF/lib/

第三步:需要把IKAnalyzer需要的扩展词典及停用词词典、配置文件复制到solr工程的classpath

先在solr工程的WEB-INF下创建classes文件夹


然后将这三个东西复制到classes下


root@bogon IK Analyzer 2012FF_hf1]# cp IKAnalyzer.cfg.xml ext_stopword.dic mydict.dic /usr/local/solr/tomcat/webapps/solr/WEB-INF/classes

注意:扩展词典及停用词词典的字符集必须是utf-8不能使用windows记事本编辑。

第四步:配置fieldType(就是上文提到的)。需要在solrhome/collection1/conf/schema.xml中配置。

技巧:使用vivim跳转到文档开头gg。跳转到文档末尾:G

<fieldType name="text_ik" class="solr.TextField">

  <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>

</fieldType>



12、业务字段配置

业务字段判断标准:

(1)在搜索时是否需要在此字段上进行搜索。例如:商品名称、商品的卖点、商品的描述

(2)后续的业务是否需要用到此字段。例如:商品id


field name="item_title" type="text_ik" indexed="true" stored="true"/>
<field name="item_title_img" type="text_ik" indexed="true" stored="true"/>
<field name="item_lowest_price"  type="long" indexed="true" stored="true"/>
<field name="item_need_number" type="int" indexed="false" stored="true" />
<field name="item_spu_sales" type="long" indexed="true" stored="true" />

<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="item_title" dest="item_keywords"/>


重新启动tomcat




此处为导入的字段(注意字段不能和里面原有的重复如id,title等)

12、用java操作

<!-- solr-solrj -->
<dependency>
    <groupId>org.apache.solr</groupId>
    <artifactId>solr-solrj</artifactId>
    <version>4.10.3</version>
</dependency>

package com.mj.service.slor;

import com.mj.mapper.product.ProductMapper;
import com.mj.pojo.product.Product;
import com.mj.result.util.TTResult;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.common.SolrInputDocument;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.List;

/**
 * @author Mr.Wen
 * @description
 * @date 2018/1/18
 */
@Service
public class SolrSearchServiceImpl implements SolrSearchService {

    @Autowired
    private SolrServer solrServer;

    @Autowired
    private ProductMapper productMapper;

    /**
     * 将要查询的商品字段存入solr
     *
     * @return
     */
    @Override
    public Object insertSearchProduct() {

        //查询商品列表
        List<Product> productList = productMapper.selectSearchProduct();
        //把商品写入索引库
        for (Product product : productList) {
            //创建一个SolrInputDocument对象
            SolrInputDocument document = new SolrInputDocument();
            document.setField("id", product.getId());
            document.setField("item_title", product.getTitle());
            document.setField("item_title_img", product.getTitleImg());
            document.setField("item_lowest_price", product.getLowestPrice());
            document.setField("item_need_number", product.getNeedNumber());
            document.setField("item_spu_sales", product.getSpuSales());
            //写入索引ku
            try {
                solrServer.add(document);
                //提交修改
                solrServer.commit();
            } catch (SolrServerException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
        return TTResult.ok();
    }
}


写个方法测试一下添加(注意一定要提交)


能查询到说明成功




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值