本文介绍通过第三方社区提供的solr-to-es工具,将Solr节点中的文档迁移到阿里云Elasticsearch中的方法。
环境准备
- 创建阿里云Elasticsearch实例,要求版本为6.x,本文使用6.3.2 版本,详情请参见创建阿里云Elasticsearch实例。 重要- 本文使用的solr-to-es迁移工具仅支持阿里云Elasticsearch 6.x版本,其他版本需自行测试。 
- 开启目标阿里云Elasticsearch的自动创建索引功能,详情请参见配置YML参数。 
- 创建阿里云ECS实例,本文使用CentOS 7.3版本,详情请参见步骤一:创建ECS实例。 重要- ECS实例需要与阿里云ES实例在同一区域和可用区,以及同一专有网络VPC(Virtual Private Cloud)下。 
- 在ECS上安装Solr,本文使用5.0.0版本的Solr,详情请参见Solr官方文档。 
- 在ECS上安装Python,要求3.0及以上版本,本文使用Python 3.6.2。 
- 在ECS上安装PySolr,要求3.3.3及以上,4.0以下版本。 
安装solr-to-es工具
- 连接ECS实例,下载solr-to-es工具。 - 连接ECS实例的具体操作请参见通过密码或密钥认证登录Linux实例。 说明- 本文档以普通用户权限为例。 
- 进入setup.py所在的目录,运行 - sudo python setup.py install命令,安装solr-to-es工具。
- 安装成功后,参考以下命令进行文档迁移。 - sudo python __main__.py <solr_url>:8983/solr/<my_core>/select http://<username>:<password>@<elasticsearch_url>:9200 <elasticsearch_index> <doc_type>- 表 1. 参数说明 - 参数 - 说明 - <solr_url>- Solr集群的完整访问地址。例如,http://116.62.**.**。 - <my_core>- 迁移文档对应的SolrCore的名称。 - <username>- 阿里云ES的访问用户名,默认为elastic。 - <password>- 阿里云ES的访问密码,在创建实例时设定。 - <elasticsearch_url>- 阿里云ES实例的私网或外网访问地址。可在实例的基本信息页面获取,详情请参见查看实例的基本信息。 - <elasticsearch_index>- 待写入的Solr文档对应的索引名称。 - <doc_type>- 对应索引的类型名称。 重要- 如果您使用的是其他版本的solr-to-es工具,也可以尝试使用如下命令进行文档迁移,参数详情请参见solr-to-es。 - sudo solr-to-es [-h] [--solr-query SOLR_QUERY] [--solr-fields COMMA_SEP_FIELDS] [--rows-per-page ROWS_PER_PAGE] [--es-timeout ES_TIMEOUT] solr_url elasticsearch_url elasticsearch_index doc_type- 本案例使用以上命令会输出 - -bash: solr-to-es.py: command not found的错误。
操作示例
通过以下命令,查询名称为my_core的SolrCore的所有文档,写入到阿里云Elasticsearch实例中。对应的索引为elasticsearch_index,索引类型为doc_type。
- 在Solr环境中,进入solr-to-es-master/solr_to_es文件夹下。 
- 执行以下命令。 - sudo python __main__.py 'http://116.62.**.**:8983/solr/my_core/select?q=*%3A*&wt=json&indent=true' 'http://elastic:替换密码@es-cn-so4lwf40ubsrf****.public.elasticsearch.aliyuncs.com:9200' elasticsearch_index doc_type- 参数 - 说明 - q- Solr的查询语法,必选,可以使用运算符。 - *%3A*表示查询所有文档。- wt- 返回的数据类型,支持JSON、XML、Python、Ruby、CSV等格式。 - indent- 返回结果是否需要格式化展示,默认为 - false。- 其他参数说明请参见参数说明。 
- 登录目标阿里云Elasticsearch实例的Kibana控制台,根据页面提示进入Kibana主页。 - 登录控制台的具体操作步骤请参见登录Kibana控制台。 说明- 本文操作以Elasticsearch 6.7版本的Kibana控制台为例,其他版本操作可能略有差别,请以实际页面为准。 
- 在左侧导航栏,单击Dev Tools(开发工具),再单击Go to work。 
- 在Console页签中,执行以下命令查看阿里云Elasticsearch集群服务中是否已成功创建 - elasticsearch_index索引。- GET _cat/indices?v
- 在Console页签中,执行以下命令查看迁移成功的文档详情。 - GET /elasticsearch_index/doc_type/_search- 查询成功后,返回如下结果。 - { "took" : 12, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 2, "max_score" : 1.0, "hits" : [ { "_index" : "elasticsearch_index", "_type" : "doc_type", "_id" : "Tz8WNW4BwRjcQciJ****", "_score" : 1.0, "_source" : { "id" : "2", "title" : [ "test" ], "_version_" : 1648195017403006976 } }, { "_index" : "elasticsearch_index", "_type" : "doc_type", "_id" : "Tj8WNW4BwRjcQciJ****", "_score" : 1.0, "_source" : { "id" : "1", "title" : [ "change.me" ], "_version_" : 1648195007391203328 } } ] } }