Solr 5.x的筹建(Solr自带的Jetty Server)与mmseg4j中文分词

Solr 5.x的搭建(Solr自带的Jetty Server)与mmseg4j中文分词

前言:

 

     如果你对Solr怎么和Tomcat 集成以及如何使用mmseg4j和自定义的词库丰富完善中文分词,可以参照我的其它与Solr相关的博客。这篇将以简练的方式给出如何搭建Solr5.x的服务(以截止目前为止最新的Solr5.3为例),而且将使用Solr自带的Jetty Server,而不是集成tomcat。

 

一、准备条件

Solr5.x必须建立在JDK1.7的版本以上,先检查并确定安装正确的JDK。

 

$ java -version
java version "1.7.0_55"
Java(TM) SE Runtime Environment (build 1.7.0_55-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.55-b03, mixed mode)

 

 

二、下载Solr

http://lucene.apache.org/solr/ , 选择download,并选择下载solr 最新的5.3.1版本。



 

如果是非windows版本的操作系统,如linux,OS,unix等选择下载slor-5.3.1.tgz,如果需要查看相关源码,可以选择solr-5.3.1-src.tgz并导入自己的eclipse等IDE开发工具中。本例中以linux系统为例说明。

 

 

三、安装solr5.x

1、解压tgz包

 

tar zxf solr-5.3.1.tgz

 

 2. 为操作方便将Solr5.3.1重命名为Solr5: 

 

   

mv solr5.3.1 solr5

 

 

四、可以开始运行Solr了(就是如此简单)

  1、启动Server

由于是在linux中,所以可以直接使用

$ bin/solr start

 

如果在windows中,使用命令

binsolr.cmd start

 

这两个命令都是在后台启动solr,由于使用了自带的Jetty Server,所以启动后的默认端口就是8983.

 

输入http://192.168.1.157:8983/solr, 即可看到Solr服务已经成功的启动了。



 

从图中,你也可以看到,Sorl5.3默认使用的Jetty的版本是9.2.11.v20150529,截止目前来说,是很新的版本了。

 

如果想提升jetty的性能,可以在如下的文件夹中进行jetty的配置修改:

/root/solr5/server/etc

 

2、使用help命令查看更多的Solr选项

bin/solr -help

 如

bin/solr start -help

 

3、更多的Solr命令

bin/solr start -f : 以前置的方式启动Solr

 

bin/solr start / restart : 重启当前Solr服务

 

bin/solr start -p 8984 : 在指定的端口启动Solr

 

bin/solr stop -p 8983或者Ctrl +C:如果是以前置的方式启动Solr,则可以用Ctrl+c停止Solr服务,否则可以使用stop命令停止Solr服务。

 

bin/solr status: 检查Solr是否在运行

 

bin/solr create -c <name> : 创建一个core

 

$ bin/solr create -help: 创建相关的帮助命令

 

五、整合mmseg4j进行中文分词

1、关于mmseg4j的介绍,可以参照我的别的关于Solr中文分词的博客。

 

2、mmseg4j支持Solr5需要使用附件的mmseg4j-solr-2.3.0.jar以及mmseg4j-core-1.10.jar,将这两个jar包放在类似于这样的目录下:

/root/solr5/server/solr-webapp/webapp/WEB-INF/lib

 

3. 创建一个core: universal

solr create -c universal

 

当在控制台上出现如下log时,表示创建过程没有什么问题:

Creating new core 'universal' using command:

http://localhost:8983/solr/admin/cores?action=CREATE&name=universal&instanceDir=universal

 

{

  "responseHeader":{

    "status":0,

    "QTime":2357},

 

  "core":"universal"}

 

在Solr Admin中可以看到新创建的univeral的信息:



 4、开始集成mmseg4j:

       进入该目录:/root/solr5/server/solr/universal/conf,修改其中managed-schema(在5.0前,该文件是shcema.xml,当然可以将该文件重命名为schema.xml,但不建议这么做),加入下面的内容并重启Solr,即可在Solr Admin 的console中看到新增的这些field了。

 

  需要注意的是,将dicPath的值修改为相应的值。

<!-- mmseg4j-->
     <field name="mmseg4j_complex_name" type="text_mmseg4j_complex" indexed="true" stored="true"/>
     <field name="mmseg4j_maxword_name" type="text_mmseg4j_maxword" indexed="true" stored="true"/>
     <field name="mmseg4j_simple_name" type="text_mmseg4j_simple" indexed="true" stored="true"/>

     <fieldType name="text_mmseg4j_complex" class="solr.TextField" positionIncrementGap="100" >
        <analyzer>
           <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="/root/solr5/server/solr/universal/conf"/>
           <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
         </analyzer>
     </fieldType>
     <fieldType name="text_mmseg4j_maxword" class="solr.TextField" positionIncrementGap="100" >
          <analyzer>
            <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" dicPath="/root/solr5/server/solr/universal/conf"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
          </analyzer>
      </fieldType>
      <fieldType name="text_mmseg4j_simple" class="solr.TextField" positionIncrementGap="100" >
          <analyzer>
            <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="/root/solr5/server/solr/universal/conf"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
          </analyzer>
      </fieldType>
<!-- mmseg4j-->

 

重启Solr 后,即可在新创建的univeral这个core的Analysis中看到mmseg4j新增的field



 

 

5、 修改stopwords:如将助词的、地、得等加到stopwords.txt中。

如在将“的”加入stopwords.txt之前,“我们的中国”的分词结果为:



 在/root/solr5/server/solr/universal/conf目录下中的stopwords.txt中加入“的”字和“我们”后,重新执行上面的分词,可以看到:



 
 可以看出“我们”和“的”已经作为停止词,不在出现在分词结果中。

 

6、修改词库,增加更多的中文分词,mmseg4j默认是使用mmseg4j-core-1.10.0.jar中的words.dic,总共只有不到15万的中文词,而整理一个中文词库,位于上面dic指定的目录下/root/solr5/server/solr/universal/conf,总共有71万的词库,包括搜狗词库,庖丁词库,以及一些名人词库,如果需要增加更多的中文词,只需要在其中增加即可。如果需要该词库,可以给我留言,我会发出来,总共有将近8m,作为附件太大。

     在使用该词库前,如果对“林书豪来中国了”进行分词,得到的结果是:



 你会看到,分词并不准确,将林书豪作为3个字拆成了“林”,“书”,“豪”,而不是作为一个整体“林书豪”。

 

使用我自己整理的中文分词后,即本例中将word.dic拷贝到目录:

/root/solr5/server/solr/universal/conf 并重启solr重新进行分词分析后结果为:



 

 

这样Solr5.x和mmseg4j的集成就基本完成了,如果有什么分词不对的,可以借助Solr Admin并修改words.dic解决问题。

 

 

 

 

 

 

 

 

 

 

        

相关内容推荐