使用开源OpenSearch API导入数据
在应用开发调试或小规模数据迁移场景中,开发者经常需要快速将本地的JSON数据文件(如测试数据集、配置文件)写入OpenSearch集群。相比于配置复杂的Logstash或CDM等迁移工具,直接调用开源OpenSearch API(如 _bulk批量接口)是一种更轻量、灵活的解决方案。您既可以在OpenSearch Dashboards的界面中进行交互式写入,也可以在ECS等服务器上通过Curl命令行脚本化批量导入,实现数据的敏捷上云。
方式一:在OpenSearch Dashboards上导入数据
在OpenSearch Dashboards上支持通过POST命令使用开源OpenSearch API导入数据。
适用场景:开发调试、临时写入少量数据、语法验证。
- 登录OpenSearch Dashboards。
- 登录云搜索服务管理控制台。
- 在左侧导航栏,选择“集群管理 > OpenSearch”。
- 在集群列表,选择目标集群,单击操作列的“Dashboards”,登录OpenSearch Dashboards。
- 在OpenSearch Dashboards左侧导航栏选择“Dev Tools”,进入操作页面。
控制台左侧是命令输入框,其右侧的三角形图标为执行按钮,右侧区域则显示执行结果。
- (可选)创建索引,并指定自定义映射来定义数据类型。
PUT /my_store { "settings": { "number_of_shards": 1 }, "mappings": { "properties": { "productName": { "type": "text" }, "size": { "type": "keyword" } } } } - 将数据导入索引。
例如,执行如下命令,导入一条数据到索引“my_store”。
POST /my_store/_bulk {"index":{}} {"productName":"Latest art shirts for women in 2017 autumn","size":"L"} - 结果验证。
观察返回结果,当“errors”字段为“false”,且“items”数组中每条数据的“result”为“created”,则表示全部导入成功。
方式二:在ECS上使用Curl命令行导入数据
在ECS服务器上支持通过Curl命令使用开源OpenSearch API导入数据文件。
适用场景:自动化脚本、批量导入本地JSON文件。
- 准备服务器。购买与OpenSearch集群在同一VPC下的弹性云服务器 (ECS)。
ECS的使用指导请参见快速购买和使用Linux ECS。
- 获取集群的内网访问地址。
- 登录云搜索服务管理控制台。
- 在左侧导航栏,选择“集群管理 > OpenSearch”。
- 在集群列表,选择目标集群,在“内网访问地址”列获取并记录集群的内网地址,一般是“<host>:<port>”或“<host>:<port>,<host>:<port>”样式,例如“10.62.179.32:9200,10.62.179.33:9200”。
当集群中存在Client节点时,仅显示所有Client节点的IP和端口;否则,显示所有数据节点和冷数据节点的IP和端口。
- 验证连通性。在ECS服务器ping OpenSearch集群的内网IP地址,能正常访问则表示网络连通。
- 准备数据文件。将JSON数据文件上传至ECS。
- (可选)创建索引,并指定自定义映射来定义数据类型。
- 非安全模式的集群(HTTP):无需认证,直接访问。
curl -X PUT "http://<host>:<port>/my_store" \ -H 'Content-Type: application/json' \ -d '{ "settings": { "number_of_shards": 1 }, "mappings": { "properties": { "productName": { "type": "text" }, "size": { "type": "keyword" } } } }' - 安全模式+HTTP协议的集群:需要身份认证(如果密码包含“!”等特殊字符,请使用单引号包裹,例如:“-u 'admin':'Pass!word'”)。
curl -X PUT -u <user>:<password> "http://<host>:<port>/my_store" \ -H 'Content-Type: application/json' \ -d '{ "settings": { "number_of_shards": 1 }, "mappings": { "properties": { "productName": { "type": "text" }, "size": { "type": "keyword" } } } }' - 安全模式+HTTPS协议的集群:需要身份认证(如果密码包含“!”等特殊字符,请使用单引号包裹,例如:“-u 'admin':'Pass!word'”),且需要忽略SSL证书校验。
curl -X PUT -k -u <user>:<password> "https://<host>:<port>/my_store" \ -H 'Content-Type: application/json' \ -d '{ "settings": { "number_of_shards": 1 }, "mappings": { "properties": { "productName": { "type": "text" }, "size": { "type": "keyword" } } } }'
- 非安全模式的集群(HTTP):无需认证,直接访问。
- 执行导入命令,将JSON数据文件导入到OpenSearch集群。
在ECS存放JSON数据文件的路径下,执行如下命令导入数据。
- 非安全模式的集群(HTTP):无需认证,直接访问。
curl -X POST "http://<host>:<port>/_bulk" \ -H 'Content-Type: application/json' \ --data-binary @test.json - 安全模式+HTTP协议的集群:需要身份认证(如果密码包含“!”等特殊字符,请使用单引号包裹,例如:“-u 'admin':'Pass!word'”)。
curl -X POST -u <user>:<password> "http://<host>:<port>/_bulk" \ -H 'Content-Type: application/json' \ --data-binary @test.json - 安全模式+HTTPS协议的集群:需要身份认证(如果密码包含“!”等特殊字符,请使用单引号包裹,例如:“-u 'admin':'Pass!word'”),且需要忽略SSL证书校验。
curl -X POST -k -u <user>:<password> "https://<host>:<port>/_bulk" \ -H 'Content-Type: application/json' \ --data-binary @test.json
当访问节点出现故障时,会导致命令执行失败,如果集群包含多个节点,可以将<host>替换为另一个节点的IP地址,如果集群只有一个节点,则需要等待节点修复之后再执行命令导入数据。
- 非安全模式的集群(HTTP):无需认证,直接访问。
- 结果验证。
“errors”为“false”则表示全部导入成功。