Linux/Centos/windows集成tomcat和Solr并进行全文检索

来源:互联网 发布:java.util.calendar 编辑:程序博客网 时间:2024/05/18 21:05

Linux/Centos/windows安装Solr并进行全文检索

本文主要是以Linux和centos系统为例,但是在window上也是同样的操作,亲测有效。
使用软件版本号:

  • solr版本:solr 6.6.1
  • JDK版本:jdk1.8.0_144
  • tomcat版本:tomcat 8.5.20

下载必须安装包

JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Solr下载地址:http://mirror.bit.edu.cn/apache/lucene/solr/6.6.1/
Tomcat下载地址:http://mirror.bit.edu.cn/apache/lucene/solr/6.6.1/

安装JDK

1、本地下载JDK后,上传至服务器并解压(其中/java是自己设置存放JDK的路径):

$ scp jdk-8u144-linux-x64.tar.gz root@serverhost:/java$ tar –zxvf jdk-8u144-linux-x64.tar.gz

2、配置环境:

$ vim /etc/profile

在文件最后加入如下内容(其中JAVA_HOME是jdk存放的位置):

export JAVA_HOME=/java/jdk1.8.0_144export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport PATH=$JAVA_HOME/bin:$PATH

安装tomcat

1、本地下载tomcat后,上传服务器并解压(其中serverhost为服务器IP地址)
将solr和tomcat压缩包上传至服务器后,进行解压,解压目录为当前目录。solr_dir是存放tomcat和solr的文件,用户可以自行定义。

$ scp ~./solr-6.6.1.tgz root@serverlhost:/solr-dir$ scp ~./apache-tomcat-8.5.20.zip  root@serverhost:/solr-dir$ tar –zxvf solr-6.6.1.tgz$ unzip  apache-tomcat-8.5.20.zip

解压之后如图所示:

这里写图片描述

2、修改tomcat默认端口号(此处修改为8090,tomcat默认端口为8080)
进入【apache-tomcat-8.5.20/conf】目录,在server.xml中,找到如下代码:

这里写图片描述

将其中的8080修改为8090.
这里写图片描述

配置文件(核心部分)

1、将【/solr_dir /solr-6.6.1/server/solr-webapp】下的webapp文件拷贝到【/solr_dir/apache-tomcat-8.5.20/webapps】目录下,并将webapp重命名为solr。

# 进入【/solr_dir/apache-tomcat-8.5.20/webapps】目录下,进行如下命令。$ cp -r /solr_dir/solr-6.6.1/server/solr-webapp/webapp /solr_dir/apache-tomcat-8.5.20/webapps/$ mv webapp solr

2、将【\solr_dir \solr-6.6.1\server\lib\ext】下的所有jar包,以及【\solr_dir \solr-6.6.1\server\lib】下以metrics开头的jar包复制到【\solr_dir \apache-tomcat-8.5.20\webapps\solr\WEB-INF\lib】下。

$ cp -r /solr_dir/solr-6.6.1/server/lib/ext/*.jar /solr_dir/apache-tomcat-8.5.20/webapps/solr/WEB-INF/lib/$ cp -r /solr_dir/solr-6.6.1/server/lib/metrics-*.jar /solr_dir/apache-tomcat-8.5.20/webapps/solr/WEB-INF/lib/

3、将【\solr_dir \solr-6.6.1\dist】文件夹下的solr-dataimporthandler-6.3.0.jar和solr-dataimporthandler-extras-6.3.0.jar两个jar包复制到【\solr_dir \apache-tomcat-8.5.20\webapps\solr\WEB-INF\lib】文件夹下;

$ cp /solr_dir/solr-6.6.1/dist/solr-dataimporthandler-*.jar /solr_dir/apache-tomcat-8.5.20/webapps/solr/WEB-INF/lib/

4、将【\solr_dir \solr-6.6.1\server\resources】下的log4j.properties配置文件拷贝到【\solr_dir \apache-tomcat-8.5.20\webapps\solr\WEB-INF\classes】,如果WEB-INF下没有classes文件那么就创建一个classes文件夹。

$ mkdir classes$ cp /solr_dir/solr-6.6.1/server/resources/log4j.properties /solr_dir/apache-tomcat-8.5.20/webapps/solr/WEB-INF/classes

5、在【\solr_dir \apache-tomcat-8.5.20】下新建一个文件【solrhome(文件夹名称可以任意命名)】,将【\solr_dir \solr-6.6.1\server\solr】下的所有文件拷贝到刚刚创建的【solrhome】目录下;

$ cp -r /solr_dir/solr-6.6.1/server/solr/* /solr_dir/apache-tomcat-8.5.20/solrhome/

6、在目录【\solr_dir \apache-tomcat-8.5.20\webapps\solr\WEB-INF】下的web.xml文件中找到如下代码:
这里写图片描述

默认是注释掉的,将该注释去掉。将其中’env-entry-value’中的值更改为前文新建文件夹【solrhome】所在目录。此处更改为:/solr_dir/apache-tomcat-8.5.20/solrhome/。【根据自己实际目录更改即可】.如图所示:
这里写图片描述

7、将目录【/solr_dir /apache-tomcat-8.5.20/webapps/solr/WEB-INF】下的web.xml文件中的以下代码注释掉。下面的代码是注释状态,默认是未注释状态。

这里写图片描述
至此,配置完全结束。

8、进入【/solr_dir/apache-tomcat-8.5.20/bin】目录:
进入【/solr_dir/apache-tomcat-8.5.20/bin】目录:

$ ./startup.sh

若启动失败,则重复检查。若,启动时,提示权限不够,则执行一下命令:

$ chmod 744 startup.sh shutdown.sh catalina.sh daemon.sh digest.sh setclasspath.sh tool-wrapper.sh version.sh

在浏览器中输入http://serverhost:8090/solr/index.html

【注意】需要在服务器上设置外网链接端口号开放。

solr的WEB UI界面如图所示:
这里写图片描述

数据导入

添加core

在上文中solrhome目录下新建文件夹mycore,将【/solr_dir/solr-6.6.1/example/example-DIH/solr/solr】下所有文件复制到刚刚创建的msycore目录下;

cp -r /solr_dir/solr-6.6.1/example/example-DIH/solr/solr/* /solr_dir/apache-tomcat-8.5.20/solrhome/mycore/

重启tomcat。
进入Solr的WebUI,点击左侧的Core Admin,即可以看到添加的索引“mycord”。如图所示:
这里写图片描述
这里写图片描述

配置IKAnalyzer的中文分词

IK Analyzer分词器下载:https://pan.baidu.com/s/1i4VXWln
1、下载完成后,将压缩包上传至服务器中的【/solr_dir】目录下。

$ scp ~./ikanalyzer-solr6.5.ziproot@serverlhost:/solr-dir

2、解压至当前文件夹:

$ unzip ikanalyzer-solr6.5.zip 

3、IK分词器中有四个文件,ext.dic为扩展字典,stopword.dic为停止词字典,IKAnalyzer.cfg.xml为配置文件,solr-analyzer-ik-5.1.0.jar ik-analyzer-solr5-5.x.jar为分词jar包。

这里写图片描述

4、将文件夹下的IKAnalyzer.cfg.xml , ext.dic和stopword.dic 三个文件 复制到【/solr_dir/apache-tomcat-8.5.20/webapps/solr/WEB-INF/classes/】 目录下。

$ cp /solr_dir/ikanalyzer-solr5/IKAnalyzer.cfg.xml ext.dic stopword.dic /solr_dir/apache-tomcat-8.5.20/webapps/solr/WEB-INF/classes/

5、将文件夹下的solr-analyzer-ik-5.1.0.jar ik-analyzer-solr5-5.x.jar 到/solr_dir/apache-tomcat-8.5.20/webapps/solr/WEB-INF/lib/】目录下

$ cp /solr_dir/ikanalyzer-solr5/ik-analyzer-solr5-5.x.jar solr-analyzer-ik-5.1.0.jar /solr_dir/apache-tomcat-8.5.20/webapps/solr/WEB-INF/lib/

6 、配置文件jar包
6.1、将【/solr_dir/solr-6.6.1/contrib/extraction/lib】目录下的所有.jar包复制到【/solr_dir/apache-tomcat-8.5.20/webapps/solr/WEB-INF/lib】下。

$ cp /solr_dir/solr-6.6.1/contrib/extraction/lib/*.jar /solr_dir/apache-tomcat-8.5.20/webapps/solr/WEB-INF/lib/

6.2、在【/solr_dir/apache-tomcat-8.5.20/solrhome/mycore/conf】目录下新建tika-data-config.xml,在该文件中添加如下内容:

<dataConfig>      <script><![CDATA[         id = 1;         function GenerateId(row) {             row.put('id', (id ++).toFixed());             return row;         }          function WipOffHtml(row) {             var file = row.get('file');             row.put('file',file.substr(0,file.indexOf('.')));             return row;         }                  ]]>     </script>          <dataSource type="BinFileDataSource" />             <document>              <entity    name="files" dataSource="binary"    rootEntity="false"                processor="FileListEntityProcessor"             baseDir="/solr_dir/txtbooks " fileName=".*.(doc)|(pdf)|(xls)|(ppt)|(docx)"             recursive="true">                  <field  column="fileAbsolutePath" name="filePath" />                  <field  column="fileSize" name="size" />                  <field  column="fileLastModified" name="lastModified" />                  <entity  name="documentImport"  processor="TikaEntityProcessor"  url="${files.fileAbsolutePath}" format="text" transformer="HTMLStripTransformer,RegexTransformer,script:GenerateId">                      <field  column="file" name="fileName"/>                      <field column="id" name="id" />                      <field  column="Author" name="author" meta="true"/>                      <field  column="title" name="title" meta="true"/>                      <field  column="text" name="text" stripHTML="true" regex="\t|\r|\n|\s"                     replaceWith="" />                  </entity>                </entity>             </document>  </dataConfig>

注意:baseDir=”/solr_dir/txtbooks ” fileName=”.*.(doc)|(pdf)|(xls)|(ppt)|(docx)” 其中”/solr_dir/txtbooks “为solr数据源。

6.3、在【/solr_dir /apache-tomcat-8.5.20/solrhome/mycore/conf】目录下修改solrconfig.xml文件,在文件最后添加下列内容:

<requestHandler name="/dataimport" class="solr.DataImportHandler">    <lst name="defaults">      <str name="config">tika-data-config.xml</str>    </lst>  </requestHandler>

6.4、在【/solr_dir/apache-tomcat-8.5.20/solrhome/mycore/conf】下的 managed-schema文件最后添加如下内容:

<!--IKAnalyzer中文分词配置--><fieldType name="text_ik" class="solr.TextField">        <analyzer type="index">            <tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="true"/>        </analyzer>        <analyzer type="query">            <tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="true"/>        </analyzer></fieldType>

并找到如下图所示的标签,进行修改。【注意:name=”text”的type必须要修改成text_ik,与IK分词器一致,否则会报错】
这里写图片描述

至此IK分词器配置完成。

上传数据源

1、将数据上传至前文设置的数据源路径中。此处是/solr_dir/txtbooks,其中,textbooks是本地按照文章段落分好的句子。

2、如图dataimport中,Entity选择files,然后执行Excuse,将数据源导入。然后可以进行检索。
这里写图片描述

然后进行查询时,可以正确查询了,
这里写图片描述

最后,在python代码中进行调用的时候,需要将路径改为“mycore”即可。
至此。整个Solr集成tomcat进行全文检索配置完成,并进行了手动添加数据源。