最近公司的项目想要加上全文检索,为了实现该功能,特意学习了一下solr,把搭建步骤及遇到的坑记录一下
1 、安装mysql
mysql的安装选用的是最新的版本,下载解压,配置path路径,然后在解压的跟目录下,创建my.ini,内容如下
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir = C:\develop\mysql-8.0.13-winx64
# 设置mysql数据库的数据的存放目录
datadir = C:\develop\mysql-8.0.13-winx64\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
2、配置文件
一 、注意,做完上面的步骤,一定先要对数据库进行初始化,不然创建服务将无法启动,在数据库安装目录的bin文件夹下打开控制台,然后执行
mysqld --initialize --console
执行完将会在data文件夹下生产一大堆初始文件
二 、然后执行下面语句,将服务挂在起来,
mysqld install MySQL --defaults-file="C:\develop\mysql-8.0.13-winx64\my.ini"
接着就可以 net start mysql,启动mysql服务,当mysql服务启动之后
三 、mysql -uroot -p 默认第一次使用的密码mysql安装目录data文件夹下 计算机名.err文件中 例如
root@localhost: aX:Mh!GnH6Y<
使用上面的密码进入数据库然后进行更改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
四、假如使用sqlyou因为mysql8.0加密方式变了,需要先使用控制台进入mysql然后执行
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
3 安装solr将其集成到tomcat上,并导入数据
1 、复制项目
解压tomcat跟solr7.1.0
然后将solr-7.1.0\server\solr-webapp\webapp,里面的所有文件复制到tomcat webapp下面的solr文件夹下
2、复制jar包
solr-7.1.0\server\lib\ext目录下的所有jar包
solr-7.1.0\dist下的 solr-dataimporthandler-7.1.0.jar
solr- dataimporthandler-extras-7.1.0.jar
\solr-7.1.0\server\lib下metrics开头的5个jar
粘贴复制到tomcat下的solr项目的WEB-INF/lib目录下;
3、复制solr-home
新建solrhome文件夹,这个文件夹可以放在C盘或者D盘等根目录
把solr-7.1.0\server\solr里面的内容复制到新建的文件夹下面
4 、复制实例
在上面新建的solrhome文件夹下面新建实例文件夹,一般为collection
然后复制 solr-7.1.0\example\example-DIH\solr\solr 里面的内容到 collection下
打开里面的文件core.properties 假如name=collection
5 、更改web.xml
打开tomcat下面的solr项目的web.xml
打开<env-entry>的注释,并把<env-entry-value>的值改成solr-home都得位置
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/put/your/solr/home/here</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
将web.xml最下面的 <security-constraint>给注释了,即是下面的内容
<security-constraint>
<web-resource-collection>
<web-resource-name>Disable TRACE</web-resource-name>
<url-pattern>/</url-pattern>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Enable everything but TRACE</web-resource-name>
<url-pattern>/</url-pattern>
<http-method-omission>TRACE</http-method-omission>
< /web-resource-collection>
</security-constraint>
然后即可启动tomcat,启动成功后可以在浏览器上输入
localhost:8080/solr/index.html,查看是否配置成功
4、引入中文分词器
搭建成功之后,如果中文分词器版本过低,将会使solr启动不起来,因此选用的是ik-analyzer-solr7-7.x.jar
1 、将ik-analyzer-solr7-7.x.jar放入solr项目lib文件夹下
2 、打开solrhome实例里面的conf文件夹下面的managed-schema.xml,然后将中文分词器给定义了,并定义几个域,
接着就可以在solr的网页上查看配置结果
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<field name="product_name" type="text_ik" indexed="true" stored="true"/>
<field name="product_price" type="pfloat" 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_catalog_name" type="string" indexed="true" 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"/>
5 、导入mysql数据
1、在solrhome实例里面与data文件夹同级建立lib文件夹,然后将mysql的驱动包放进去,因为mysql我们使用8以上版本,需要注意的是mysql驱动包的版本mysql-connector-java-8.0.12.jar
2 、因为实例里面的solrconfig.xml中有如下配置
<requestHandler name="/dataimport" class="solr.DataImportHandler">
<lst name="defaults">
<str name="config">solr-data-config.xml</str>
</lst>
</requestHandler>
因此在conf文件夹下olr-data-config.xml,进行重新编写,内容如下
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/solr?serverTimezone=UTC&useSSL=false"
user="root"
password="kfhs2012"/>
<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>
其中里面的驱动必须写新版驱动,而url,?后面的参数必选带上,否则导入数据不成功,将以上配置完成就可以去solr网页上将数据库里面的数据进行导入