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_144
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export 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进行全文检索配置完成,并进行了手动添加数据源。