前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Solr-to-ES迁移

Solr-to-ES迁移

原创
作者头像
沈小翊
发布2023-11-16 18:09:58
2350
发布2023-11-16 18:09:58
举报
文章被收录于专栏:大数据生态大数据生态

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ES对比Solr
    • 环境配置
      • Solr安装
        • solr-to-es安装
          • 依赖安装
            • 开始迁移
            相关产品与服务
            Elasticsearch Service
            腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档