腾讯云-Solr企业级搜索引擎实战

2019-08-13 15:17:40 浏览数 (1)

引言

Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。

Solr安装

1. 上传solr-4.10.3.tgz.tgz到root文件夹下,上传工具请阅读上一文章。

2. 创建一个solr文件夹

先进入到/usr/local文件夹下:cd /usr/local/

然后在创建solr文件夹: mkdir solr

将solr-4.10.3.tgz.tgz拷贝到solr文件夹下:cp /root/solr-4.10.3.tgz.tgz solr/

3. 进入到solr文件夹下解压solr-4.10.3.tgz.tgz solr/

命令:cd solr

命令:tar zxf solr-4.10.3.tgz.tgz

4.安装tomcat(由于前面章节已经讲过tomcat安装了此处就忽略)

5.安装好tomcat之后,再将solr-4.10.3/dist/solr-4.10.3.war文件拷贝到tomcat/webapps并且修改名为solr.war

命令:cp -r /usr/local/solr/solr-4.10.3/dist/solr-4.10.3.war /usr/local/solr/tomcat/webapps/solr.war

6. 然后解压solr.war文件,直接启动tomcat就可以解压了。

7. 然后删除solr.war包删除前必须停止tomcat

停止tomcat命令:/usr/local/solr/tomcat/bin/shutdown.sh

或者进入cd /usr/local/solr/tomcat/bin/ 然后在输入命令./shutdown.sh

删除solr.war包

命令:cd /usr/local/solr/tomcat/webapps

删除命令:rm solr.war

8. 进入/usr/local/solr/solr-4.10.3目录下将example/lib/ext/*下的jar拷贝到/usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/下

进入命令: cd /usr/local/solr/solr-4.10.3

要拷贝的jar目录

拷贝命令:

cp example/lib/ext/* /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/

9. 进入/usr/local/solr/solr-4.10.3

命令:cd /usr/local/solr/solr-4.10.3

然后将example/solr文件夹下的文件拷贝到/usr/local/solr/solrhome如果文件夹不存在将创建

命令cp -r example/solr /usr/local/solr/solrhome

10. 进入到/usr/local/solr/tomcat/webapps/solr/WEB-INF/下修改web.xml文件

命令:cd /usr/local/solr/tomcat/webapps/solr/WEB-INF/

编辑命令:vi web.xml

放开<env-entry>注释,并且修改修改路径为:/usr/local/solr/solrhome/

:wq保存

11. 然后启动tomcat

进入 cd /usr/local/solr/tomcat/bin

开启tomcat命令:./startup.sh

关闭命令:./shutdown.sh

进入日志文件夹命令:cd /usr/local/solr/tomcat/logs

查看日志:tail catalina.out

如果没有开放tomcat的8080端口的需要开放一下8080端口,具体的可以查看“学习笔记”中的jdk tomcat实战

12.异常处理

如果访问报以下异常

HTTP Status 500 - {msg=SolrCore 'collection1' is not available due to init failure: Index locked for write for core collection1,trace=org.apache.solr.common.SolrException: SolrCore 'collection1' is not available due to init failure: Index locked for write for core collection1

at org.apache.solr.core.CoreContainer.getCore(CoreContainer.java:745)

at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:307) at rg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) .... 解决办法 1.释放tomcat下的/webapps/solr/WEB-INF/web.xml中的<env-entry>标签,并修改标签下的<env-entry-value>标签内容为solrhome的路径。如果不管用就看第二条。 2.修改solrhome下/collection1/conf/solrconfig.xml,释放标签:<unlockOnStartup> 并将值false改为true.如果还不管用请看第三条。 3.solrhome目录建立文件solr.xml,内容: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <solr> </solr>

13.添加中文分词器

1.将中文分词器先上传到root文件夹下IK Analyzer 2012FF_hf1

2. 查看文件中的文件,cdIK Analyzer 2012FF_hf1

3. 然后将IKAnalyzer2012FF_u1.jar拷贝到solr的lib文件夹下

命令:cp IKAnalyzer2012FF_u1.jar /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/

查看命令: cd /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/

4. 然后将ext_stopword.dic,IKAnalyzer.cfg.xml,mydict.dic三个文件拷贝到/usr/local/solr/tomcat/webapps/solr/WEB-INF/classes/下

1)首先需要创建一个classes文件夹

命令: mkdir /usr/local/solr/tomcat/webapps/solr/WEB-INF/classes/

将上面3个文件拷贝进去

命令:cp ext_stopword.dic IKAnalyzer.cfg.xml mydict.dic /usr/local/solr/tomcat/webapps/solr/WEB-INF/classes/

这样中文分词器就定义好了

5.配置业务域

进入solrhome文件夹

命令:cd /usr/local/solr/solrhome/collection1/conf

命令:vi schema.xml

然后大写的G到最底部加上以下内容

代码语言:javascript复制
<!-- IKAnalyzer,中文分词器名为:text_ik-->
<fieldType name="text_ik" class="solr.TextField">
  <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

下面需要中文分词就需要将type的值等于text_ik,如果不需要分词的就可以使用其它类型,比如string,long等等

代码语言:javascript复制
<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_name" type="string" indexed="true" stored="true" />

这里是复制域分词器,item_keywords包含了以下所有的域,搜索的时候只需要匹配以上任意的都可以搜索出来

代码语言:javascript复制
<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_name" dest="item_keywords"/>

下面就需要关闭tomcat然后在启动tomcat

然后查看是否配置好了text_ik的中文分词器

以上就配置好了solr的中文分词器

好了腾讯云的solr单机版安装以及中文分词器就写完了。

END

0 人点赞