csharp/core/Client.cs (431 lines of code) (raw):
// This file is auto-generated, don't edit it. Thanks.
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Tea;
using Tea.Utils;
using AlibabaCloud.SDK.OpenSearch.Models;
namespace AlibabaCloud.SDK.OpenSearch
{
public class Client
{
protected string _endpoint;
protected string _protocol;
protected string _userAgent;
protected Aliyun.Credentials.Client _credential;
public Client(Config config)
{
if (AlibabaCloud.TeaUtil.Common.IsUnset(config.ToMap()))
{
throw new TeaException(new Dictionary<string, string>
{
{"name", "ParameterMissing"},
{"message", "'config' can not be unset"},
});
}
if (AlibabaCloud.TeaUtil.Common.Empty(config.Type))
{
config.Type = "access_key";
}
Aliyun.Credentials.Models.Config credentialConfig = new Aliyun.Credentials.Models.Config
{
AccessKeyId = config.AccessKeyId,
Type = config.Type,
AccessKeySecret = config.AccessKeySecret,
SecurityToken = config.SecurityToken,
};
this._credential = new Aliyun.Credentials.Client(credentialConfig);
this._endpoint = config.Endpoint;
this._protocol = config.Protocol;
this._userAgent = config.UserAgent;
}
public Dictionary<string, object> _request(string method, string pathname, Dictionary<string, object> query, Dictionary<string, string> headers, object body, AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime)
{
Dictionary<string, object> runtime_ = new Dictionary<string, object>
{
{"timeouted", "retry"},
{"readTimeout", runtime.ReadTimeout},
{"connectTimeout", runtime.ConnectTimeout},
{"httpProxy", runtime.HttpProxy},
{"httpsProxy", runtime.HttpsProxy},
{"noProxy", runtime.NoProxy},
{"maxIdleConns", runtime.MaxIdleConns},
{"retry", new Dictionary<string, object>
{
{"retryable", runtime.Autoretry},
{"maxAttempts", AlibabaCloud.TeaUtil.Common.DefaultNumber(runtime.MaxAttempts, 3)},
}
},
{"backoff", new Dictionary<string, object>
{
{"policy", AlibabaCloud.TeaUtil.Common.DefaultString(runtime.BackoffPolicy, "no")},
{"period", AlibabaCloud.TeaUtil.Common.DefaultNumber(runtime.BackoffPeriod, 1)},
}
},
{"ignoreSSL", runtime.IgnoreSSL},
};
TeaRequest _lastRequest = null;
Exception _lastException = null;
long _now = System.DateTime.Now.Millisecond;
int _retryTimes = 0;
while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
{
if (_retryTimes > 0)
{
int backoffTime = TeaCore.GetBackoffTime((IDictionary) runtime_["backoff"], _retryTimes);
if (backoffTime > 0)
{
TeaCore.Sleep(backoffTime);
}
}
_retryTimes = _retryTimes + 1;
try
{
TeaRequest request_ = new TeaRequest();
string accesskeyId = GetAccessKeyId();
string accessKeySecret = GetAccessKeySecret();
string securityToken = GetSecurityToken();
request_.Protocol = AlibabaCloud.TeaUtil.Common.DefaultString(_protocol, "HTTP");
request_.Method = method;
request_.Pathname = pathname;
request_.Headers = TeaConverter.merge<string>
(
new Dictionary<string, string>()
{
{"user-agent", GetUserAgent()},
{"Date", AlibabaCloud.OpenSearchUtil.Common.GetDate()},
{"host", AlibabaCloud.TeaUtil.Common.DefaultString(_endpoint, "opensearch-cn-hangzhou.aliyuncs.com")},
{"X-Opensearch-Nonce", AlibabaCloud.TeaUtil.Common.GetNonce()},
},
headers
);
if (!AlibabaCloud.TeaUtil.Common.IsUnset(query))
{
request_.Query = AlibabaCloud.TeaUtil.Common.StringifyMapValue(query);
}
if (!AlibabaCloud.TeaUtil.Common.IsUnset(body))
{
string reqBody = AlibabaCloud.TeaUtil.Common.ToJSONString(body);
request_.Headers["Content-MD5"] = AlibabaCloud.OpenSearchUtil.Common.GetContentMD5(reqBody);
request_.Headers["Content-Type"] = "application/json";
request_.Body = TeaCore.BytesReadable(reqBody);
}
// 增加对 STS 鉴权支持.
if (!AlibabaCloud.TeaUtil.Common.IsUnset(securityToken))
{
request_.Headers["X-Opensearch-Security-Token"] = securityToken;
}
request_.Headers["Authorization"] = AlibabaCloud.OpenSearchUtil.Common.GetSignature(request_, accesskeyId, accessKeySecret);
_lastRequest = request_;
TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
string objStr = AlibabaCloud.TeaUtil.Common.ReadAsString(response_.Body);
object obj = AlibabaCloud.TeaUtil.Common.ParseJSON(objStr);
Dictionary<string, object> res = AlibabaCloud.TeaUtil.Common.AssertAsMap(obj);
if (AlibabaCloud.TeaUtil.Common.Is4xx(response_.StatusCode) || AlibabaCloud.TeaUtil.Common.Is5xx(response_.StatusCode))
{
throw new TeaException(new Dictionary<string, object>
{
{"message", response_.StatusMessage},
{"data", res},
{"code", response_.StatusCode}
}
);
}
return new Dictionary<string, object>
{
{"body", res},
{"headers", response_.Headers}
};
}
catch (Exception e)
{
if (TeaCore.IsRetryable(e))
{
_lastException = e;
continue;
}
throw e;
}
}
throw new TeaUnretryableException(_lastRequest, _lastException);
}
public async Task<Dictionary<string, object>> _requestAsync(string method, string pathname, Dictionary<string, object> query, Dictionary<string, string> headers, object body, AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime)
{
Dictionary<string, object> runtime_ = new Dictionary<string, object>
{
{"timeouted", "retry"},
{"readTimeout", runtime.ReadTimeout},
{"connectTimeout", runtime.ConnectTimeout},
{"httpProxy", runtime.HttpProxy},
{"httpsProxy", runtime.HttpsProxy},
{"noProxy", runtime.NoProxy},
{"maxIdleConns", runtime.MaxIdleConns},
{"retry", new Dictionary<string, object>
{
{"retryable", runtime.Autoretry},
{"maxAttempts", AlibabaCloud.TeaUtil.Common.DefaultNumber(runtime.MaxAttempts, 3)},
}},
{"backoff", new Dictionary<string, object>
{
{"policy", AlibabaCloud.TeaUtil.Common.DefaultString(runtime.BackoffPolicy, "no")},
{"period", AlibabaCloud.TeaUtil.Common.DefaultNumber(runtime.BackoffPeriod, 1)},
}},
{"ignoreSSL", runtime.IgnoreSSL},
};
TeaRequest _lastRequest = null;
Exception _lastException = null;
long _now = System.DateTime.Now.Millisecond;
int _retryTimes = 0;
while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
{
if (_retryTimes > 0)
{
int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
if (backoffTime > 0)
{
TeaCore.Sleep(backoffTime);
}
}
_retryTimes = _retryTimes + 1;
try
{
TeaRequest request_ = new TeaRequest();
string accesskeyId = await GetAccessKeyIdAsync();
string accessKeySecret = await GetAccessKeySecretAsync();
request_.Protocol = AlibabaCloud.TeaUtil.Common.DefaultString(_protocol, "HTTP");
request_.Method = method;
request_.Pathname = pathname;
request_.Headers = TeaConverter.merge<string>
(
new Dictionary<string, string>()
{
{"user-agent", GetUserAgent()},
{"Date", AlibabaCloud.OpenSearchUtil.Common.GetDate()},
{"host", AlibabaCloud.TeaUtil.Common.DefaultString(_endpoint, "opensearch-cn-hangzhou.aliyuncs.com")},
{"X-Opensearch-Nonce", AlibabaCloud.TeaUtil.Common.GetNonce()},
},
headers
);
if (!AlibabaCloud.TeaUtil.Common.IsUnset(query))
{
request_.Query = AlibabaCloud.TeaUtil.Common.StringifyMapValue(query);
}
if (!AlibabaCloud.TeaUtil.Common.IsUnset(body))
{
string reqBody = AlibabaCloud.TeaUtil.Common.ToJSONString(body);
request_.Headers["Content-MD5"] = AlibabaCloud.OpenSearchUtil.Common.GetContentMD5(reqBody);
request_.Headers["Content-Type"] = "application/json";
request_.Body = TeaCore.BytesReadable(reqBody);
}
request_.Headers["Authorization"] = AlibabaCloud.OpenSearchUtil.Common.GetSignature(request_, accesskeyId, accessKeySecret);
_lastRequest = request_;
TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
string objStr = AlibabaCloud.TeaUtil.Common.ReadAsString(response_.Body);
if (AlibabaCloud.TeaUtil.Common.Is4xx(response_.StatusCode) || AlibabaCloud.TeaUtil.Common.Is5xx(response_.StatusCode))
{
throw new TeaException(new Dictionary<string, object>
{
{"message", response_.StatusMessage},
{"data", objStr},
{"code", response_.StatusCode},
});
}
object obj = AlibabaCloud.TeaUtil.Common.ParseJSON(objStr);
Dictionary<string, object> res = AlibabaCloud.TeaUtil.Common.AssertAsMap(obj);
return new Dictionary<string, object>
{
{"body", res},
{"headers", response_.Headers},
};
}
catch (Exception e)
{
if (TeaCore.IsRetryable(e))
{
_lastException = e;
continue;
}
throw e;
}
}
throw new TeaUnretryableException(_lastRequest, _lastException);
}
/**
* 系统提供了丰富的搜索语法以满足用户各种场景下的搜索需求。
*/
public SearchResponseModel SearchEx(string appName, SearchRequestModel request, AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime)
{
return TeaModel.ToObject<SearchResponseModel>(_request("GET", "/v3/openapi/apps/" + appName + "/search", request.Query.ToMap(), request.Headers, null, runtime));
}
/**
* 系统提供了丰富的搜索语法以满足用户各种场景下的搜索需求。
*/
public async Task<SearchResponseModel> SearchExAsync(string appName, SearchRequestModel request, AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime)
{
return TeaModel.ToObject<SearchResponseModel>(await _requestAsync("GET", "/v3/openapi/apps/" + appName + "/search", request.Query.ToMap(), request.Headers, null, runtime));
}
/**
* 系统提供了丰富的搜索语法以满足用户各种场景下的搜索需求。
*/
public SearchResponseModel Search(string appName, SearchRequestModel request)
{
AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions
{
ConnectTimeout = 5000,
ReadTimeout = 10000,
Autoretry = false,
IgnoreSSL = false,
MaxIdleConns = 50,
};
return SearchEx(appName, request, runtime);
}
/**
* 系统提供了丰富的搜索语法以满足用户各种场景下的搜索需求。
*/
public async Task<SearchResponseModel> SearchAsync(string appName, SearchRequestModel request)
{
AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions
{
ConnectTimeout = 5000,
ReadTimeout = 10000,
Autoretry = false,
IgnoreSSL = false,
MaxIdleConns = 50,
};
return await SearchExAsync(appName, request, runtime);
}
/**
* 下拉提示是搜索服务的基础功能,在用户输入查询词的过程中,智能推荐候选query,减少用户输入,帮助用户尽快找到想要的内容。
*/
public SuggestResponseModel SuggestEx(string appName, string modelName, SuggestRequestModel request, AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime)
{
return TeaModel.ToObject<SuggestResponseModel>(_request("GET", "/v3/openapi/apps/" + appName + "/suggest/" + modelName + "/search", request.Query.ToMap(), request.Headers, null, runtime));
}
/**
* 下拉提示是搜索服务的基础功能,在用户输入查询词的过程中,智能推荐候选query,减少用户输入,帮助用户尽快找到想要的内容。
*/
public async Task<SuggestResponseModel> SuggestExAsync(string appName, string modelName, SuggestRequestModel request, AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime)
{
return TeaModel.ToObject<SuggestResponseModel>(await _requestAsync("GET", "/v3/openapi/apps/" + appName + "/suggest/" + modelName + "/search", request.Query.ToMap(), request.Headers, null, runtime));
}
/**
* 下拉提示是搜索服务的基础功能,在用户输入查询词的过程中,智能推荐候选query,减少用户输入,帮助用户尽快找到想要的内容。
*/
public SuggestResponseModel Suggest(string appName, string modelName, SuggestRequestModel request)
{
AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions
{
ConnectTimeout = 5000,
ReadTimeout = 10000,
Autoretry = false,
IgnoreSSL = false,
MaxIdleConns = 50,
};
return SuggestEx(appName, modelName, request, runtime);
}
/**
* 下拉提示是搜索服务的基础功能,在用户输入查询词的过程中,智能推荐候选query,减少用户输入,帮助用户尽快找到想要的内容。
*/
public async Task<SuggestResponseModel> SuggestAsync(string appName, string modelName, SuggestRequestModel request)
{
AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions
{
ConnectTimeout = 5000,
ReadTimeout = 10000,
Autoretry = false,
IgnoreSSL = false,
MaxIdleConns = 50,
};
return await SuggestExAsync(appName, modelName, request, runtime);
}
/**
* 支持新增、更新、删除 等操作,以及对应批量操作
*/
public PushDocumentResponseModel PushDocumentEx(string appName, string tableName, PushDocumentRequestModel request, AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime)
{
return TeaModel.ToObject<PushDocumentResponseModel>(_request("POST", "/v3/openapi/apps/" + appName + "/" + tableName + "/actions/bulk", null, request.Headers, request.Body, runtime));
}
/**
* 支持新增、更新、删除 等操作,以及对应批量操作
*/
public async Task<PushDocumentResponseModel> PushDocumentExAsync(string appName, string tableName, PushDocumentRequestModel request, AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime)
{
return TeaModel.ToObject<PushDocumentResponseModel>(await _requestAsync("POST", "/v3/openapi/apps/" + appName + "/" + tableName + "/actions/bulk", null, request.Headers, request.Body, runtime));
}
/**
* 支持新增、更新、删除 等操作,以及对应批量操作
*/
public PushDocumentResponseModel PushDocument(string appName, string tableName, PushDocumentRequestModel request)
{
AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions
{
ConnectTimeout = 5000,
ReadTimeout = 10000,
Autoretry = false,
IgnoreSSL = false,
MaxIdleConns = 50,
};
return PushDocumentEx(appName, tableName, request, runtime);
}
/**
* 支持新增、更新、删除 等操作,以及对应批量操作
*/
public async Task<PushDocumentResponseModel> PushDocumentAsync(string appName, string tableName, PushDocumentRequestModel request)
{
AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions
{
ConnectTimeout = 5000,
ReadTimeout = 10000,
Autoretry = false,
IgnoreSSL = false,
MaxIdleConns = 50,
};
return await PushDocumentExAsync(appName, tableName, request, runtime);
}
/**
* 为了给客户提供更高质量的搜索效果,opensearch目前支持客户通过server端上传点击数据。
*/
public CollectDataResponseModel CollectDataEx(string appName, string collectorName, CollectDataRequestModel request, AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime)
{
return TeaModel.ToObject<CollectDataResponseModel>(_request("POST", "/v3/openapi/app-groups/" + appName + "/data-collections/" + collectorName + "/actions/bulk", null, request.Headers, request.Body, runtime));
}
/**
* 为了给客户提供更高质量的搜索效果,opensearch目前支持客户通过server端上传点击数据。
*/
public async Task<CollectDataResponseModel> CollectDataExAsync(string appName, string collectorName, CollectDataRequestModel request, AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime)
{
return TeaModel.ToObject<CollectDataResponseModel>(await _requestAsync("POST", "/v3/openapi/app-groups/" + appName + "/data-collections/" + collectorName + "/actions/bulk", null, request.Headers, request.Body, runtime));
}
/**
* 为了给客户提供更高质量的搜索效果,opensearch目前支持客户通过server端上传点击数据。
*/
public CollectDataResponseModel CollectData(string appName, string collectorName, CollectDataRequestModel request)
{
AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions
{
ConnectTimeout = 5000,
ReadTimeout = 10000,
Autoretry = false,
IgnoreSSL = false,
MaxIdleConns = 50,
};
return CollectDataEx(appName, collectorName, request, runtime);
}
/**
* 为了给客户提供更高质量的搜索效果,opensearch目前支持客户通过server端上传点击数据。
*/
public async Task<CollectDataResponseModel> CollectDataAsync(string appName, string collectorName, CollectDataRequestModel request)
{
AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions
{
ConnectTimeout = 5000,
ReadTimeout = 10000,
Autoretry = false,
IgnoreSSL = false,
MaxIdleConns = 50,
};
return await CollectDataExAsync(appName, collectorName, request, runtime);
}
public void SetUserAgent(string userAgent)
{
this._userAgent = userAgent;
}
public void AppendUserAgent(string userAgent)
{
this._userAgent = _userAgent + " " + userAgent;
}
public string GetUserAgent()
{
string userAgent = AlibabaCloud.TeaUtil.Common.GetUserAgent(_userAgent);
return userAgent;
}
public string GetAccessKeyId()
{
if (AlibabaCloud.TeaUtil.Common.IsUnset(_credential))
{
return "";
}
string accessKeyId = this._credential.GetAccessKeyId();
return accessKeyId;
}
public async Task<string> GetAccessKeyIdAsync()
{
if (AlibabaCloud.TeaUtil.Common.IsUnset(_credential))
{
return "";
}
string accessKeyId = await this._credential.GetAccessKeyIdAsync();
return accessKeyId;
}
public string GetAccessKeySecret()
{
if (AlibabaCloud.TeaUtil.Common.IsUnset(_credential))
{
return "";
}
string secret = this._credential.GetAccessKeySecret();
return secret;
}
public async Task<string> GetAccessKeySecretAsync()
{
if (AlibabaCloud.TeaUtil.Common.IsUnset(_credential))
{
return "";
}
string secret = await this._credential.GetAccessKeySecretAsync();
return secret;
}
}
}