初识Solr(一):Solr安装,搭建搜索引擎

一、solr介绍

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

solr.war包是一个java web程序,需要运行在tomcat中

二、安装步骤

1. 安装jdk + tomcat
2. 在/usr/local创建一个solr目录
3. 解压solr压缩包
4. 把solr-4.10.3/dist/solr-4.10.3.war包部署到tomcat下,并改名为solr.war

cp solr-4.10.3/dist/solr4.10.3.war/ usr/local/solr/tomcat/webapps/solr.war

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

cp * /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/

6. 创建solrhome。Solrhome是存放solr服务器所有配置文件的目录
在example文件夹内,把solr文件夹复制到/usr/local/solr/solrhome

[root@localhost example]# pwd
/home/ftp-userliu/solr-4.10.3/example
[root@localhost example]# cp -r solr /usr/local/solr/solrhome

7. 需要修改solr工程的web.xml文件。(实际配置的是JNDI),目的是告诉solr,solrhome的位置

cd /usr/local/solr/tomcat/webapps/solr/WEB-INF/
vim web.xml

这里写图片描述

8. 启动tomcat
地址栏输入:http://192.168.172.129:8080/solr/#/

这里写图片描述

三、配置业务字段

(1)中文分析器的配置

1. 使用IK-Analyzer。把分析器的文件夹上传到服务器
2. 把分析器的jar包添加到solr工程中

cp IKAnalyzer2012FF_u1.jar /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/

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

cp IKAnalyzer.cfg.xml ext_stopword.dic mydict.dic /usr/local/solr/tomcat/webapps/solr/WEB-INF/classes

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

4. 配置fieldType。需要在solrhome/collection1/conf/schema.xml中配置
在末尾加上:

<fieldType name="text_ik" class="solr.TextField">
  <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

这里写图片描述

这里一定要用TextField,因为它能分词。(分词:我真的不喜欢你 ——> 我,真的,不,喜欢,你)

(2)配置业务字段

业务字段判断标准:
1、在搜索时是否需要在此字段上进行搜索。例如:商品名称、商品的卖点、商品的描述
2、后续的业务是否需要用到此字段。例如:商品id

假设现在需要如下字段:
1、商品id
2、商品title
3、卖点
4、价格
5、商品图片
6、商品分类名称
7、商品描述

则需要在schema.xml配置:

<field name="item_title" type="text_ik" indexed="true" stored="true"/>
<field name="item_sell_point" type="text_ik" indexed="true" stored="true"/>
<field name="item_price"  type="long" indexed="true" stored="true"/>
<field name="item_image" type="string" indexed="false" stored="true" />
<field name="item_category_name" type="string" indexed="true" stored="true" />
<field name="item_desc" type="text_ik" indexed="true" stored="false" />(商品描述用作搜索,不需要表现给用户,因此stored=”false”)

<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>(复制域,好处,将我们需要搜索的字段放在一个域中,有利于提高效率)
<copyField source="item_title" dest="item_keywords"/>
<copyField source="item_sell_point" dest="item_keywords"/>
<copyField source="item_category_name" dest="item_keywords"/>
<copyField source="item_desc" dest="item_keywords"/>

这里写图片描述

重新启动tomcat之后,发现solr中已经有了配置的业务字段
这里写图片描述

四、维护索引库

1. 添加数据

这里写图片描述

查询数据

这里写图片描述

2. 更新数据

在solr中没有update,只需要添加一个新的文档,要求文档id和被修改文档的id一致。原理是先删除后添加。

3. 删除数据

这里写图片描述

这里写图片描述

五、Java整合Solr

使用maven依赖solrJ包

<!-- solr客户端 -->
    <dependency>
        <groupId>org.apache.solr</groupId>
        <artifactId>solr-solrj</artifactId>
    </dependency>

增加和删除:

public class SolrJTest {

    @Test
    public void addDocument() throws Exception {
        //创建一连接
        SolrServer solrServer = new HttpSolrServer("http://192.168.172.129:8080/solr");
        //创建一个文档对象
        SolrInputDocument document = new SolrInputDocument();
        document.addField("id", "test001");
        document.addField("item_title", "测试商品2");
        document.addField("item_price", 54321);
        //把文档对象写入索引库
        solrServer.add(document);
        //提交
        solrServer.commit();
    }

    @Test
    public void deleteDocument() throws Exception {
        //创建一连接
        SolrServer solrServer = new HttpSolrServer("http://192.168.172.129:8080/solr");
        //两种删除方式
        solrServer.deleteById("test001");
        //solrServer.deleteByQuery("*:*");
        solrServer.commit();
    }
}

查询:

@Test
    public void queryDocument() throws Exception {
        SolrServer solrServer = new HttpSolrServer("http://192.168.25.154:8080/solr");
        //创建一个查询对象
        SolrQuery query = new SolrQuery();
        //设置查询条件
        query.setQuery("*:*");
        query.setStart(20);
        query.setRows(50);
        //执行查询
        QueryResponse response = solrServer.query(query);
        //取查询结果
        SolrDocumentList solrDocumentList = response.getResults();
        System.out.println("共查询到记录:" + solrDocumentList.getNumFound());
        for (SolrDocument solrDocument : solrDocumentList) {
            System.out.println(solrDocument.get("id"));
            System.out.println(solrDocument.get("item_title"));
            System.out.println(solrDocument.get("item_price"));
            System.out.println(solrDocument.get("item_image"));

        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值