Solr-to-ES迁移

2023-11-16 18:09:58 浏览数 (1)

Solr 是Apache下的一个顶级开源项目,采用Java开发,基于Lucene的全文搜索服务。

Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。

ES对比Solr

优势

ES在高级查询上优化更多更高效

ES本身是分布式的,而Solr需要配合Zookeeper使用实现分布式

ES创建索引更快,而Solr创建索引会产生阻塞

实时建立索引时,ES没有阻塞写入数据更快

ES的查询速度几乎不受数据量增加的影响,而Solr会越来越慢

劣势

针对已有的数据查询时,Sor速度更快

Solr接受的数据格式更丰富

Solr比较成熟稳定

环境配置

Solr-9.3.0

JDK-17(建议不低于JDK8)

Python-3.6.8

ES-7.14.2

Solr安装

1. 创建solr用户(solr不允许root用户运行)

代码语言:javascript复制
useradd solr
passwd solr

#为solr用户添加sudo权限
vi /etc/sudoers

#在root    ALL=(ALL)       ALL下添加
solr    ALL=(ALL)       ALL

JDK-17安装过程省略

2. 安装solr

代码语言:javascript复制
#solr-9.3.0安装地址
https://www.apache.org/dyn/closer.lua/solr/solr/9.3.0/solr-9.3.0.tgz?action=download

tar -zxvf solr-9.3.0.tgz
cd solr-9.3.0
bin/solr start
#solr本地运行
#创建核心
bin/solr create -c my_core
#通过shell循环向solr添加数据
for i in `seq 1 10000`
do

curl -X POST -H 'Content-Type: application/json' 'http://localhost:8983/solr/my_core/update/json/docs?commit=true' --data-binary '
 {
   "id": "$i",
   "author": "Robert C. Martin",
   "title": "Clean Code: A Handbook of Agile Software Craftsmanship",
   "tags": [
     "Computer Programming Languages",
     "Software Testing",
     "Software Design & Engineering"
   ]
 }'

done
solr-to-es安装
代码语言:javascript复制
yum install git
git clone https://github.com/o19s/solr-to-es.git
cd solr-to-es
python3 setup.py install
依赖安装

ES依赖安装对应版本

原本安装的pysolr-3.9.3发生了依赖冲突,降低至3.6.0正常可用

代码语言:javascript复制
pip3 install elasticsearch==7.14.2
pip3 install pysolr==3.6.0
开始迁移
代码语言:javascript复制
solr-to-es --solr-query "*:*" http://127.0.0.1:8983/solr/my_core http://es-ip:9200 --es-user 'elastic' --es-password '*****' es_indexname _doc

出现代码执行报错,参数数量冲突

代码语言:javascript复制
TypeError: join() takes exactly one argument (2 given) [duplicate]

join()函数仅支持输入一个参数,源码main.py文件中105-106用法如下,执行失败

代码语言:javascript复制
if response.status_code != 200 or "responseHeader" not in response.json():
            args['solr_url'] = "/".join(args['solr_url'], "select")

可能为python版本问题方法用法产生变化,更换为如下命令执行无误

代码语言:javascript复制
cd solr-to-es/solr_to_es
python __main__.py <solr_url>:8983/solr/<my_core>/select http://<username>:<password>@<elasticsearch_url>:9200 <elasticsearch_index> <doc_type>

如果指定了Solr运行端口则对应更改8983

其他命令用法,参数说明见solr-to-es

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞