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 ​
image.png

准备工作​

需要创建工作目录,方便我们挂载配置文件,用来测试 Solr 的 data-import 功能​

  1. 创建data目录用来挂载配置文件 空的就行启动后docker会把容器内的配置文件复制出来 ​
  2. 创建lib目录放置postgres-jdbc-driver的jar包 ​
    image.png

启动容器​

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 目录​
image.png
在这个/selcet 所在的标签上面新添加一个标签​
image.png

<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​

image.png
添加相应的 field , id 默认不能删除,_version_也不能删除,删除 Solr 启动会报错。​

重启容器​

docker restart solr​

在 admin 控制台手动同步数据​

image.png

查询数据​

image.png

修改 postgres 源数据 Solr 是否能触发同步?​

修改数据源里的数据 Solr 不会察觉同步,所以需要自己维护,例如 API 通知,或者使用 sorl 的插件可以设置定时同步与轮询。​

   
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口

    29 引用
  • Solr

    1 引用