本文档介绍通过第三方社区提供的solr-to-es工具,将Solr节点中的文档,迁移到阿里云Elasticsearch(简称ES)索引中的方法。

环境准备

在开始数据迁移前,您需要首先准备以下操作环境:

  • 准备自建Solr环境,本案例使用5.0.0版本的Solr,其他版本需自测验证。
  • 安装Python,要求3.0及以上版本,本案例使用Python 3.6.2。
  • 创建阿里云Elasticsearch实例,要求为6.x版本,本案例使用6.3.2 版本。
    注意 本文使用的solr-to-es迁移工具仅支持阿里云ES 6.x版本,其他版本需自行测试。
  • 创建ECS实例,本示例使用阿里云ECS CentOS 7.3版本,其他系统及版本需自测验证。
  • 安装pysolr,版本要求:3.3.3 =< pysolr < 4.0。

安装solr-to-es工具

  1. 单击此处,下载solr-to-es工具。
  2. 进入setup.py所在的目录下,运行python setup.py install命令,安装迁移工具。
  3. 安装成功后,参考以下命令进行文档迁移。
    python __main__.py <solr_url>:8983/solr/my_core/select http://<username>:<password>@<elasticsearch_url>:9200 elasticsearch_indexdoc_type
    表 1. 参数说明
    参数 说明
    <solr_url> Solr集群的完整访问地址。例如,http://116.62.**.**。
    my_core 迁移文档对应的SolrCore的名称。
    <username> 阿里云ES的访问用户名,默认为elastic。
    <password> 阿里云ES的访问密码,一般在创建实例时设定。
    <elasticsearch_url> 阿里云ES实例的内/外网访问地址。可在实例的基本信息页面获取。
    elasticsearch_index 在阿里云ES中,写入Solr文档的索引名称。
    doc_type 在阿里云ES中,写入对应索引的类型名称。
    注意 如果您使用的是其他版本的环境,也可以尝试使用如下命令进行文档迁移,参数详情请参见solr-to-es
    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的所有文档,写入到阿里云ES实例中。对应的索引为elasticsearch_index,索引类型为doc_type

  1. 在Solr环境中,进入solr-to-es-master/solr_to_es文件夹下。
  2. 执行以下命令。
    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

    其他参数说明请参见表 1

  3. 在阿里云ES控制台中,登录Kibana控制台
  4. 在Kibana控制台开发工具页面的Console中,执行以下命令,查看阿里云ES集群服务中是否已成功创建elasticsearch_index索引。
    GET _cat/indices?v
  5. 执行以下命令,查看迁移成功的文档详情。
    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
            }
          }
        ]
      }
    }