数据采集SDK
SDK功能简介
数据采集文档推送类。
管理搜索应用的数据采集文档推送,包含单条推送文档、批量推送文档等。
类名:DataCollectionClient
命名空间:OpenSearch\Client
接口描述
构造方法。
接口定义
voidOpenSearch\Client\DataCollectionClient::__construct(\OpenSearch\Client\OpenSearchClient $openSearchClient)
参数描述
参数名称 | 类型 | 描述 |
$openSearchClient | OpenSearch\Client\OpenSearchClient | 基础类,负责计算签名,和服务端进行交互和返回结果。 |
add
接口描述
增加一条文档。
Note: 这条文档只是增加到 SDK Client buffer 中,没有正式提交到服务端;只有调用了 commit 方法才会被提交到服务端。 你可以多次 add 然后调用 commit() 统一提交。
接口定义
\OpenSearch\Generated\Common\OpenSearchResult OpenSearch\Client\DataCollectionClient::add(array $fields)
参数描述
参数名称 | 类型 | 描述 |
$fields | array | 一条行为数据(或用户数据、物品数据)文档的所有字段,例如array(“user_id” => “1021468”, “bhv_type” => “click”); |
commit
接口描述
把 SDK Client buffer 中的文档发布到服务端。
Note: 在发送之前会把 buffer 中的文档清空,所以如果服务端返回错误需要重试的情况下,需要重新生成文档并 commit,避免丢数据的可能。
接口定义
\OpenSearch\Generated\Common\OpenSearchResult OpenSearch\Client\DataCollectionClient::commit(string $searchAppName,string $dataCollectionName,string $dataCollectionType)
参数描述
参数名称 | 类型 | 描述 |
$searchAppName | string | 关联的搜索应用名 |
$dataCollectionName | string | 数据采集名称,开通时控制台会返回该名称 |
$dataCollectionType | string | 数据采集类型:BEHAVIOR |
push
接口描述
批量推送文档。
Note: 此操作会同步发送文档到服务端。
接口定义
\OpenSearch\Generated\Common\OpenSearchResult OpenSearch\Client\DataCollectionClient::push(string $docJson,string $searchAppName,string $dataCollectionName,string $dataCollectionType)
参数描述
参数名称 | 类型 | 描述 |
$docJson | string | 文档 list,为 JSON 格式 |
$searchAppName | string | 关联的搜索应用名 |
$dataCollectionName | string | 数据采集名称,开通时控制台会返回该名称 |
$dataCollectionType | string | 数据采集类型:BEHAVIOR |
Push 推送采集数据 PHP Demo
<?php
require_once("Config.inc.php");
use OpenSearch\Client\DataCollectionClient;
use OpenSearch\Generated\DataCollection\Command;
$searchAppName = "opensearch_app_name";
$dataCollectionName = "opened_data_collection_name";
$dataCollectionType = "BEHAVIOR";
$docs = json_encode(array(
[
"cmd" => Command::$__names[Command::ADD],
"fields" => [
// 用户唯一标识
"user_id" => "1120021255",
// 业务侧用于区分不同业务的数值ID 对应一个开放搜索应用
"biz_id" => 1365378,
// 搜索结果中返回的request_id的值,原样回传即可
"rn" => "156516585419723283227314",
// 如果是来自开放搜索的结果,该字段值设置为Alibaba
"trace_id" => "Alibaba",
// 搜索结果中返回的ops_request_misc的值,原样回传即可
"trace_info" => "%7B%22request%5Fid%22%3A%22156516585419723283227314%22%2C%22scm%22%3A%2220140713.120006678..%22%7D",
// 开放搜索应用中主表主键值
"item_id" => "2223",
// item类型为 物品、商品
"item_type" => "goods",
// 点击类行为数据
"bhv_type" => "click",
// 行为发生的秒级时间戳
"bhv_time" => "1566475047"
]
]
));
// 创建DataCollectionClient对象,并以OpenSearchClient对象作为构造参数
$dataCollectionClient = new DataCollectionClient($client);
$ret = $dataCollectionClient->push($docs, $searchAppName, $dataCollectionName, $dataCollectionType);
print_r(json_decode($ret->result, true));
Commit 推送采集数据 PHP Demo
<?php
require_once("Config.inc.php");
use OpenSearch\Client\DataCollectionClient;
use OpenSearch\Generated\DataCollection\Command;
$searchAppName = "opensearch_app_name";
$dataCollectionName = "opened_data_collection_name";
$dataCollectionType = "BEHAVIOR";
// 创建DataCollectionClient对象,并以OpenSearchClient对象作为构造参数
$dataCollectionClient = new DataCollectionClient($client);
// 增加一条文档
// 这条文档只是增加到 SDK Client buffer中,没有正式提交到服务端;只有调用了 commit 方法才会被提交到服务端。
// 可以多次调用 add,然后调用commit() 统一提交。
$dataCollectionClient->add([
// 用户唯一标识
"user_id" => "1120021255",
// 业务侧用于区分不同业务的数值ID 对应一个开放搜索应用
"biz_id" => 1365378,
// 搜索结果中返回的request_id的值,原样回传即可
"rn" => "156516585419723283227314",
// 如果是来自开放搜索的结果,该字段值设置为Alibaba
"trace_id" => "Alibaba",
// 搜索结果中返回的ops_request_misc的值,原样回传即可
"trace_info" => "%7B%22request%5Fid%22%3A%22156516585419723283227314%22%2C%22scm%22%3A%2220140713.120006678..%22%7D",
// 开放搜索应用中主表主键值
"item_id" => "2223",
// item类型为 物品、商品
"item_type" => "goods",
// 点击类行为数据
"bhv_type" => "click",
// 行为发生的秒级时间戳
"bhv_time" => "1566475047"
]);
$ret = $dataCollectionClient->commit($searchAppName, $dataCollectionName, $dataCollectionType);
print_r(json_decode($ret->result, true));
Push 推送采集数据 Java Demo
package com.aliyun.opensearch.demo;
import com.aliyun.opensearch.DataCollectionClient;
import com.aliyun.opensearch.OpenSearchClient;
import com.aliyun.opensearch.sdk.generated.OpenSearch;
import com.aliyun.opensearch.sdk.generated.commons.OpenSearchResult;
public class PushDataCollectionDoc {
private static String accesskey = "your ak";
private static String secret = "your secret";
private static String host = "your host";
private static String searchAppName = "opensearch_app_name";
private static String dataCollectionName = "opened_data_collection_name";
private static String dataCollectionType = "BEHAVIOR";
public static void main(String[] args) {
//创建并构造OpenSearch对象
OpenSearch opensearch = new OpenSearch(accesskey, secret, host);
//创建OpenSearchClient对象,并以OpenSearch对象作为构造参数
OpenSearchClient client = new OpenSearchClient(opensearch);
//创建DataCollectionClient对象,并以OpenSearchClient对象作为构造参数
DataCollectionClient dataCollectionClient = new DataCollectionClient(client);
// 直接推送文档
String docJson = "[{\"cmd\":\"ADD\",\"fields\":{\"user_id\":\"1120021255\","+
"\"biz_id\":1365378,\"rn\":\"156516585419723283227314\","+
"\"trace_id\":\"Alibaba\","+
"\"trace_info\":\"%7B%22request%5Fid%22%3A%22156516585419723283227314%22%2C%22scm%22%3A%2220140713.120006678..%22%7D\","+
"\"item_id\":\"id\",\"item_type\":\"goods\","+
"\"bhv_type\":\"click\",\"bhv_time\":\"1566475047\"}}]";
try {
OpenSearchResult openSearchResult = dataCollectionClient.push(docJson,
searchAppName, dataCollectionName,
dataCollectionType);
System.out.println(openSearchResult);
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
return;
}
}
}
Commit 推送采集数据 Java Demo
package com.aliyun.opensearch.demo;
import com.aliyun.opensearch.DataCollectionClient;
import com.aliyun.opensearch.OpenSearchClient;
import com.aliyun.opensearch.sdk.generated.OpenSearch;
import com.aliyun.opensearch.sdk.generated.commons.OpenSearchResult;
import java.util.HashMap;
import java.util.Map;
public class PushDataCollectionDoc {
private static String accesskey = "your ak";
private static String secret = "your secret";
private static String host = "your host";
private static String searchAppName = "opensearch_app_name";
private static String dataCollectionName = "opened_data_collection_name";
private static String dataCollectionType = "BEHAVIOR";
public static void main(String[] args) {
//创建并构造OpenSearch对象
OpenSearch opensearch = new OpenSearch(accesskey, secret, host);
//创建OpenSearchClient对象,并以OpenSearch对象作为构造参数
OpenSearchClient client = new OpenSearchClient(opensearch);
//创建DataCollectionClient对象,并以OpenSearchClient对象作为构造参数
DataCollectionClient dataCollectionClient = new DataCollectionClient(client);
Map<String, Object> fields = new HashMap<String, Object>();
// 用户唯一标识
fields.put("user_id", "1120021255");
// 业务侧用于区分不同业务的数值ID 对应一个开放搜索应用
fields.put("biz_id", 1365378);
// 搜索结果中返回的request_id的值,原样回传即可
fields.put("rn", "1564455556323223680397827");
// 如果是来自开放搜索的结果,该字段值设置为Alibaba
fields.put("trace_id", "Alibaba");
// 搜索结果中返回的ops_request_misc的值,原样回传即可
fields.put("trace_info", "%7B%22request%5Fid%22%3A%22156516585419723283227314%22%2C%22scm%22%3A%2220140713.120006678..%22%7D");
// 开放搜索应用中主表主键值
fields.put("item_id", "2223");
// item类型为 物品、商品
fields.put("item_type", "goods");
// 点击类行为数据
fields.put("bhv_type", "click");
// 行为发生的秒级时间戳
fields.put("bhv_time", "1566475047");
//增加一条文档
//这条文档只是增加到 SDK Client buffer中,没有正式提交到服务端;只有调用了 commit 方法才会被提交到服务端。
//可以多次调用 add,然后调用commit() 统一提交。
dataCollectionClient.add(fields);
try {
OpenSearchResult openSearchResult = dataCollectionClient.commit(searchAppName, dataCollectionName, dataCollectionType);
System.out.println(openSearchResult);
} catch (Exception e) {
e.printStackTrace();
return;
}
}
}