Resin上部署Solr4.5.1 简介
Solr 4.5.1 配置
各软件版本:
- solr4.5.1
- resin3.1
- jdk1.6
一.准备solr的环境
- 去官方网站下载solr4.5.1.tgz
- 解压文件:tar --xzf solr4.5.1.tgz
- 创建solr文件夹 mkdir /data/web/solr
- 创建索引核心配置文件夹 mkdir /data/web/solr/home, 将 solr4.5.1/example/multicore 拷贝到该目录下,cp -r /data/web/solr-4.5.1/example/multicore /data/web/solr/home
- 拷贝solr的web工程文件 cp -r /data/web/solr-4.5.1/dist /data/web/solr/dist
二.resin配置
1.重命名solr-4.5.1文件中的dist文件夹下的solr的war包:mv solr-4.5.1.war solr.war
2.拷贝该solr.war 至resin中webapps目录下。
3.修改resin.conf
3.1 配置solr/home的JNDI,红色部分。
3.2 注意配置<tree-loader path="/data/web/solr/dist"/>,它可以自动加载该指定目录下的jar包
<host id="" root-directory=".">
<web-app document-directory="webapps/solr">
<stdout-log path="/data/logs/solr/resin/stdout.log" timestamp="[%H:%M:%S.%s]" rollover-period="1D"/>
<stderr-log path="/data/logs/solr/resin/stderr.log" timestamp="[%H:%M:%S.%s]" rollover-period="1D"/>
<character-encoding>utf-8</character-encoding>
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>/data/web/solr/home/multicore</env-entry-value>
</env-entry>
<class-loader>
<tree-loader path="/data/web/solr/dist"/>
</class-loader>
</web-app>
</host>
三.上述配置完成后,启动resin
启动后常见的几个错误:
1.500 Servlet Exception
WEB-INF/web.xml:23: <web-app xmlns="http://java.sun.com/xml/ns/javaee">
is an unexpected top-level tag.
<web-app xmlns="http://caucho.com/ns/resin">,
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"> or
<web-app xmlns=""> are expected.
Syntax: (<web-app> | <web-app> | <web-app>)
解决方法:在web工程目录中 如 /data/web/resin_solr/webapps/solr/WEB-INF/ 修改web.xml ,直接将报错的三行删掉。
2.log相关日志包无法找到
解决方法:将 /data/web/solr-4.5.1/example/lib/ext中的jar包拷贝至CLASSPATH下
3.
15:21:45.055]429 [main] ERROR org.apache.solr.core.Config – Exception during parsing file: null:javax.xml.transform.TransformerException: java.lang.UnsupportedOperationException
[15:21:45.055] at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:71
解决方法:resin中XML解析的实现有问题,所以改用JVM自带的解析类 参考:http://wiki.apache.org/solr/SolrResin 中Resin's XML Parsing Problems,将web.xml中以下注释去掉。
<!-- Uncomment if you are trying to use a Resin version before 3.0.19.
Their XML implementation isn't entirely compatible with Xerces.
Below are the implementations to use with Sun's JVM.
<system-property javax.xml.xpath.XPathFactory=
"com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl"/>
<system-property javax.xml.parsers.DocumentBuilderFactory=
"com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"/>
<system-property javax.xml.parsers.SAXParserFactory=
"com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl"/>
-->
Solr4.5中文分词配置
一.配置IK中文分词器
下载最新的IK中文分词器 :IK Analyzer 2012FF_hf1.zip
1.解压IK Analyzer 2012FF_hf1.zip,将该目录下的IKAnalyzer.cfg.xml, ,stopword.dic放到resin_home/webapps/solr/WEB-INF/classes目录下。将IKAnalyzer2012FF_u1.jar包放到resin_home/webapps/solr/WEB-INF/lib中
2.配置schema.xml
<fieldType class="solr.TextField" >
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer" useSmart ="false"/>
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer" useSmart ="false"/>
</fieldType>
升级注意事项:
如果以前用的是solr3.x版本,现在升级到了solr4.x,需要对相应的IKAnalyzer相关jar包进行升级,solr3.x用的是 IKAnalyzer2012_u6.zip。
同时,Schemal.xml文件也需要进行相应的改变:
因为Solr4.0发布以后,官方取消了BaseTokenizerFactory接口,而直接使用Lucene Analyzer标准接口。因此IK分词器2012 FF版本也取消了org.wltea.analyzer.solr.IKTokenizerFactory类,所以Solr3.x版本中的schema.xml中存在如下配置<tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" useSmart ="false" isMaxWordLength="false"/>
在solr4.x中会报错
[17:41:30.205]org.apache.solr.common.SolrException: Plugin init failure for [schema.xml] fieldType "text": Plugin init failure for [schema.xml]
analyzer/tokenizer: Error loading
class 'org.wltea.analyzer.solr.IKTokenizerFactory'. Schema file is /data/web/solr/home/multicore/user/schema.xml
排除错误方法
1.改用新的schema.xml的配置方式
2.使用支持Solr4的IKTokenizerFactory
参考:http://henry2009.iteye.com/blog/1754127
二.配置mmseg4j分词器
下载mmseg4j 包https://code.google.com/p/mmseg4j/
Solr4.x需要下载1.9.0之后的版本,这里下载了mmseg4j-1.9.1.zip
解压该文件,将dist目录下的mmseg4j-analysis-1.9.1.jar,mmseg4j-core-1.9.1.jar,mmseg4j-solr-1.9.1.jar三个jar包放到resin_home/webapps/solr/WEB-INF/lib包下。
若使用的是1.9.x 可以不用在scheml.xml文件中配置 dicPath 参数,可以使用 mmseg4j-core-1.9.x.jar 里的 words.dic。
SolrCloud配置
1.配置zookeeper集群,配置zoo.cfg文件
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/web/zookeeper/data
dataLogDir=/data/web/zookeeper/logs
clientPort=2181
server.1=10.11.17.164:2888:3888
server.2=10.11.17.165:2888:3888
server.3=10.4.16.169:2888:3888
2.先在164机器上配置一台Solr,配置方法参考上面solr4.5.1配置
创建一个collection: http://solrUrl/admin/collections?action=CREATE&name=user&numShards=1&replicationFactor=1
3 .建立zookeeper 与solr 的关系
Solr中封装有上传配置文件操作的Jar包,通过以下方式使用
3.1 上传配置文件到zookeeper
java -classpath .:/data/web/resin_solr/webapps/solr/WEB-INF/lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 10.11.17.164:2181,10.11.17.165:2181,10.4.16.169:2181 -confdir /data/web/solr/home/multicore/user/conf -confname userConf
3.2 关联配置文件与已有集合
java -classpath .:/data/web/resin_solr/webapps/solr/WEB-INF/lib/* org.apache.solr.cloud.ZkCLI -cmd linkconfig -collection user -confname userConf -zkhost 10.11.17.164:2181,10.11.17.165:2181,10.4.16.169:2181
note:user需为已创建的集合
进入zookeeper中 bin/ sh zkCli.sh -server 10.11.17.164:2181 查看配置文件的上传情况
启动165上的solr
访问 http://10.11.17.164:8083/#/~cloud 出现以下情况,表示配置成功。
4.创建collection 的两种方式
4.1通过solr提供的REST接口
http://solrUrl/admin/collections?action=CREATE&name=mycollection&numShards=1&replicationFactor=1
name:集合名称
numShards:集合分片数量
replicationFactor:分片的副本数量
其它具体参数意义参考官方文档
4.2修改配置文件
1、增加conf目录下的相应的配置文件
2、copy已有的一个core到新core名,并删除原数据
3、在solr.xml的最后一个core节点的后边增加新的core节点
4、重启
上面的4个步骤需要在各个shard上都执行一遍
SolrCloud multicore配置
第一种方式:
1.在home路径下创建一个集中管理的配置文件夹 如:solr_home/conf
2.将每个core的配置文件拷贝到该文件中,并分别命名。
3.直接在solr.xml中指定core的配置文件。
如下是配置 customer与 taskt 两个core时,将customer与core的schema.xml和solrconfig.xml拷贝至home路径下conf文件中,并且进行区别开,如修改为schema.customer.xml,solrconfig.customer.xml和schema.task.xml,solrconfig.customer.xml。
然后执行如下命令上传该配置文件:
java -classpath .:/data/web/resin_solr/webapps/solr/WEB-INF/lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 10.11.17.164:2181,10.11.17.165:2181,10.4.16.169:2181 -confdir /data/web/solr/home/multicore/conf -confname centralConf
并且在solr.xml中进行如下配置:
<core numShards="1" name="customer" instanceDir="customer" shard="shard1" collection="customer" schema="schema.customer.xml" config="solrconfig.xml" />
<core numShards="1" name="task" instanceDir="task" shard="shard1" collection="task" schema="schema.task.xml" config="solrconfig.xml" />
最后在resin的java启动参数中,添加如下参数:-Dbootstrap_confdir=/data/web/solr/home/multicore/conf -Dcollection.configName=centralConf
第二种方式:
保留solr3.x配置文件的位置,为每个core所属的collection单独上传配置文件,并将该collection与配置文件关联。