通过reindex远程重建索引,您可以在当前Elasticsearch(简称ES)集群中重建索引数据,将旧版本的ES集群中的数据迁移到当前发布版本中。

配置示例

通过当前集群调用reindex API重建索引前,请先在当前集群的elasticsearch.yml中配置reindex.remote.whitelist,将远程集群(旧集群)的访问地址添加到当前集群的远程访问白名单中。

白名单允许以hostport组合,并使用逗号分隔多个主机配置(例如otherhost:9200,another:9200,127.0.10.**:9200,localhost:**)。且白名单不识别协议信息,只使用主机和端口信息用于实现安全策略设定。
注意 配置reindex白名单时,如果远程ES集群为单可用区的阿里云ES实例,请使用<阿里云ES实例的域名>:9200;如果为多可用区的阿里云ES实例,请使用实例中所有数据节点的IP地址与端口的组合。

白名单配置完成后,即可调用reindex API重建索引,示例如下。

POST _reindex
{
  "source": {
    "remote": {
      "host": "http://otherhost:9200",
      "username": "user",
      "password": "pass"
    },
    "index": "source",
    "query": {
      "match": {
        "test": "data"
      }
    }
  },
  "dest": {
    "index": "dest"
  }
}
  • host为远程集群的访问地址,必须包含支持协议、域名和端口信息,例如https://otherhost:9200
    注意
    • 如果远程ES集群为单可用区的阿里云ES实例,请将远程host配置为<阿里云ES实例的域名>:<9200>,并且需要配置实例网络互通
    • 如果远程ES集群为多可用区的阿里云ES实例,请将远程host配置为<阿里云ES实例中任意数据节点的IP地址>:<9200>,并且需要配置实例网络互通
  • usernamepassword为可选参数,如果您所请求的远程ES服务需要使用Basic Authentication,请在请求中一并提供此参数信息。通过Basic Authentication鉴权需要使用HTTPS协议,否则密码信息将以文本形式进行传输。其他参数说明请参见Reindex API
说明
  • 如果远程集群的访问地址已在白名单中设定,当前集群将不会验证和修改请求参数,而是直接发送请求至远程ES集群。
  • 从远程集群重建索引数据,不支持手动切片自动切片,详情请参见手动切片自动切片

批量设置

远程ES集群使用堆缓存索引数据,默认最大设定值为100MB。如果远程索引中包含大文档,请将批量数值设置为较小值。

以下示例中,通过size设置批量数值为10。
POST _reindex
{
  "source": {
    "remote": {
      "host": "http://otherhost:9200"
    },
    "index": "source",
    "size": 10,
    "query": {
      "match": {
        "test": "data"
      }
    }
  },
  "dest": {
    "index": "dest"
  }
}

超时时间设置

您可以使用socket_timeout设置socket读取超时时间,默认为30s;使用connect_timeout设置连接超时时间,默认为1s

以下示例中,设置socket读取超时时间为1分钟,连接超时时间为10秒。

POST _reindex
{
  "source": {
    "remote": {
      "host": "http://otherhost:9200",
      "socket_timeout": "1m",
      "connect_timeout": "10s"
    },
    "index": "source",
    "query": {
      "match": {
        "test": "data"
      }
    }
  },
  "dest": {
    "index": "dest"
  }
}