全文索引服务solr搭建。公司最近要用到。我又是个java小白。做环境的什么的不再行。就此几下操作。
大部分是看官方提供的reference.pdf来做的,也google了不少。公司还有个大哥指点。。。。笨的可以。
环境如下
OS: centos6.5
java环境: jdk1.7.0_51
tomcat版本: apache-tomcat-7.0.55solr版本: solr-4.10.0
中文分词插件: IKAnalyzer2012FF_u1
另需准备mysql-connector-java-5.1.30.jar
配置好java环境和tomcat
注意把path.to.*替换为实际环境中对应的目录
解压solr-4.10.0.tgz同时部署tomcat webapps
cp /path.to.solr/example/webapps/solr.war /path.to.tomcat/webapps
解包solr.war
自己解包或者运行一次tomcat也可以解包
复制依赖的包到WEB-INF/lib中
cp /path.to.solr/dist/*.jar /path.to.tomcat/webapps/solr/WEB-INF/lib
cp /path.to.solr/example/lib/ext/*.jar /path.to.tomcat/webappssolr/WEB-INF/lib
//这是个偷懒行为。不知到有什么害处。
复制solr.home出来便于管理
cp /path.to.solr/example/solr /path.to.solr.home -av
在/path.to.tomcat/webapps/solr/WEB-INF/web.xml中加入
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/path.to.solr.home</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
注意替换
/path.to.solr.home
切换到 /path.to.solr.home
cd /path.to.solr.home
mkdir collection1/mysql
写入collection1/mysql/db1.xml
vim collection1/mysql/db1.xml
加入
<dataConfig> <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://10.9.0.10:3306/shopnc" user="root" password="passwd"/>
<document>
<entity name="goods" transformer="HTMLStripTransformer"
query="select goods_id,goods_name,goods_spec,goods_jingle from shopnc_goods" pk="goods_id">
<field column="goods_id" name="goods_id"/>
<field column="goods_name" name="goods_name" />
<field column="goods_jingle" name="goods_jingle" />
<field column="goods_spec" name="goods_spec" />
</entity>
</document>
</dataConfig>
这个不解释
修改collection1/conf/solrconfig.xml文件
vim collection1/conf/solrconfig.xml
注释掉以下几项
<lib dir="../../../contrib/extraction/lib" regex=".*\.jar" />
<lib dir="../../../dist/" regex="solr-cell-\d.*\.jar" />
<lib dir="../../../contrib/clustering/lib/" regex=".*\.jar" />
<lib dir="../../../dist/" regex="solr-clustering-\d.*\.jar" />
<lib dir="../../../contrib/langid/lib/" regex=".*\.jar" />
<lib dir="../../../dist/" regex="solr-langid-\d.*\.jar" />
<lib dir="../../../contrib/velocity/lib" regex=".*\.jar" />
<lib dir="../../../dist/" regex="solr-velocity-\d.*\.jar" />
因为solr.home是复制出来的,这些相对路径都是错的。
并在config标签下加入
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">../mysql/db1.xml</str>
</lst>
</requestHandler>
vim collection1/conf/solrconfig.xml
添加以下内容,要跟其他field标签统一级别
<!-- 添加需要索引的字段 -->
<field name="goods_id" type="string" indexed="true" stored="true" required="true" />
<field name="goods_name" type="string" indexed="true" stored="true"/>
<field name="goods_jingle" type="string" indexed="true" stored="true"/>
<field name="goods_spec" type="string" indexed="true" stored="true"/>
<!-- 添加需要索引的字段 -->
修改,把id改为表的索引列名 我的是goods_id
<uniqueKey>id</uniqueKey>
并注意 若表中没有id一列 要把原来的
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
删掉 ,或者把required="true"这项去掉。
重新加载/solr或者重启tomcat
看看http://localhost:8080/solr
在看看数据库链接 选择collection1 =>data import=>excute
Processed: 20
这里代表solr录入了数据
若为0就去logging哪里看看什么情况。
加入中文分词
解包IK Analyzer 2012FF_hf1.zip复制jar包到/path.to.tomcat/webapps/solr/WEB-INF/lib中
cp IKAnalyzer2012FF_u1.jar /path.to.tomcat/webapps/solr/WEB-INF/lib
创建文件夹 并复制词典到solr/WEB-INF/classes
mkdir /path.to.tomcat/webapps/solr/WEB-INF/classes
cp IKAnalyzer.cfg.xml stopword.dic /path.to.tomcat/webapps/solr/WEB-INF/classes
要用其他词典的自己google吧。
在/path.to.solr.home/collection1/conf/schema.xml的schema标签结束之前加入以下内容
<!-- 自定义添加IK Analyzer 分词插件-->
<fieldType name="text" 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>
重新加载solr 试试分词插件。Field/Type中选择text和上一步中配置的name一样就行。
并从/path.to.solr.home/collection1/conf/solrconfig.xml上做一次修改
vim /path.to.solr.home/collection1/conf/solrconfig.xml <!-- 添加需要索引的字段 -->
<field name="goods_id" type="string" indexed="true" stored="true" required="true" />
<field name="goods_name" type="string" indexed="true" stored="true"/>
<field name="goods_jingle" type="string" indexed="true" stored="true"/>
<field name="goods_spec" type="string" indexed="true" stored="true"/>
除了primary以外都把type="string"改为type="text"
如果出现设么问题在logging中都会有提示。