在tomcat中部署solr
solr默认自带了jetty服务器,但我们习惯了tomcat,我们通过以下步骤将solr部署到tomcat:
1、将solr-4.9.0.zip解压到指定目录中,如E:\solr-4.9.0
2、将E:\solr-4.9.0\example\webapps下的solr.war拷贝到E:\tomcat7\webapps目录下
3、新建文件夹E:\sorlhome,将E:\solr-4.9.0\example\solr这个目录拷贝至E:\sorlhome中
4、cmd进入E:\tomcat7\bin路径下,执行startup.bat命令启动tomcat,此时tomcat会把solr.war进行解压,在当前目录下生成一个solr文件夹;停止tomcat,删除solr.war。
5、配置tomcat中的项目找到sorlhome,用编辑器打开E:\tomcat7\webapps\solr\WEB-INF下面的web.xml文件,找到下面的代码:
<!--
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/put/your/solr/home/here</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
-->
取消注释,修改成:
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>E:/sorlhome/solr</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
其中,
<env-entry-value>E:/sorlhome/solr</env-entry-value>的值是solr home的地址,在第三步中我们放置到E:/sorlhome/solr
6、启动tomcat,访问:http://localhost:8080/solr
如果出现这个界面,则说明solr部署成功。
整合中文分词组件IK Analyzer
IK Analyzer是一款结合了词典和文法分析算法的中文分词组件,基于字符串匹配,支持用户词典扩展定义,支持细粒度和智能切分,比如:
张三说的确实在理
智能分词的结果是:
张三 | 说的 | 确实 | 在理
最细粒度分词结果:
张三 | 三 | 说的 | 的确 | 的 | 确实 | 实在 | 在理
下载并解压缩IKAnalyzer2012FF_u1.jar放到目录:E:\tomcat7\webapps\solr\WEB-INF\lib,修改配置文件E:\sorlhome\solr\collection1\conf\schema.xml,添加代码:
<field name="content" type="text_ik" indexed="true" stored="true"/>
<fieldType name="<span style="color:#ff0000;">text_ik</span>" class="solr.TextField">
<analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
<analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
查询采用IK自己的最大分词法,索引则采用它的细粒度分词法,
此时就算配置完成了,重启服务:java -jar start.jar,来看看IKAnalyzer的分词效果怎么样,打开Solr管理界面,点击左侧的Analysis页面,
默认分词器进行最细粒度切分。IKAnalyzer支持通过配置IKAnalyzer.cfg.xml 文件来扩充您的与有词典以及停止词典(过滤词典),只需把IKAnalyzer.cfg.xml文件放入E:\tomcat7\webapps\solr\WEB-INF\classes目录下面(没有class目录时自己创建一个即可),指定自己的词典mydic.dic,PS:(这一步骤我没做)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">/mydict.dic;
/com/mycompany/dic/mydict2.dic;</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">/ext_stopword.dic</entry>
</properties>
事实上前面的FieldType配置其实存在问题,根据目前最新的IK版本IK Analyzer 2012FF_hf1.zip的IKAnalyzer类中没有读取配置中的useSmart属性,所以在建立索引和查询索引中都使用的是细粒度分词索引时使用最细粒度分词,而查询时最大分词(智能分词)这一功能实际上是不生效的。解决办法:方法是创建了两个类IKAnalyzerWithSmart(默认智能分词)和IKAnalyzerWithoutSmart(默认细粒度分词),再重新导出jar包,具体的jar包编译过程见:http://www.qikor.com/2014/08/10/apache-solr-4-9-and-ikanalyzer-down/
将jar包放到E:\tomcat7\webapps\solr\WEB-INF\lib目录下,并修改schema.xml文件内容如下,
这样就能够在创建索引时使用智能分词,在查询索引时使用细粒度分词。
<!-- 在索引处使用细粒度分词,做最细分词,尽量让查询时能匹配。查询处使用智能分词,做最大分词,尽量查找用户所需。-->
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index" class="org.wltea.analyzer.lucene.IKAnalyzerWithoutSmart" />
<analyzer type="query" class="org.wltea.analyzer.lucene.IKAnalyzerWithSmart" />
</fieldType>
<field name="ik" type="text_ik" indexed="true" stored="true" multiValued="false" />
点击下载已编译好的IKAnalyzer2012FF_u1_custom.jar(提取码:af3b),记得改名字为IKAnalyzer2012FF_u1.jar。
重新启动服务,访问http://localhost:8080/solr/#/collection1/analysis
测试:
在Field Value(Index)和Field Value(Query)中输入:张三说的的确实在,
在Analyse Fieldname / FieldType里选择刚才设置的字段名称或是分词器类型,我这里应该选的是ik,
测试效果: