在Solr中默认是没有中文分析器的,需要手工配置,配置一个FieldType,在FieldType中指定中文分析器。另外,Solr中的字段必须先定义,后使用。
下面分步骤进行操作
第一步:将IK-Analyzer的压缩包上传到solr服务器上。如下所示。
[root@itcast07 ~]# cd /usr/local/software/
[root@itcast07 software]# ll
total 176784
drwxr-xr-x 9 root root 4096 Aug 6 18:41 apache-tomcat-7.0.47
-rw-r--r-- 1 root root 8234674 Jul 2 23:57 apache-tomcat-7.0.47.tar.gz
-rw-r--r-- 1 root root 17510 Jul 2 23:57 fastdfs-nginx-module_v1.16.tar.gz
-rw-r--r-- 1 root root 345400 Jul 2 23:57 FastDFS_v5.05.tar.gz
-rw-r--r-- 1 root root 2159463 Aug 6 19:26 IKAnalyzer2012FF_hf1.zip
-rw-r--r-- 1 root root 102378 Jul 2 23:57 libfastcommon-master.zip
-rw-r--r-- 1 root root 804164 Jul 2 23:57 nginx-1.6.2.tar.gz
-rw-r--r-- 1 root root 804164 Sep 16 2014 nginx-1.6.2.tar.gz.1
-rw-r--r-- 1 root root 12248 Jul 2 23:57 ngx_cache_purge-2.3.tar.gz
-rw-r--r-- 1 root root 1738465 Jul 31 02:10 redis-4.0.10.tar.gz
-rw-r--r-- 1 root root 91648 Sep 28 2017 redis-4.0.1.gem
-rw-r--r-- 1 root root 16678101 Aug 1 01:21 ruby-2.2.7.tar.gz
-rw-r--r-- 1 root root 150010621 Aug 6 02:47 solr-4.10.3.tgz
[root@itcast07 software]#
第二步:安装zip和unzip命令(因为最小化安装的CentOS6没有unzip命令)
[root@itcast07 software]# yum install zip unzip
第三步:解压,如下所示
[root@solr-server software]# unzip IKAnalyzer2012FF_hf1.zip
[root@itcast07 software]# unzip IKAnalyzer2012FF_hf1.zip
[root@itcast07 software]# ll
total 176788
drwxr-xr-x 9 root root 4096 Aug 6 18:41 apache-tomcat-7.0.47
-rw-r--r-- 1 root root 8234674 Jul 2 23:57 apache-tomcat-7.0.47.tar.gz
-rw-r--r-- 1 root root 17510 Jul 2 23:57 fastdfs-nginx-module_v1.16.tar.gz
-rw-r--r-- 1 root root 345400 Jul 2 23:57 FastDFS_v5.05.tar.gz
drwxr-xr-x 3 root root 4096 Oct 2 2015 IKAnalyzer2012FF_hf1
-rw-r--r-- 1 root root 2159463 Aug 6 19:26 IKAnalyzer2012FF_hf1.zip
-rw-r--r-- 1 root root 102378 Jul 2 23:57 libfastcommon-master.zip
-rw-r--r-- 1 root root 804164 Jul 2 23:57 nginx-1.6.2.tar.gz
-rw-r--r-- 1 root root 804164 Sep 16 2014 nginx-1.6.2.tar.gz.1
-rw-r--r-- 1 root root 12248 Jul 2 23:57 ngx_cache_purge-2.3.tar.gz
-rw-r--r-- 1 root root 1738465 Jul 31 02:10 redis-4.0.10.tar.gz
-rw-r--r-- 1 root root 91648 Sep 28 2017 redis-4.0.1.gem
-rw-r--r-- 1 root root 16678101 Aug 1 01:21 ruby-2.2.7.tar.gz
-rw-r--r-- 1 root root 150010621 Aug 6 02:47 solr-4.10.3.tgz
You have new mail in /var/spool/mail/root
[root@itcast07 software]#
解压完后,我们到IKAnalyzer2012FF_hf1目录下查看都有哪些文件,如下所示。其中doc当然是文档了;ext_stopword.dic是停用词词典(在信息检索中,为节省存储空间和提高搜索效率,在处理自然语言数据(或文本)之前或之后会自动过滤掉某些字或词,这些字或词即被称为Stop Words(停用词)。这些停用词都是人工输入、非自动化生成的,生成后的停用词会形成一个停用词表。但是,并没有一个明确的停用词表能够适用于所有的工具。甚至有一些工具是明确地避免使用停用词来支持短语搜索的。)IKAnalyzer.cfg.xml是配置文件,mydict.dic是扩展词典。IKAnalyzer2012FF_u1.jar是核心包。
[root@itcast07 IKAnalyzer2012FF_hf1]# ll
total 2004
drwxr-xr-x 5 root root 4096 Oct 2 2015 doc
-rw-r--r-- 1 root root 168 Sep 11 2015 ext_stopword.dic
-rw-r--r-- 1 root root 1165908 Sep 11 2015 IKAnalyzer2012FF_u1.jar
-rw-r--r-- 1 root root 419 Sep 11 2015 IKAnalyzer.cfg.xml
-rw-r--r-- 1 root root 841268 Sep 11 2015 IKAnalyzer中文分词器V2012_FF使用手册.pdf
-rw-r--r-- 1 root root 17778 Sep 11 2015 LICENSE.txt
-rw-r--r-- 1 root root 12 Sep 11 2015 mydict.dic
-rw-r--r-- 1 root root 278 Sep 11 2015 NOTICE.txt
[root@itcast07 IKAnalyzer2012FF_hf1]#
第四步:把分析器的jar包添加到solr工程中
[root@itcast07 IKAnalyzer2012FF_hf1]# cp IKAnalyzer2012FF_u1.jar /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/
[root@itcast07 IKAnalyzer2012FF_hf1]#
第五步:把IKAnalyzer需要的扩展词典及停用词词典、配置文件复制到solr工程的classpath。
我们需要先在/usr/local/solr/tomcat/webapps/solr/WEB-INF/目录下创建classes目录,如下所示。
[root@itcast07 IKAnalyzer2012FF_hf1]# mkdir /usr/local/solr/tomcat/webapps/solr/WEB-INF/classes
[root@itcast07 IKAnalyzer2012FF_hf1]#
下面就是copy操作,如下所示。
[root@itcast07 IKAnalyzer2012FF_hf1]# cp IKAnalyzer.cfg.xml ext_stopword.dic mydict.dic /usr/local/solr/tomcat/webapps/solr/WEB-INF/classes
[root@itcast07 IKAnalyzer2012FF_hf1]#
注意:扩展词典及停用词词典的字符集必须是utf-8。不能使用windows记事本编辑。
第六步:配置fieldType。
需要在solrhome/collection1/conf/schema.xml中配置,我们先到schema.xml所在的目录,如下所示。
[root@itcast07 IKAnalyzer2012FF_hf1]# cd /usr/local/solr/solrhome/collection1/conf
[root@itcast07 conf]# ll
total 292
-rw-r--r-- 1 root root 1068 Aug 6 19:00 admin-extra.html
-rw-r--r-- 1 root root 928 Aug 6 19:00 admin-extra.menu-bottom.html
-rw-r--r-- 1 root root 926 Aug 6 19:00 admin-extra.menu-top.html
drwxr-xr-x 3 root root 4096 Aug 6 19:00 clustering
-rw-r--r-- 1 root root 3974 Aug 6 19:00 currency.xml
-rw-r--r-- 1 root root 1348 Aug 6 19:00 elevate.xml
drwxr-xr-x 2 root root 4096 Aug 6 19:00 lang
-rw-r--r-- 1 root root 78514 Aug 6 19:00 mapping-FoldToASCII.txt
-rw-r--r-- 1 root root 2868 Aug 6 19:00 mapping-ISOLatin1Accent.txt
-rw-r--r-- 1 root root 873 Aug 6 19:00 protwords.txt
-rw-r--r-- 1 root root 33 Aug 6 19:00 _rest_managed.json
-rw-r--r-- 1 root root 450 Aug 6 19:00 _schema_analysis_stopwords_english.json
-rw-r--r-- 1 root root 172 Aug 6 19:00 _schema_analysis_synonyms_english.json
-rw-r--r-- 1 root root 60689 Aug 6 19:00 schema.xml
-rw-r--r-- 1 root root 921 Aug 6 19:00 scripts.conf
-rw-r--r-- 1 root root 74827 Aug 6 19:00 solrconfig.xml
-rw-r--r-- 1 root root 13 Aug 6 19:00 spellings.txt
-rw-r--r-- 1 root root 781 Aug 6 19:00 stopwords.txt
-rw-r--r-- 1 root root 1119 Aug 6 19:00 synonyms.txt
-rw-r--r-- 1 root root 1416 Aug 6 19:00 update-script.js
drwxr-xr-x 2 root root 4096 Aug 6 19:00 velocity
drwxr-xr-x 2 root root 4096 Aug 6 19:00 xslt
[root@itcast07 conf]#
编辑schema.xml,使用Shift+G就可以直接到文件的末尾,然后添加如下内容
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
第七步:业务字段配置
在淘淘商城的商品搜索功能当中,我们可能用到的字段如下,由于数据库中id字段和solr中的id同名,我们便使用solr的id代替商品id。也就是说,我们需要配置6个业务字段。
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" />
第八步:配置复制域
在schema.xml的末尾添加复制域,如下所示,复制域的好处是可以提高查询效率,原来需要查询多个字段的,现在只需要查询一个字段就可以了(因为各个字段都把内容复制到一块儿了,查询也就方便了)
<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
关闭tomcat的命令如下。
[root@solr-server tomcat]# bin/shutdown.sh
启动
[root@solr-server tomcat]# bin/startup.sh
重启之后,我们看看字段是否有我们刚才定义的几个,发现是有的,如下图所示。
下面我们来测试中文分词器是否可用,我们选择item_desc字段,我们在Field Value当中添加一段中文,然后点击"Analyse Values"按钮,就可以开始分析了,分析结果如下。可以看到,我们的中文分析器配置成功了。