Centos 7 安装 Solr 7 Ik 分词器
借鉴: https://blog.youkuaiyun.com/u013160017/article/details/81037279
一. 要安装 JDK…
二. 安装 Solr
下载地址
: http://archive.apache.org/dist/lucene/solr/
1. 解压
[root@pyg leyou] tar -zxvf solr-7.4.0.gz
2. 启动
[root@pyg leyou] solr-7.4.0/bin/solr start -force
-
警告
*** [WARN] *** Your Max Processes Limit is currently 3806. It should be set to 65000 to avoid opera
-
解决
将
solr-7.5.0/bin/solr.in.sh
文件中,SOLR_ULIMIT_CHECKS
设置为false
,消除WARN
访问:
ip 地址
192.168.174.100
根据自己更换
http://192.168.174.100:8983/solr/#/
3. 可能出现问题解决
如果执行./solr start -force
命令的时候会警告你系统文件打开数的问题,可以这样解决。修改完后要重启系统。
-
修改 /etc/sysctl.conf 文件, 在最后一行添加
fs.file-max = 6553560
-
修改 /etc/security/limits.conf 文件,在最后一行添加
```shell
* soft nproc 65535 //注意,前面的星号也需要
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
```
如果出现solr安装成功,但是外界访问不到的问题,请检查防火墙是否关闭,或者8983端口是否允许开放!
关闭防火墙的命令:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
开启端口的命令:
firewall-cmd --zone=public --add-port=8983/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
三、添加自己的solr core
1、创建core目录
[root@pyg solr] mkdir pyg-core
[root@pyg solr] pwd
/home/leyou/solr-7.4.0/server/solr
2. 复制配置文件
[root@pyg leyou] cp -r solr-7.4.0/server/solr/configsets/_default/conf/ solr-7.4.0/server/solr/pyg-core/
3、添加core
在页面添加`pyg-core`(必须先做上面1、2步,不然会提示报错)。
name: pyg-core
instanceDir: pyg-core
其他默认, 点击Add Core
,添加成功后.solr-7.4.0/server/solr/pyg-core/
下会多两个东西。
core.properties文件
data目录
四、导入数据库中的数据到Solr中
1、创建****data-config.xml文件
在solr-7.4.0/server/solr/pyg-core/conf
目录下创建一个文件data-config.xml
,与solrconfig.xml
同级
[root@pyg leyou] touch ./solr-7.4.0/server/solr/pyg-core/conf/data-config.xml
2、修改solrconfig.xml文件
修改solr-7.4.0/server/solr/new_core/conf/solrconfig.xml
文件
[root@pyg leyou] vim solr-7.4.0/server/solr/pyg-core/conf/solrconfig.xml
在<requestHandler name="/select" class="solr.SearchHandler">
上放增加以下这段代码。
<requestHandler name="/dataimport"class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
其中`<str name="config">data-config.xml</str>`里的内容就是我们在上一步创建的`data-config.xml`文件,将它们关联起来。
3、修改data-config.xml文件
[root@pyg leyou] vim solr-7.4.0/server/solr/pyg-core/conf/data-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource
driver="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/db_pyg?serverTimezone=GMT%2B8&useSSL=false"
user="root"
password="qwe123"/>
<document>
<entity name="brand" pk="pid" query="SELECT id, name, first_name FROM tb_brand">
<field column="id" name="brand_id" />
<field column="name" name="brand_product_name" />
<field column="first_name" name="brand_first_name" />
</entity>
</document>
</dataConfig>
url
: 访问数据库路径
driver
: 这里是mysql8
的, 如果是mysql5
使用com.mysql.jdbc.Driver
,
user
, password
正常填写即可
query
: 你需要导入哪张表的哪些字段,查就行了
<field>
标签中的column
是SQL语句
中查询的字段
name
是 看 4、修改managed-schema文件 这里,与这里的field
name`对应
有多个查询字段就需要有多个`<field>`标签,每一个`<field>`标签对应一个字段。
document
: 配置数据库查询语句
与managed_schema
域的对应关系。 目的是,在core
导入数据的时候,会先通过该配置信息链接到数据库通过查询语句把数据查询出来,通过数据库字段
与managed_schema
域关联关系创建索引
4、修改managed-schema文件
[root@pyg leyou] vim solr-7.4.0/server/solr/pyg-core/conf/managed-schema
将刚才在data-config.xml中配置的<field>
标签添加进来。
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<!-- docValues are enabled by default for long type so we don't need to index the version field -->
<field name="_version_" type="plong" indexed="false" stored="false"/>
<field name="_root_" type="string" indexed="true" stored="false" docValues="false" />
<field name="_text_" type="text_general" indexed="true" stored="false" multiValued="true"/>
<!-- 上面是原有的的字段不用管 -->
<!-- 自己的导入的字段 -->
<field name='brand_id' type="plong" indexed="true" stored="true" />
<field name='brand_name' type="string" indexed="true" stored="true" />
<field name='brand_first_name' type="string" indexed="true" stored="true" />
<field>
里的name
:
域的名称: 与data-config.xml
里面数据库字段里面的name
对应
特点: 唯一,不能重复, 这里定义成跟数据库表字段的名称,方便使用。当然,也可以定义成其他名字。
type
:
是表示这个字段的类型是什么,string是字符串类型,int是整形数据类型,date是时间类型,相当于数据库里面的timestamp。
indexed
:
表示是否索引,索引的话就能查询到,否则,搜索的时候,不会出现。
stored
:
表示是否存储到索引库里面。
required
是否必须
multiValued
:
是否多值,比如商品信息中,一个商品有多张图片,一个Field想存储多个值的话,必须将multiValued设置为true
5、下载连接数据库和导入数据的jar包
现在涉及到数据库了,肯定需要依赖一些jar包,下载三个jar包 下载地址:http://mvnrepository.com/
如果打开慢可以使用 阿里仓库地址:
https://maven.aliyun.com/mvn/search 搜索
mysql-connector-java-8.0.16.jar
solr-dataimporthandler-7.4.0.jar
solr-dataimporthandler-extras-7.4.0.jar
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-dataimporthandler</artifactId>
<version>7.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-dataimporthandler-extras</artifactId>
<version>7.4.0</version>
</dependency>
三个jar包 放到solr-7.4.0/server/solr-webapp/webapp/WEB-INF/lib
目录下
然后打开solr-7.4.0/server/solr/pyg-core/conf/solrconfig.xml
,引用上面提到的jar包,如下。
<!-- mysql导入增加的包开始-->
<lib dir="${solr.install.dir:../../../..}/dist/" regex="mysql-connector-java-.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
<!-- mysql导入增加的包结束-->
关闭然后重启
./bin/solr stop -all # 停止
./bin/solr start -force # 开启
./bin/solr restart -force # 重启
6、导入数据
再次访问我们刚才的页面,在左侧找到我们部署好的pyg-core
工程,点击Dataimport
,再选择full-import
(全部导入),点击Execute
,出现下面的页面,证明这张表的数据已经导入进来了。
如果出错: >/ , <
, 检查 data-config.xml
文件是否写错
五、IK 分词器
github
https://github.com/magese/ik-analyzer-solr
使用说明
-
历史版本:[[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fxkRjohi-1586746638654)(https://camo.githubusercontent.com/8841ff97958a3cec0f15a5622ef473423aa4574c/68747470733a2f2f696d672e736869656c64732e696f2f6d6176656e2d63656e7472616c2f762f636f6d2e6769746875622e6d61676573652f696b2d616e616c797a65722e7376673f7374796c653d666c61742d737175617265)]](https://search.maven.org/search?q=g:com.github.magese AND a:ik-analyzer&core=gav)
<!-- Maven仓库地址 --> <dependency> <groupId>com.github.magese</groupId> <artifactId>ik-analyzer</artifactId> <version>7.4.0</version> </dependency>
Solr-Cloud
单机版Solr
-
下载
github项目
到虚拟机master.zip
[root@pyg leyou] unzip master.zip # github源码, 解压之后是 ik-analyzer-solr-master文件夹
-
将jar包放入Solr服务的
Jetty
或Tomcat
的webapp/WEB-INF/lib/
目录下; 使用上面 maven坐标下载或者在 https://maven.aliyun.com/mvn/search 阿里仓库下载
ik-analyzer-7.4.0.jar
, 把 jar 上传到 linux中[root@pyg leyou] mv ik-analyzer-7.4.0.jar ./solr-7.4.0/server/solr-webapp/webapp/WEB-INF/lib/
-
将
resources
目录下的5个配置文件放入solr服务的Jetty
或Tomcat
的webapp/WEB-INF/classes/
目录下;[root@pyg leyou] cp ik-analyzer-solr-master/src/main/resources/ ./solr-7.4.0/server/solr-webapp/webapp/WEB-INF/classes/ # 如果没有 classes 创建 classes
① IKAnalyzer.cfg.xml ② ext.dic ③ stopword.dic ④ ik.conf ⑤ dynamicdic.txt
-
配置Solr的
managed-schema
,添加ik分词器
,示例如下;<!-- ik分词器 --> <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>
-
启动Solr服务测试分词;
如果页面报错:
可能是上面的
jar
没有放对位置, 注意上传位置 -
IKAnalyzer.cfg.xml
配置文件说明:名称 类型 描述 默认 use_main_dict boolean 是否使用默认主词典 true ext_dict String 扩展词典文件名称,多个用分号隔开 ext.dic; ext_stopwords String 停用词典文件名称,多个用分号隔开 stopword.dic; -
ik.conf
文件说明:files=dynamicdic.txt lastupdate=0
files
为动态词典列表,可以设置多个词典表,用逗号进行分隔,默认动态词典表为dynamicdic.txt
;lastupdate
默认值为0
,每次对动态词典表修改后请+1,不然不会将词典表中新的词语添加到内存中。lastupdate
采用的是int
类型,不支持时间戳,如果使用时间戳的朋友可以把源码中的int
改成long
即可;2018-08-23
已将源码中lastUpdate
改为long
类型,现可以用时间戳了。
-
dynamicdic.txt
为动态词典在此文件配置的词语不需重启服务即可加载进内存中。 以
#
开头的词语视为注释,将不会加载到内存中。