solr入门使用教程

一、solr介绍

     solr是基于Lucence搜索引擎的搜索服务器。lucene是一个搜索库,不是应用程序,solr对lucene进行了包装拓展,提供了比lucene更加丰富的查询语言,同时实现了可配置、可拓展并对查询语句进行优化,还提供了非常完善的功能界面。
Solr的特性包括:
1、高级的全文搜索功能
2、专为高通量的网络流量进行的优化
3、基于开放接口(XML和HTTP)的标准
4、综合的HTML管理界面
5、可伸缩性-能够有效地复制到另外一个Solr搜索服务器
6、使用XML配置达到灵活性和适配性
7、可扩展的插件体系
solr和lucene的区别:
lucene是一个搜索引擎工具jar包,不能独立运行。
而solr是一个全文检索服务器,可以对外提供检索和搜索功能。
这里写图片描述
通过这个图片我们可以看到,如果使用单独自己使用Lucene的话我们需要在web应用中添加对Lucene的一系列控制逻辑,然后还要单独有一个数据索引库。而我们使用solr的话,我们自己的web应用就和solr搜索服务器分开了,逻辑更加清晰,使用更加方便,而且solr还提供了solrcloud集群,便于分布式设计。

二、solr安装和配置

      solr的安装以及中文分词器的配置可以参看这篇博客:http://blog.csdn.net/xuda27/article/details/53013005,我这边有一个配置好的solr服务器可以直接使用:http://download.csdn.net/download/liuyuanq123/10213438
安装过程中两个重要概念:
solrhome:是solr服务运行的主目录,类似于数据库的总表。
solrcore:是单独对外提供搜索服务和索引服务的目录,里面包含了solr实例运行所需要的配置文件和数据文件。类似于数据库的各个单表。
solrhome目录里面可以包含多个solrcore 目录,各个solrcore之间没有关系。
这里写图片描述
这里写图片描述
solr 客户端界面使用:
这里写图片描述
上面图中可以看到客户端界面中有三个选项是重要的,第一个分析,第二个是添加或者更新域,第三个是查询信息。
这里写图片描述
在查询窗口中,q表示查询条件,fq表示过滤条件,sort是排序,start和rows是显示的起始位置,和每页显示的个数,df表示默认搜索域。
Schema.xml的配置:
1:field域的定义
field域就是指我们能向索引库中添加的参数的名称。需要自己定义,如果没有定义,那么就添加不了索引。格式如下:

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />  

name指域的名称,type指域的类型(类型中会配置分词器),indexed是否索引,stored是否存储,required是否必须有,multivalued是否多值。
2:dynamicField的定义
动态域的name可以是不确定的,其余和普通域一致。
3:uniqueKey的定义
唯一键表示一个 配置文件中有且只有一个
4:copyField的定义
格式如下:

<copyField source="cat" dest="text"/>

表示把一个域的内容复制到另一个域里面,目标域一般都是multimultivalue
5:FieldType的定义
格式如下:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <!-- in this example, we will only use synonyms at query time
        <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
        -->
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

name表示名称,class对应的solr的类型,analyzer指定分析器,type:query和index分别是查找和索引时用的分析器,tokenizer指定分词器,filter指定过滤器。一般我们会自己使用额外的中文分词器并定义自己需要用到的类型:
这里写图片描述
配置好了需要用到的类型后,便可以配置我们实际项目中所需要用到的业务域了。这里我们淘淘商城中配置了几个:
这里写图片描述
然后在我们的solr客户端页面中可以看到我们添加的域都存在了:这里写图片描述

三、solrj的使用

      首先将我们solr所需要的jar包添加的pom文件中,然后编写添加索引的测试代码,代码如下:

    @Test
    public void testSolrJ() throws Exception{
        //创建solrserver对象
        SolrServer server = new HttpSolrServer("http://192.168.156.22:8080/solr/collection1");
        //创建文本对象
        SolrInputDocument sInputDocument = new SolrInputDocument();
        //向文本对象中添加域
        sInputDocument.addField("id", "test0001");
        sInputDocument.addField("title", "测试标题");
        sInputDocument.addField("item_sell_point", "测试卖点");
        sInputDocument.addField("item_price", 500);
        sInputDocument.addField("item_category_name","测试" );
        sInputDocument.addField("item_desc", "测试描述");
        //将文本对象添加到索引库
        server.add(sInputDocument);
        //提交
        server.commit();
    }

添加过后再在我们的界面中进行查找:
这里写图片描述
可以看到添加成功。类似的我们可以使用solrj进行查询:

    @Test
    public void testQueryDoc() throws Exception{
        //创建solrserver对象
        SolrServer server = new HttpSolrServer("http://192.168.156.22:8080/solr/collection1");
        //创建查询对象
        SolrQuery solrQuery = new SolrQuery();
        //设置查询条件等
        solrQuery.setQuery("手机");
        //设置分页条件
        solrQuery.setStart(0);
        solrQuery.setRows(10);
        //设置默认搜索域
        solrQuery.set("df", "item_keywords");
        //执行查询
        QueryResponse response = server.query(solrQuery);
        //去查询结果
        SolrDocumentList solrDocumentList = response.getResults();
        //去查询结果的记录数
        System.out.println("查询的总结果数:"+solrDocumentList.getNumFound());
        //显示结果
        for (SolrDocument solrDocument : solrDocumentList) {
            System.out.println(solrDocument.getFieldValue("id"));
            System.out.println(solrDocument.get("item_title"));
            System.out.println(solrDocument.get("item_sell_point"));
            System.out.println(solrDocument.get("item_price"));
            System.out.println(solrDocument.get("item_image"));
            System.out.println(solrDocument.get("item_category_name"));
            System.out.println("===============================================");  
        }
    }

可以看到里面设置的那几个条件都是和solr客户端界面相对应的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值