本次参考文章 1、docker 安装solr8.6.2 配置中文分词器 2、阳光沙滩博客系统-文章搜索模块,感谢两位大佬的教程指导
创建docker容器
docker安装
使用国内 daocloud 一键安装命令:
curl -sSL https://get.daocloud.io/docker | sh
重新启动Docker服务
systemctl daemon-reload
systemctl restart docker
配置Docker开机自启动
systemctl enable docker
docker安装solr
这里直接安装最新版就可以了,后面再进行修改
docker pull solr:8.6.2
创建并允许solr容器
docker run --name blog-solr -d -p 8983:8983 solr:8.6.2 // blog-solr这个可用自行命名
// 参数详解
run 运行容器 -d 后台运行 -p 容器端口和宿机端口映射 -- name 容器名称 blog-solr 指镜像名称
创建核心
docker exec -it --user=solr blog-solr bin/solr create_core -c Ik_core
出现 Created new core 'Ik_core' 即创建超过
浏览器访问
http://localhost:8983
solr配置中文分词器
下载Ik文件
链接:https://pan.baidu.com/s/1bVCQljlfi6pE-6d_cJESwQ 提取码:4e4v
// 创建创建个目录将解压的文件放在这里
mkdir /mnt/Ik/
当使用虚拟机复制不进去时,考虑是否文件夹具有权限,修改权限,包括子目录的
chmod 777 * -R
复制配置文件
这里需要根据自己的solr版本(solr-8.6.2
)进行修改对应的版本号,查看版本可以使用 docker images
,就可以看到安装的版本。
docker cp ik-analyzer-8.3.0.jar blog-solr:/opt/solr-8.6.2/server/solr-webapp/webapp/WEB-INF/lib/
docker cp ik-analyzer-solr7-7.x.jar blog-solr:/opt/solr-8.6.2/server/solr-webapp/webapp/WEB-INF/lib/
docker cp solr-dataimporthandler-8.4.0.jar blog-solr:/opt/solr-8.6.2/server/solr-webapp/webapp/WEB-INF/lib/
docker cp solr-dataimporthandler-extras-8.4.0.jar blog-solr:/opt/solr-8.6.2/server/solr-webapp/webapp/WEB-INF/lib/
进入solr容器创建文件夹
docker exec -it --user=root blog-solr /bin/bash
cd /opt/solr-8.6.2/server/solr-webapp/webapp/WEB-INF
mkdir classes
exit
IKAnalyzer.cfg.xml
在 Ik
目录下,新建一个IKAnalyzer.cfg.xml
文件,可以先在Windows新建好,然后拖动进去,怎么快乐怎么来吧。内容就是下面的内容。
<?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>
然后我们就执行下面的指令,这是在Ik
目录下执行的。
docker cp IKAnalyzer.cfg.xml blog-solr:/opt/solr-8.6.2/server/solr-webapp/webapp/WEB-INF/classes/
修改managed-schema
docker exec -it --user=root blog-solr /bin/bash
cp /opt/solr-8.6.2/contrib/analysis-extras/lucene-libs/lucene-analyzers-smartcn-8.6.2.jar /opt/solr-8.6.2/server/solr-webapp/webapp/WEB-INF/lib/
cd /var/solr/data/Ik_core/conf
vim managed-schema
这里,可能你会出现 bash: vim: command not found
出现bash: vim: command not found 的解决办法 (centOS)
因为vim没有安装,使用如下命令安装:
apt-get install vim
又可能会出现如下问题:
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package vim
此时需要:
注意操作目录
root@43b0864ac698:/# apt-get update
然后再:
apt-get install vim
中途会让你确认一次,输入 Y
然后就可以了,我们继续执行
cd /var/solr/data/Ik_core/conf
vim managed-schema
在managed-schema
最下面添加以下内容:
这里的内容根据yulate 和拉大锯两位大佬的配置文件结合在一起的
需要注意的是,8.x的int和long都是
pint
和plong
,而5.x的是int无需要加p
<!-- 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>
<fieldType name="text_cn" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
</analyzer>
</fieldType>
<!--自定义字段-->
<field name="blog_view_count" type="pint" indexed="true" stored="true" required="true" multiValued="false" />
<field name="blog_title" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="blog_content" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="blog_create_timme" type="pdate" indexed="true" stored="true" required="true" multiValued="false" />
<field name="blog_labels" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="blog_url" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="blog_category_id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<!--搜索item-->
<field name="search_item" type="text_cn" indexed="true" stored="true" required="true" multiValued="true" />
<copyField source="blog_title" dest="search_item" />
<copyField source="blog_content" dest="search_item" />
<copyField source="blog_labels" dest="search_item" />
修改solrconfig.xml
vim solrconfig.xml
在最下面添加
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">db-data-config.xml</str>
</lst>
</requestHandler>
重启solr
exit
docker restart blog-solr
docker容器自动启动设置
如果已经启动了则可以使用如下命令:
docker update --restart=always <CONTAINER ID>