累觉不爱啊!昨日本文已将近完工,看到文本编辑器提示自动保存了草稿也就没做保存操作。可惜悲剧还是来了,所有的内容都没有了!今日只得从头来过了。

    好吧,废话不多说,继续solr的学习。笔者上篇文章《solr(一)---介绍与安装》介绍了solr的安装。安装好之后是不是不知道怎么操作呢?另外是不是不理解solr、solr主目录以及调用程序之间的关系?本文将进行详细的介绍。

    一、solr关系介绍

    现在大家都知道了,solr是一个搜索工具,实现了lucene。solr安装好了,admin页面也可以访问了。但是solr怎么使用呢?solr主目录是个什么东东?和solr程序有什么关系?我们怎么关联solr和使用solr呢?

    现在笔者根据自己的理解,举如下例子来帮助理解(当然,如果笔者理解有误,欢迎批评指正):

    现在,我们有一个web项目,名为BS(Book search)。用于公司内部的共享书籍的管理和搜索。公司员工对所有的书籍进行了编号,员工通过查询书籍名称就能书籍当前是否借出、存放位置等信息。

    那为了对书籍进行搜索,我们需要一个搜索系统(SS)。该系统独立于BS,专门用于搜索。SS需要录入书籍的信息、建立索引、支持搜索。该SS就是一个solr系统。

    那solr的主目录呢?因为对于一个solr系统,它可能有多个数据源,每个数据源搜索的内容不同、来源不同、结构不同...所以就有多个core。每个core就是solr的一个心脏,solr可以通过切换core去实现不同的搜索方式、要求。

    可能读者还是不太理解,那后面在讲解到solr的使用的时候,笔者会结合具体的配置来进行说明。

    二、solr基本结构

    上一篇讲到,E:\solr-tomcat\solr为笔者的主目录,内容来自于F:\solr\solr-4.7.2\example\solr。于是,我们从示例中copy了一个比较完整的core。这个core的名字叫collection1,包含solr.xml和zoo.cfg文件。

    solr.xml是对整个solr的所有core的配置文件;而zoo.cfg配置了一些初始化参数。

    solr(二)---基本使用

    collection1目录下有一个conf目录,里面包含了该core的所有配置信息。其中最重要的两个配置文件是:schema.xml和solrconfig.xml。

    solrconfig.xml是该core所配备的功能的配置。用来配置Solr的一些系统属性,例如与索引和查询处理有关的一些常见的配置选项,以及缓存、扩展等等;而schema.xml主要包括types、fields和其他的一些缺省设置。

    关于schema.xml的配置,网上有很多文章介绍。在这里就不赘述了。

    三、solr操作

    首先!!我们需要在schema.xml中配置你即将解析的document的字段信息。例如,如果把XML作为document的话,需要对该XML中所有fieldType和field进行配置。

    再对schema.xml和solrconfig.xml配置完成后(对于example中的collection1这个core,已经对exampledocs实例数据源的字段进行了配置,所以如果没有特殊要求的话,其实不需要配置),打开admin页面。在“Core Selector”的下拉框中,我们可以看到有“collection1”这个core。选择这个core。

    solr(二)---基本使用

    1、“Analysis”是分词模块。其显示了所有在schema.xml配置的Field和FieldType。根据选择的Field或FieldType的不同,可以对索引(Index)和查询(Querty)实现不同的分词功能。

    笔者添加了IKAnalyzer这个中文分词器。配置了“text_ik”这个FieldType以及相关联的“contents”这个Field。(后面笔者将介绍该分词器的安装)

    solr(二)---基本使用

    2、“dataimport”模块用于导入数据源。其支持全量和增量两种方式。本文将暂时不介绍本部分的时候,后面讲有专门的文章介绍。

    3、“documents”模块用于导入文章作为数据源。所支持的文档类型多样,主要为JSON、XML、文件还有文档自建。笔者以XMl和文件两种方式来展示该模块。

    a)、文件。选择文档类型为“File Upload”,从F:\solr\solr-4.7.2\example\exampledocs目录下选择vidcard.xml文件上传。

    solr(二)---基本使用

    提交之后,solr就会对该xml文件进行解析、建立索引了。工作完成后,我们就有了搜索的内容。

    b)、XML。把页面上选择文档类型为XML,把vidcard.xml文件的内容复制到文档框内。

    solr(二)---基本使用

    提交之后,solr就会分析该xml内容、建立索引了。工作完成后,我们就有了搜索的内容。

    4、“Query”模块用于对已建索引、处理完的数据源来进行查询。

    例如,在上一步上传的vidcard.xml中有name这个field,它的值是“ASUS Extreme N7800GTX/2DHTV (256 MB)”:

<field name="name">ASUS Extreme N7800GTX/2DHTV (256 MB)</field>

    因为“documents”模块已对该xml进行了处理和建索引,所以我们可以直接搜索该字段的结果。

    solr(二)---基本使用

    从图中可以看出,我们搜索出了"name"字段中包含“Extreme”的记录。

    其实从我们修改url也能实现查询功能:

    solr(二)---基本使用

     四、添加中文分词器

    中文分词在solr里面是没有默认开启的,需要我们自己配置一个中文分词器。目前可用的分词器有smartcn,IK,Jeasy,庖丁。

    下面给出两种分词器的安装方法,任选其一即可,推荐第一种,因为smartcn就在solr发行包的contrib/analysis-extras/lucene-libs/下,就是lucene-analyzers-smartcn-4.2.0.jar,首选在solrconfig.xml中加一句引用analysis-extras的配置,这样我们自己加入的分词器才会引到的solr中.

    <lib dir="F:\solr\solr-4.7.2\contrib\analysis-extras\lib" regex=".*\.jar" />

    4.1、smartcn 分词器的安装

    首选将发行包的contrib/analysis-extras/lucene-libs/ lucene-analyzers-smartcn-4.2.0.jar复制到\solr\contrib\analysis-extras\lib下,在solr本地应用文件夹下,打开/solr/conf/scheme.xml,编辑text字段类型如下,添加以下代码到scheme.xml中的相应位置,就是找到fieldType定义的那一段,在下面多添加这一段就好啦.

<fieldType name="text_smartcn" class="solr.TextField" positionIncrementGap="0">
      <analyzer type="index">
        <tokenizer class="org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory"/>
        <filter class="org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory"/>
      </analyzer>
      <analyzer type="query">
         <tokenizer class="org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory"/>
        <filter class="org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory"/>
      </analyzer>
</fieldType>
 <field name ="text" type ="text_smartcn" indexed ="true" stored ="false" multiValued ="true"/>

    4.2、IK 分词器的安装

    首选要去下载IKAnalyzer的发行包.下载地址: http://ik-analyzer.googlecode.com/files/IK%20Analyzer%202012FF_hf1.zip.

    下载后解压出来文件中的三个复制到F:\solr\solr-4.7.2\contrib\analysis-extras\lib目录中.

    IKAnalyzer2012FF_u1.jar       分词器jar包

    IKAnalyzer.cfg.xml                 分词器配置文件

    Stopword.dic                           分词器停词字典,可自定义添加内容

    复制后就可以像smartcn一样的进行配置scheme.xml了.

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

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

</fieldType>

<field name ="text" type ="text_ik" indexed ="true" stored ="false" multiValued ="true"/>