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腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!