Docker 部署 Solr 极简教程
Solr 是 apache 旗下的一款开源,高效的搜索引擎,底层使用的 apache 的 lucene。这篇文章将以极简的方式搭建单机版的 Solr。本 教程旨在试玩与学习,生产环境搭建还请移步官方文档与相关社区。
我作为一个 Solr 新手来搭建环境时,首先肯定是从官方文档的 quick start 开始啦,但是官方文档里面居然没有 docker 安装的教程,这对新时代的我来说是无法接受的。但是网上的各种 docker 安装教程不知道是因为 Solr 镜像版本的原因还是其他原因,在我使用 data-import 的功能时,各种目录对不上,以及各种 sdk 和 API 介绍搞得我眼花缭乱,无用的信息太多只会让自己的脑子发热以及打击自信心。
所以在探索出我要的东西之后,决定写下这个教程只服务于 docker 安装以及 data-import 功能介绍和使用。如若与您所需要的东西不符,那也没必要看下去了。
在安装前请确保服务器能连接互联网与存在 docker 服务。
提示
本文只介绍 Solr 的 docker 安装与 data-import 功能对于 PostgreSQL 的使用。如需了解 Solr 的 API 或者 sdk 的使用请移步官方文档与相关社区。
下载镜像
直接在 docker 里面下载官方镜像,以最新版为例。docker pull solr
准备工作
需要创建工作目录,方便我们挂载配置文件,用来测试 Solr 的 data-import 功能
- 创建data目录用来挂载配置文件 空的就行启动后docker会把容器内的配置文件复制出来
- 创建lib目录放置postgres-jdbc-driver的jar包
启动容器
docker run -d -p 8983:8983 -v /srv/solr/lib:/data-lib -v /srv/solr/data/:/var/solr/data -t --privileged=true --name solr solr
启动完成后已 root 用户进入 docker 容器
docker exec -it -u root solr bash
在容器里将/data-lib 目录下的 jdbc-driver 包 cp 到 /opt/solr-8.7.0/server/solr-webapp/webapp/WEB-INF/lib
在容器里将 /opt/solr-8.7.0/dist/solr-dataimporthandler-8.7.0.jar
cp 到 /opt/solr-8.7.0/server/solr-webapp/webapp/WEB-INF/lib
到这里就可以打开 Solr 的 admin 控制页面了
访问目标 ip 的 8983 端口 192.168.1.222:8983
创建一个新的索引库
docker exec -it --user=solr solr bin/solr create_core -c nap
由于我的配置文件挂载到宿主机上了,所以我们只要修改宿主机上的文件即可。
进入宿主机上新建立的 data 目录,这时候我们创建的索引库已经在文件夹里生成了
写入 solrconfig.xml
进入目标索引库的 conf 目录
在这个/selcet 所在的标签上面新添加一个标签
<requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
写入 data-config.xml
在 conf 目录添加 data-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource type="JdbcDataSource" driver="org.postgresql.Driver" url="jdbc:postgresql://192.168.1.54:5432/nap2" user="postgres" password="r00tme"/>
<document name="test">
<entity name="test" pk="id"
query="select id,created_at,deleted from test">
<field column="id" name="id"/>
<field column="created_at" name="created_at"/>
<field column="deleted" name="deleted"/>
</entity>
</document>
</dataConfig>
[root@nap-222 conf]#
里面填上自己的数据源,支持多个和多种数据源,按规则配置即可
写入 managed-schema
添加相应的 field , id 默认不能删除,_version_也不能删除,删除 Solr 启动会报错。
重启容器
docker restart solr
在 admin 控制台手动同步数据
查询数据
修改 postgres 源数据 Solr 是否能触发同步?
修改数据源里的数据 Solr 不会察觉同步,所以需要自己维护,例如 API 通知,或者使用 sorl 的插件可以设置定时同步与轮询。
这个搜索引擎,是谷歌百度这种搜索引擎的意思吗
可以这么想,但谷歌百度的肯定更加复杂
我第一眼以为是做系统内的内容搜索引擎
都可以做啊,看你怎么用