一、我的环境
Solr:Solr7.3.1
Jdk:1.8.0_161
Tomcat:apache-tomcat-8.5.31
二、安装过程
1 把solr的压缩包,tomat的压缩包上传到linux系统
2 在 /usr/local/ 下创建 solr目录
[root@solr1 ~]# mkdir /usr/local/solr
3 解压缩 solr-7.3.1.tgz 到刚刚创建的solr目录下
[root@solr1 ~]# tar -xvf solr-7.3.1.tgz -C /usr/local/solr
4 同理,解压缩 apache-tomcat-8.5.31.tar.gz 也到solr目录下
[root@solr1 ~]# tar -xvf apache-tomcat-8.5.31.tar.gz -C /usr/local/solr
5 此时,/usr/local/solr/ 下会有两个文件夹
6 把solr-7.3.1/server/solr-webapp 下的 webapp 文件夹拷贝到 tomcat 的 webapps 下,重命名为 solr7,也可以是别的名字
[root@solr1 solr-webapp]# cp -r webapp/ /usr/local/solr/apache-tomcat-8.5.31/webapps/
如图:
7 重命名tomcat webapps下的 webapp 为 solr7
[root@solr1 webapps]# mv webapp solr7
8 拷贝 solr-7.3.1/server/lib/ 目录下的 gmetric4j-1.0.7.jar ,以及 metrics 开头的 jar 包拷贝到 apache-tomcat-8.5.31/webapps/solr7/WEB-INF/lib/ 下
[root@solr1 lib]# cp gmetric4j-1.0.7.jar /usr/local/solr/apache-tomcat-8.5.31/webapps/solr7/WEB-INF/lib/
[root@solr1 lib]# cp metrics-*.* /usr/local/solr/apache-tomcat-8.5.31/webapps/solr7/WEB-INF/lib/
9 拷贝 solr-7.3.1/server/lib/ext 下的jar包到 apache-tomcat-8.5.31/webapps/solr7 项目的 WEB-INF/lib/ 下
[root@solr1 ext]# cp ./* /usr/local/solr/apache-tomcat-8.5.31/webapps/solr7/WEB-INF/lib/
10 拷贝 solr-7.3.1/dist/ 下的以 solr-dataimporthandler 开头的jar包到 apache-tomcat-8.5.31/webapps/solr7 项目的 WEB-INF/lib/ 下
10.1 定位以 solr-dataimporthandler 开头的jar包的位置:
[root@solr1 solr]# find /usr/local/solr -name 'solr-dataimporthandler*'
/usr/local/solr/solr-7.3.1/dist/solr-dataimporthandler-7.3.1.jar
/usr/local/solr/solr-7.3.1/dist/solr-dataimporthandler-extras-7.3.1.jar
10.2 找到后,拷贝到 apache-tomcat-8.5.31/webapps/solr7 项目的 WEB-INF/lib/ 下
[root@solr1 dist]# cp /usr/local/solr/solr-7.3.1/dist/solr-dataimporthandler-* /usr/local/solr/apache-tomcat-8.5.31/webapps/solr7/WEB-INF/lib/
11 拷贝 solr-7.3.1/server/ 下的 solr 文件夹到 /usr/local/solr目录下,重命名为solrhome
[root@solr1 dist]# cd /usr/local/solr/solr-7.3.1/server/
[root@solr1 server]# ls
contexts etc lib modules README.txt resources scripts solr solr-webapp start.jar
[root@solr1 server]# cp -r solr /usr/local/solr
[root@solr1 server]# cd /usr/local/solr
[root@solr1 solr]# ls
apache-tomcat-8.5.31 solr solr-7.3.1
[root@solr1 solr]# mv solr solrhome
[root@solr1 solr]# ls
apache-tomcat-8.5.31 solr-7.3.1 solrhome
12 关联solr 和 solrhome. 需要修改 apache-tomcat-8.5.31/webapps/solr7/WEB-INF/web.xml
13 解决日志不能够正常显示问题
13.1 在 /usr/local/solr/apache-tomcat-8.5.31/webapps/solr7/WEB-INF/ 下面创建一个classes 文件夹
13.2 拷贝 solr-7.3.1/server/resources 下的 log4j.properties 到刚刚创建的classes目录下。
[root@solr1 resources]# cp log4j.properties /usr/local/solr/apache-tomcat-8.5.31/webapps/solr7/WEB-INF/classes/
13.3 在 /usr/local/solr/ 下创建一个 logs 文件夹
[root@solr1 resources]# mkdir /usr/local/solr/logs
[root@solr1 resources]# cd /usr/local/solr
[root@solr1 solr]# ls
apache-tomcat-8.5.31 logs solr-7.3.1 solrhome
13.4 修改log4j.properties文件
14 修改tomcat的端口,避免冲突
修改 /usr/local/solr/apache-tomcat-8.5.31/conf/ 下的 server.xml 文件:
15 启动tomcat,访问solr时后面记得加 index.html
HTTP Status 403 - Forbidden 解决
修改/usr/local/solr/apache-tomcat-8.5.31/webapps/solr7/WEB-INF/ 下的 web.xml 文件。
修改完后,重启tomcat,地址栏输入http://192.168.0.183:8081/solr7/index.html
三 不能添加核心的解决
1 事故现场
name:自定义的名字,建议和instanceDir保持一致
instanceDir:solrhome目录下的示例类目
dataDir:默认填data即可
config:指定配置文件,/usr/local/solrhome/new_core/conf/solrconfig.xml
schema:指定schema.xml文件,new_core/conf/schema文件(实际上是managed-schema文件)
注意!在schema.xml下面有一个感叹号!
如果你不管他,直接点击Add Core会提示solrconfig.xml文件找不到
2 事故解决
2.1 进入到 solrhome/new_core 目录,复制/usr/local/solr/solrhome/configsets/_default/conf/ 文件夹到new_core目录下。(solrhome其实是前面 /usr/local/solr/solr-7.3.1/server/solr 文件夹副本)
[root@solr1 new_core]# pwd
/usr/local/solr/solrhome/new_core
[root@solr1 new_core]# cp -r /usr/local/solr/solrhome/configsets/_default/conf ./
2.2 切换到solrhome目录,复制 solr-7.3.1/contrib文件夹到solrhome目录下
[root@solr1 solrhome]# cp -r /usr/local/solr/solr-7.3.1/contrib/ ./
2.3 复制solr-7.3.1/dist文件夹到solrhome目录下
[root@solr1 solrhome]# cp -r /usr/local/solr/solr-7.3.1/dist/ ./
2.4 修改核心配置文件solrhome/new_core/conf/solrconfig.xml, 主要是修改contrib目录,dist目录的相对位置。(对于使用内置jetty部署的不需要修改contrib,dist目录的相对位置,默认的就是正确的,使用tomcat的必须要修改)
<lib dir="${solr.install.dir:..}/contrib/extraction/lib" regex=".*\.jar" /> <lib dir="${solr.install.dir:..}/dist/" regex="solr-cell-\d.*\.jar" /> <lib dir="${solr.install.dir:..}/contrib/clustering/lib/" regex=".*\.jar" /> <lib dir="${solr.install.dir:..}/dist/" regex="solr-clustering-\d.*\.jar" /> <lib dir="${solr.install.dir:..}/contrib/langid/lib/" regex=".*\.jar" /> <lib dir="${solr.install.dir:..}/dist/" regex="solr-langid-\d.*\.jar" /> <lib dir="${solr.install.dir:..}/contrib/velocity/lib" regex=".*\.jar" /> <lib dir="${solr.install.dir:..}/dist/" regex="solr-velocity-\d.*\.jar" />
2.5 重启服务即可正常创建core,然后 instanceDir文件夹(new_core)里会自动生成一个core.properties文件。
重启前
重启后,再次点击add core ,添加 new_core,即可添加成功。new_core文件夹里的内容如下:
core.properties文件中的内容如下:
到这里就解决了不能添加核心问题。
四 ikanalyzer 中文分词器
准备好 Ikanalyzer文件,目录结构如下:
里面包括 IK Analyzer 2个jar包:ik-analyzer-solr-5-.x.jar、solr-analyzer-ik-5.1.0.jar
IK配置文件 IKAnalyzer.cfg.xml、ext.dic、stopword.dic
1 拷贝ik-analyzer-solr5-5.x.jar 到 /usr/local/solr/apache-tomcat-8.5.31/webapps/solr7/WEB-INF/lib 目录下面
[root@solr1 ikanalyzer-solr-5]# cp ik-analyzer-solr5-5.x.jar /usr/local/solr/apache-tomcat-8.5.31/webapps/solr7/WEB-INF/lib/
2 拷贝 ext.dic,stopword.dic,IKAnalyzer.cfg.xml到/usr/local/solr/apache-tomcat-8.5.31/webapps/solr7/WEB-INF/classes 目录下面
[root@solr1 ikanalyzer-solr-5]# cp ext.dic /usr/local/solr/apache-tomcat-8.5.31/webapps/solr7/WEB-INF/classes/
[root@solr1 ikanalyzer-solr-5]# cp stopword.dic /usr/local/solr/apache-tomcat-8.5.31/webapps/solr7/WEB-INF/classes/
[root@solr1 ikanalyzer-solr-5]# cp IKAnalyzer.cfg.xml /usr/local/solr/apache-tomcat-8.5.31/webapps/solr7/WEB-INF/classes/
前面的安装过程中我已经创建过classes目录,如果没有的话,创建一个。
IKAnalyzer.cfg.xml的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">ext.dic;</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">stopword.dic;</entry>
</properties>
ext.dic里面添加新词汇:比如“王者荣耀”这类的。
stopword.dic里面添加不需要分词的词语,比如“的 了 个 你 我 他 她”
3 修改/usr/local/solr/solrhome/new_core/conf 下面的managed-schema 文件
3.1 添加一个自定义的fieldType
<!-- IKAnalyzer-->
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
3.2 定义一个field,指定field的Type属性为 text_ik
<!--IKAnalyzer Field-->
<field name="title_ik" type="text_ik" indexed="true" stored="true" />
<field name="content_ik" type="text_ik" indexed="true" stored="false" multiValued="true"/>
配置完成后的效果如下:
4 重启tomcat,让配置生效
5 测试
五 拼音分词器的安装
首先需要准备好拼音分词器所需的jar包。
另外还需要用到第四步的IKAnalyzer 中文分词器里面的一个jar包。
5.1 将 solr-analyzer-ik-5.1.0.jar,pinyinAnalyzer4.3.1.jar,pinyin4j-2.5.0.jar三个jar包导入到/usr/local/solr/apache-tomcat-8.5.31/webapps/solr7/WEB-INF/lib 目录下
[root@solr1 pinyinAnalyzer]# cp pinyin4j-2.5.0.jar /usr/local/solr/apache-tomcat-8.5.31/webapps/solr7/WEB-INF/lib/
[root@solr1 pinyinAnalyzer]# cp pinyinAnalyzer4.3.1.jar /usr/local/solr/apache-tomcat-8.5.31/webapps/solr7/WEB-INF/lib/
[root@solr1 ikanalyzer-solr-5]# cp solr-analyzer-ik-5.1.0.jar /usr/local/solr/apache-tomcat-8.5.31/webapps/solr7/WEB-INF/lib/
5.2 修改/usr/local/solr/solrhome/new_core/conf 下面的managed-schema 文件
在其中加入如下内容
<!-- IK 拼音分词 -->
<fieldType name="text_pinyin" class="solr.TextField" positionIncrementGap="0">
<analyzer type="index">
<tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory"/>
<filter class="com.shentong.search.analyzers.PinyinTransformTokenFilterFactory" minTermLenght="2" />
<filter class="com.shentong.search.analyzers.PinyinNGramTokenFilterFactory" minGram="1" maxGram="20" />
</analyzer>
<analyzer type="query">
<tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory"/>
<filter class="com.shentong.search.analyzers.PinyinTransformTokenFilterFactory" minTermLenght="2" />
<filter class="com.shentong.search.analyzers.PinyinNGramTokenFilterFactory" minGram="1" maxGram="20" />
</analyzer>
</fieldType>
5.3 重启tomcat,查看效果
六 使用dataimport插件批量导入数据
配置前的效果
准备数据:
create database lucene;
use lucene;
create table people (
id int not null auto_increment,
name varchar(255) null,
telephone varchar(255) null,
sex varchar(255) null,
address varchar(255) null,
primary key (id)
);
插入两条数据:
insert into people(name,telephone,sex,address) values('张三','18717735402','男','北京');
insert into people(name,telephone,sex,address) values('李四','13717765666','女','上海');
6.1 把dataimport插件的依赖的jar包添加到 /usr/local/solr/solrhome/contrib/dataimporthandler/lib下,lib目录没有就创建一个
jar包的位置:
[root@solr1 dist]# mkdir /usr/local/solr/solrhome/contrib/dataimporthandler/lib (没有lib目录,所以先创建一个)
[root@solr1 dist]# cp solr-dataimporthandler-7.3.1.jar /usr/local/solr/solrhome/contrib/dataimporthandler/lib/
6.2 导入数据库的驱动包到 /usr/local/solr/solrhome/contrib/dataimporthandler/lib下
数据库的jar包需要自己去找。
--->mysql的
--->oracle的
6.1、6.2两步后的效果:
6.3 修改 /usr/local/solr/solrhome/new_core/conf下面的solrconfig.xml配置文件,添加一个requestHandler
<!--批量导入数据配置-->
<lib dir="${solr.install.dir:..}/contrib/dataimporthandler/lib" regex=".*\.jar" />
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
6.4 创建一个data-config.xml文件保存到 /usr/local/solr/solrhome/new_core/conf目录下
# vim data-config.xml
里面的内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.0.150:3306/lucene"
user="root"
password="sdbrk"/>
<document>
<entity name="product" query="SELECT pid,name,catalog_name,price,description,picture FROM products ">
<field column="pid" name="id"/>
<field column="name" name="product_name"/>
<field column="catalog_name" name="product_catalog_name"/>
<field column="price" name="product_price"/>
<field column="description" name="product_description"/>
<field column="picture" name="product_picture"/>
</entity>
</document>
</dataConfig>
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource name="lucene"
type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.0.150:3306/lucene"
user="root"
password="sdbrk"/>
<document>
<entity name="people" query="select * from people">
<field column="id" name="id"/>
<field column="name" name="name"/>
<field column="telphone" name="telphone"/>
<field column="sex" name="sex"/>
<field column="address" name="address"/>
</entity>
</document>
</dataConfig>
dataSouce和entity里面的内容根据自己的实际情况修改。
对于没有的域需要自己配置。
<!--product-->
<field name="product_name" type="text_ik" indexed="true" stored="true"/>
<field name="product_catalog_name" type="string" indexed="true" stored="true" />
<field name="product_price" type="float" indexed="true" stored="true"/>
<field name="product_description" type="text_ik" indexed="true" stored="false" />
<field name="product_picture" type="string" indexed="false" stored="true" />
<field name="product_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="product_name" dest="product_keywords"/>
<copyField source="product_description" dest="product_keywords"/>
在managed-schema文件中加入上面的代码,效果如下
6.5 重启tomcat,让配置生效。
6.6 到dataimport点击Execute和Refresh Status按钮导入数据,查看导入的状态。
勾选Auto-Refresh Status 可以自动刷新,看到导入的状态
Auto-Refresh Status位置如下:
导入数据前建议先清空索引库,然后再导入(同时勾选clean和commit)
6.7 这个时候我们到Query栏点击查询按钮,可以看到数据能够搜索出来了