client/client.go (818 lines of code) (raw):
// This file is auto-generated, don't edit it. Thanks.
package client
import (
encodeutil "github.com/alibabacloud-go/darabonba-encode-util/client"
map_ "github.com/alibabacloud-go/darabonba-map/client"
string_ "github.com/alibabacloud-go/darabonba-string/client"
util "github.com/alibabacloud-go/tea-utils/service"
"github.com/alibabacloud-go/tea/tea"
)
type Config struct {
Endpoint *string `json:"endpoint,omitempty" xml:"endpoint,omitempty"`
InstanceId *string `json:"instanceId,omitempty" xml:"instanceId,omitempty"`
Protocol *string `json:"protocol,omitempty" xml:"protocol,omitempty"`
AccessUserName *string `json:"accessUserName,omitempty" xml:"accessUserName,omitempty"`
AccessPassWord *string `json:"accessPassWord,omitempty" xml:"accessPassWord,omitempty"`
UserAgent *string `json:"userAgent,omitempty" xml:"userAgent,omitempty"`
}
func (s Config) String() string {
return tea.Prettify(s)
}
func (s Config) GoString() string {
return s.String()
}
func (s *Config) SetEndpoint(v string) *Config {
s.Endpoint = &v
return s
}
func (s *Config) SetInstanceId(v string) *Config {
s.InstanceId = &v
return s
}
func (s *Config) SetProtocol(v string) *Config {
s.Protocol = &v
return s
}
func (s *Config) SetAccessUserName(v string) *Config {
s.AccessUserName = &v
return s
}
func (s *Config) SetAccessPassWord(v string) *Config {
s.AccessPassWord = &v
return s
}
func (s *Config) SetUserAgent(v string) *Config {
s.UserAgent = &v
return s
}
type HaQuery struct {
// 搜索主体,不能为空.并且可以指定多个查询条件及其之间的关系.
Query *string `json:"query,omitempty" xml:"query,omitempty" require:"true"`
// cluster部分用于指定要查询的集群的名字。它不仅可以同时指定多个集群,还可以指定到集群中的哪些partition获取结果。
Cluster *string `json:"cluster,omitempty" xml:"cluster,omitempty"`
// config部分可以指定查询结果的起始位置、返回结果的数量、展现结果的格式、参与精排表达式文档个数等。
Config *HaQueryconfigClause `json:"config,omitempty" xml:"config,omitempty" require:"true"`
// 过滤功能支持用户根据查询条件,筛选出用户感兴趣的文档。会在通过query子句查找到的文档进行进一步的过滤,以返回最终所需结果。
Filter *string `json:"filter,omitempty" xml:"filter,omitempty"`
// 为便于通过查询语句传递信息给具体的特征函数,用户可以在kvpairs子句中对排序表达式中的可变部分进行参数定义。
Kvpairs map[string]*string `json:"kvpairs,omitempty" xml:"kvpairs,omitempty"`
// 用户可以通过查询语句控制结果的排序方式,包括指定排序的字段和升降序。field为要排序的字段,+为按字段值升序排序,-为降序排序
Sort []*HaQuerySortClause `json:"sort,omitempty" xml:"sort,omitempty" type:"Repeated"`
// 一个关键词查询后可能会找到数以万计的文档,用户不太可能浏览所有的文档来获取自己需要的信息,有些情况下用户感兴趣的可能是一些统计的信息。
Aggregate []*HaQueryAggregateClause `json:"aggregate,omitempty" xml:"aggregate,omitempty" type:"Repeated"`
// 打散子句可以在一定程度上保证展示结果的多样性,以提升用户体验。如一次查询可以查出很多的文档,但是如果某个用户的多个文档分值都比较高,则都排在了前面,导致一页中所展示的结果几乎都属于同一用户,这样既不利于结果展示也不利于用户体验。对此,打散子句可以对每个用户的文档进行抽取,使得每个用户都有展示文档的机会。
Distinct []*HaQueryDistinctClause `json:"distinct,omitempty" xml:"distinct,omitempty" type:"Repeated"`
// 扩展 配置参数
CustomQuery map[string]*string `json:"customConfig,omitempty" xml:"customConfig,omitempty"`
}
func (s HaQuery) String() string {
return tea.Prettify(s)
}
func (s HaQuery) GoString() string {
return s.String()
}
func (s *HaQuery) SetQuery(v string) *HaQuery {
s.Query = &v
return s
}
func (s *HaQuery) SetCluster(v string) *HaQuery {
s.Cluster = &v
return s
}
func (s *HaQuery) SetConfig(v *HaQueryconfigClause) *HaQuery {
s.Config = v
return s
}
func (s *HaQuery) SetFilter(v string) *HaQuery {
s.Filter = &v
return s
}
func (s *HaQuery) SetKvpairs(v map[string]*string) *HaQuery {
s.Kvpairs = v
return s
}
func (s *HaQuery) SetSort(v []*HaQuerySortClause) *HaQuery {
s.Sort = v
return s
}
func (s *HaQuery) SetAggregate(v []*HaQueryAggregateClause) *HaQuery {
s.Aggregate = v
return s
}
func (s *HaQuery) SetDistinct(v []*HaQueryDistinctClause) *HaQuery {
s.Distinct = v
return s
}
func (s *HaQuery) SetCustomQuery(v map[string]*string) *HaQuery {
s.CustomQuery = v
return s
}
type HaQueryconfigClause struct {
// 从结果集中第 start_offset 开始返回 document
Start *string `json:"start,omitempty" xml:"start,omitempty" require:"true"`
// 返回文档的最大数量
Hit *string `json:"hit,omitempty" xml:"hit,omitempty" require:"true"`
// 指定用户返回数据格式. 支持 xml 和 json 类型数据返回
Format *string `json:"format,omitempty" xml:"format,omitempty" require:"true"`
// 扩展 配置参数
CustomConfig map[string]*string `json:"customConfig,omitempty" xml:"customConfig,omitempty"`
}
func (s HaQueryconfigClause) String() string {
return tea.Prettify(s)
}
func (s HaQueryconfigClause) GoString() string {
return s.String()
}
func (s *HaQueryconfigClause) SetStart(v string) *HaQueryconfigClause {
s.Start = &v
return s
}
func (s *HaQueryconfigClause) SetHit(v string) *HaQueryconfigClause {
s.Hit = &v
return s
}
func (s *HaQueryconfigClause) SetFormat(v string) *HaQueryconfigClause {
s.Format = &v
return s
}
func (s *HaQueryconfigClause) SetCustomConfig(v map[string]*string) *HaQueryconfigClause {
s.CustomConfig = v
return s
}
type HaQuerySortClause struct {
// field为要进行统计的字段名,必须配置属性字段
SortKey *string `json:"sortKey,omitempty" xml:"sortKey,omitempty" require:"true"`
// +为按字段值升序排序,-为降序排序
SortOrder *string `json:"sortOrder,omitempty" xml:"sortOrder,omitempty" require:"true"`
}
func (s HaQuerySortClause) String() string {
return tea.Prettify(s)
}
func (s HaQuerySortClause) GoString() string {
return s.String()
}
func (s *HaQuerySortClause) SetSortKey(v string) *HaQuerySortClause {
s.SortKey = &v
return s
}
func (s *HaQuerySortClause) SetSortOrder(v string) *HaQuerySortClause {
s.SortOrder = &v
return s
}
type HaQueryAggregateClause struct {
// field为要进行统计的字段名,必须配置属性字段
GroupKey *string `json:"group_key,omitempty" xml:"group_key,omitempty" require:"true"`
// func可以为count()、sum(id)、max(id)、min(id)四种系统函数,含义分别为:文档个数、对id字段求和、取id字段最大值、取id字段最小值;支持同时进行多个函数的统计,中间用英文井号(#)分隔;sum、max、min的内容支持基本的算术运算
AggFun *string `json:"agg_fun,omitempty" xml:"agg_fun,omitempty" require:"true"`
// 表示分段统计,可用于分布统计,只支持单个range参数。
Range *string `json:"range,omitempty" xml:"range,omitempty"`
// 最大返回组数
MaxGroup *string `json:"max_group,omitempty" xml:"max_group,omitempty"`
// 表示仅统计满足特定条件的文档
AggFilter *string `json:"agg_filter,omitempty" xml:"agg_filter,omitempty"`
// ,抽样统计的阈值。表示该值之前的文档会依次统计,该值之后的文档会进行抽样统计;
AggSamplerThresHold *string `json:"agg_sampler_threshold,omitempty" xml:"agg_sampler_threshold,omitempty"`
// 抽样统计的步长,表示从agg_sampler_threshold后的文档将间隔agg_sampler_step个文档统计一次。对于sum和count类型的统计会把阈值后的抽样统计结果最后乘以步长进行估算,估算的结果再加上阈值前的统计结果就是最后的统计结果。
AggSamplerStep *string `json:"agg_sampler_step,omitempty" xml:"agg_sampler_step,omitempty"`
}
func (s HaQueryAggregateClause) String() string {
return tea.Prettify(s)
}
func (s HaQueryAggregateClause) GoString() string {
return s.String()
}
func (s *HaQueryAggregateClause) SetGroupKey(v string) *HaQueryAggregateClause {
s.GroupKey = &v
return s
}
func (s *HaQueryAggregateClause) SetAggFun(v string) *HaQueryAggregateClause {
s.AggFun = &v
return s
}
func (s *HaQueryAggregateClause) SetRange(v string) *HaQueryAggregateClause {
s.Range = &v
return s
}
func (s *HaQueryAggregateClause) SetMaxGroup(v string) *HaQueryAggregateClause {
s.MaxGroup = &v
return s
}
func (s *HaQueryAggregateClause) SetAggFilter(v string) *HaQueryAggregateClause {
s.AggFilter = &v
return s
}
func (s *HaQueryAggregateClause) SetAggSamplerThresHold(v string) *HaQueryAggregateClause {
s.AggSamplerThresHold = &v
return s
}
func (s *HaQueryAggregateClause) SetAggSamplerStep(v string) *HaQueryAggregateClause {
s.AggSamplerStep = &v
return s
}
type HaQueryDistinctClause struct {
// 要打散的字段
DistKey *string `json:"dist_key,omitempty" xml:"dist_key,omitempty" require:"true"`
// 一轮抽取的文档数
DistCount *string `json:"dist_count,omitempty" xml:"dist_count,omitempty"`
// 抽取的轮数
DistTimes *string `json:"dist_times,omitempty" xml:"dist_times,omitempty"`
// 是否保留抽取之后剩余的文档。如果为false,为不保留,则搜索结果的total(总匹配结果数)会不准确。
Reserved *string `json:"reserved,omitempty" xml:"reserved,omitempty"`
// 过滤条件,被过滤的doc不参与distinct,只在后面的排序中,这些被过滤的doc将和被distinct出来的第一组doc一起参与排序。默认是全部参与distinct。
DistFilter *string `json:"dist_filter,omitempty" xml:"dist_filter,omitempty"`
// 当reserved为false时,设置update_total_hit为true,则最终total_hit会减去被distinct丢弃的数目(不一定准确),为false则不减。
UpdateTotalHit *string `json:"update_total_hit,omitempty" xml:"update_total_hit,omitempty"`
// 指定档位划分阈值,所有的文档将根据档位划分阈值划分成若干档,每个档位中各自根据distinct参数做distinct,可以不指定该参数,默认是所有文档都在同一档。档位的划分按照文档排序时第一维的排序依据的分数进行划分,两个档位阈值之间用 “|” 分开,档位的个数没有限制。例如:1、grade:3.0 :表示根据第一维排序依据的分数分成两档,(< 3.0)的是第一档,(>= 3.0) 的是第二档;2、grade:3.0|5.0 :表示分成三档,(< 3.0)是第一档,(>= 3.0,< 5.0)是第二档,(>= 5.0)是第三档。档位的先后顺序和第一维排序依据的顺序一致,即如果第一维排序依据是降序,则档位也是降序,反之亦然。
Grade *string `json:"grade,omitempty" xml:"grade,omitempty"`
}
func (s HaQueryDistinctClause) String() string {
return tea.Prettify(s)
}
func (s HaQueryDistinctClause) GoString() string {
return s.String()
}
func (s *HaQueryDistinctClause) SetDistKey(v string) *HaQueryDistinctClause {
s.DistKey = &v
return s
}
func (s *HaQueryDistinctClause) SetDistCount(v string) *HaQueryDistinctClause {
s.DistCount = &v
return s
}
func (s *HaQueryDistinctClause) SetDistTimes(v string) *HaQueryDistinctClause {
s.DistTimes = &v
return s
}
func (s *HaQueryDistinctClause) SetReserved(v string) *HaQueryDistinctClause {
s.Reserved = &v
return s
}
func (s *HaQueryDistinctClause) SetDistFilter(v string) *HaQueryDistinctClause {
s.DistFilter = &v
return s
}
func (s *HaQueryDistinctClause) SetUpdateTotalHit(v string) *HaQueryDistinctClause {
s.UpdateTotalHit = &v
return s
}
func (s *HaQueryDistinctClause) SetGrade(v string) *HaQueryDistinctClause {
s.Grade = &v
return s
}
type SQLQuery struct {
// 搜索主体,不能为空.
Query *string `json:"query,omitempty" xml:"query,omitempty" require:"true"`
// cluster部分用于指定要查询的集群的名字。它不仅可以同时指定多个集群,还可以指定到集群中的哪些partition获取结果。
Kvpairs map[string]*string `json:"kvpairs,omitempty" xml:"kvpairs,omitempty"`
}
func (s SQLQuery) String() string {
return tea.Prettify(s)
}
func (s SQLQuery) GoString() string {
return s.String()
}
func (s *SQLQuery) SetQuery(v string) *SQLQuery {
s.Query = &v
return s
}
func (s *SQLQuery) SetKvpairs(v map[string]*string) *SQLQuery {
s.Kvpairs = v
return s
}
type SearchQuery struct {
// 适配于 Ha3 类型 query. 参数支持子句关键字请参照文档
Query *string `json:"query,omitempty" xml:"query,omitempty"`
// 适配于 SQL 类型 query. 参数支持子句关键字请参照文档.
Sql *string `json:"sql,omitempty" xml:"sql,omitempty"`
}
func (s SearchQuery) String() string {
return tea.Prettify(s)
}
func (s SearchQuery) GoString() string {
return s.String()
}
func (s *SearchQuery) SetQuery(v string) *SearchQuery {
s.Query = &v
return s
}
func (s *SearchQuery) SetSql(v string) *SearchQuery {
s.Sql = &v
return s
}
type SearchRequestModel struct {
// headers
Headers map[string]*string `json:"headers,omitempty" xml:"headers,omitempty"`
// query
Query *SearchQuery `json:"query,omitempty" xml:"query,omitempty" require:"true"`
}
func (s SearchRequestModel) String() string {
return tea.Prettify(s)
}
func (s SearchRequestModel) GoString() string {
return s.String()
}
func (s *SearchRequestModel) SetHeaders(v map[string]*string) *SearchRequestModel {
s.Headers = v
return s
}
func (s *SearchRequestModel) SetQuery(v *SearchQuery) *SearchRequestModel {
s.Query = v
return s
}
type SearchResponseModel struct {
// headers
Headers map[string]*string `json:"headers,omitempty" xml:"headers,omitempty"`
// body
Body *string `json:"body,omitempty" xml:"body,omitempty" require:"true"`
}
func (s SearchResponseModel) String() string {
return tea.Prettify(s)
}
func (s SearchResponseModel) GoString() string {
return s.String()
}
func (s *SearchResponseModel) SetHeaders(v map[string]*string) *SearchResponseModel {
s.Headers = v
return s
}
func (s *SearchResponseModel) SetBody(v string) *SearchResponseModel {
s.Body = &v
return s
}
type PushDocumentsRequestModel struct {
// headers
Headers map[string]*string `json:"headers,omitempty" xml:"headers,omitempty"`
// body
Body []map[string]interface{} `json:"body,omitempty" xml:"body,omitempty" require:"true" type:"Repeated"`
}
func (s PushDocumentsRequestModel) String() string {
return tea.Prettify(s)
}
func (s PushDocumentsRequestModel) GoString() string {
return s.String()
}
func (s *PushDocumentsRequestModel) SetHeaders(v map[string]*string) *PushDocumentsRequestModel {
s.Headers = v
return s
}
func (s *PushDocumentsRequestModel) SetBody(v []map[string]interface{}) *PushDocumentsRequestModel {
s.Body = v
return s
}
type PushDocumentsResponseModel struct {
// headers
Headers map[string]*string `json:"headers,omitempty" xml:"headers,omitempty"`
// body
Body *string `json:"body,omitempty" xml:"body,omitempty" require:"true"`
}
func (s PushDocumentsResponseModel) String() string {
return tea.Prettify(s)
}
func (s PushDocumentsResponseModel) GoString() string {
return s.String()
}
func (s *PushDocumentsResponseModel) SetHeaders(v map[string]*string) *PushDocumentsResponseModel {
s.Headers = v
return s
}
func (s *PushDocumentsResponseModel) SetBody(v string) *PushDocumentsResponseModel {
s.Body = &v
return s
}
type Client struct {
Endpoint *string
InstanceId *string
Protocol *string
UserAgent *string
Credential *string
Domainsuffix *string
}
func NewClient(config *Config) (*Client, error) {
client := new(Client)
err := client.Init(config)
return client, err
}
func (client *Client) Init(config *Config) (_err error) {
if tea.BoolValue(util.IsUnset(tea.ToMap(config))) {
_err = tea.NewSDKError(map[string]interface{}{
"name": "ParameterMissing",
"message": "'config' can not be unset",
})
return _err
}
client.Credential = client.GetRealmSignStr(config.AccessUserName, config.AccessPassWord)
client.Endpoint = config.Endpoint
client.InstanceId = config.InstanceId
client.Protocol = config.Protocol
client.UserAgent = config.UserAgent
client.Domainsuffix = tea.String("ha.aliyuncs.com")
return nil
}
func (client *Client) _request(method *string, pathname *string, query map[string]interface{}, headers map[string]*string, body interface{}, runtime *util.RuntimeOptions) (_result map[string]interface{}, _err error) {
_err = tea.Validate(runtime)
if _err != nil {
return _result, _err
}
_runtime := map[string]interface{}{
"timeouted": "retry",
"readTimeout": tea.IntValue(runtime.ReadTimeout),
"connectTimeout": tea.IntValue(runtime.ConnectTimeout),
"httpProxy": tea.StringValue(runtime.HttpProxy),
"httpsProxy": tea.StringValue(runtime.HttpsProxy),
"noProxy": tea.StringValue(runtime.NoProxy),
"maxIdleConns": tea.IntValue(runtime.MaxIdleConns),
"retry": map[string]interface{}{
"retryable": tea.BoolValue(runtime.Autoretry),
"maxAttempts": tea.IntValue(util.DefaultNumber(runtime.MaxAttempts, tea.Int(5))),
},
"backoff": map[string]interface{}{
"policy": tea.StringValue(util.DefaultString(runtime.BackoffPolicy, tea.String("no"))),
"period": tea.IntValue(util.DefaultNumber(runtime.BackoffPeriod, tea.Int(1))),
},
"ignoreSSL": tea.BoolValue(runtime.IgnoreSSL),
}
_resp := make(map[string]interface{})
for _retryTimes := 0; tea.BoolValue(tea.AllowRetry(_runtime["retry"], tea.Int(_retryTimes))); _retryTimes++ {
if _retryTimes > 0 {
_backoffTime := tea.GetBackoffTime(_runtime["backoff"], tea.Int(_retryTimes))
if tea.IntValue(_backoffTime) > 0 {
tea.Sleep(_backoffTime)
}
}
_resp, _err = func() (map[string]interface{}, error) {
request_ := tea.NewRequest()
request_.Protocol = util.DefaultString(client.Protocol, tea.String("HTTP"))
request_.Method = method
request_.Pathname = pathname
request_.Headers = tea.Merge(map[string]*string{
"user-agent": client.GetUserAgent(),
"host": util.DefaultString(client.Endpoint, tea.String(tea.StringValue(client.InstanceId)+"."+tea.StringValue(client.Domainsuffix))),
"authorization": tea.String("Basic " + tea.StringValue(client.Credential)),
"content-type": tea.String("application/json; charset=utf-8"),
}, headers)
if !tea.BoolValue(util.IsUnset(query)) {
request_.Query = util.StringifyMapValue(query)
request_.Headers["X-Opensearch-Request-ID"] = util.GetNonce()
}
if !tea.BoolValue(util.IsUnset(body)) {
request_.Headers["X-Opensearch-Swift-Request-ID"] = util.GetNonce()
request_.Body = tea.ToReader(util.ToJSONString(body))
}
response_, _err := tea.DoRequest(request_, _runtime)
if _err != nil {
return _result, _err
}
objStr, _err := util.ReadAsString(response_.Body)
if _err != nil {
return _result, _err
}
if tea.BoolValue(util.Is4xx(response_.StatusCode)) || tea.BoolValue(util.Is5xx(response_.StatusCode)) {
var rawMsg interface{}
_, tryErr := func() (_r map[string]interface{}, _e error) {
defer func() {
if r := tea.Recover(recover()); r != nil {
_e = r
}
}()
rawMsg = util.ParseJSON(objStr)
return nil, nil
}()
if tryErr != nil {
var err = &tea.SDKError{}
if _t, ok := tryErr.(*tea.SDKError); ok {
err = _t
} else {
err.Message = tea.String(tryErr.Error())
}
rawMsg = objStr
}
rawMap := map[string]interface{}{
"errors": rawMsg,
}
_err = tea.NewSDKError(map[string]interface{}{
"message": tea.StringValue(response_.StatusMessage),
"data": rawMap,
"code": tea.IntValue(response_.StatusCode),
})
return _result, _err
}
if tea.BoolValue(util.Empty(objStr)) {
rawbodyMap := map[string]interface{}{
"status": tea.StringValue(response_.StatusMessage),
"code": tea.IntValue(response_.StatusCode),
}
_result = make(map[string]interface{})
_err = tea.Convert(map[string]interface{}{
"body": tea.StringValue(util.ToJSONString(rawbodyMap)),
"headers": response_.Headers,
}, &_result)
return _result, _err
}
_result = make(map[string]interface{})
_err = tea.Convert(map[string]interface{}{
"body": tea.StringValue(objStr),
"headers": response_.Headers,
}, &_result)
return _result, _err
}()
if !tea.BoolValue(tea.Retryable(_err)) {
break
}
}
return _resp, _err
}
/**
* 设置Client UA 配置.
*/
func (client *Client) SetUserAgent(userAgent *string) {
client.UserAgent = userAgent
}
/**
* 添加Client UA 配置.
*/
func (client *Client) AppendUserAgent(userAgent *string) {
client.UserAgent = tea.String(tea.StringValue(client.UserAgent) + " " + tea.StringValue(userAgent))
}
/**
* 获取Client 配置 UA 配置.
*/
func (client *Client) GetUserAgent() (_result *string) {
userAgent := util.GetUserAgent(client.UserAgent)
_result = userAgent
return _result
}
/**
* 计算用户请求识别特征, 遵循 Basic Auth 生成规范.
*/
func (client *Client) GetRealmSignStr(accessUserName *string, accessPassWord *string) (_result *string) {
accessUserNameStr := string_.Trim(accessUserName)
accessPassWordStr := string_.Trim(accessPassWord)
realmStr := tea.String(tea.StringValue(accessUserNameStr) + ":" + tea.StringValue(accessPassWordStr))
_body := encodeutil.Base64EncodeToString(string_.ToBytes(realmStr, tea.String("UTF-8")))
_result = _body
return _result
}
func (client *Client) BuildHaSearchQuery(haquery *HaQuery) (_result *string, _err error) {
if tea.BoolValue(util.IsUnset(haquery.Query)) {
_err = tea.NewSDKError(map[string]interface{}{
"name": "ParameterMissing",
"message": "'HaQuery.query' can not be unset",
})
return _result, _err
}
tempString := tea.String("query=" + tea.StringValue(haquery.Query))
configStr, _err := client.BuildHaQueryconfigClauseStr(haquery.Config)
if _err != nil {
return _result, _err
}
tempString = tea.String(tea.StringValue(tempString) + "&&cluster=" + tea.StringValue(util.DefaultString(haquery.Cluster, tea.String("general"))))
tempString = tea.String(tea.StringValue(tempString) + "&&config=" + tea.StringValue(configStr))
if !tea.BoolValue(util.IsUnset(haquery.Filter)) {
filterStr := haquery.Filter
if !tea.BoolValue(util.Empty(filterStr)) {
fieldValueTrimed := string_.Trim(filterStr)
tempString = tea.String(tea.StringValue(tempString) + "&&filter=" + tea.StringValue(fieldValueTrimed))
}
}
if !tea.BoolValue(util.IsUnset(haquery.CustomQuery)) {
for _, keyField := range map_.KeySet(haquery.CustomQuery) {
fieldValue := haquery.CustomQuery[tea.StringValue(keyField)]
if !tea.BoolValue(util.Empty(fieldValue)) {
fieldValueTrimed := string_.Trim(fieldValue)
keyFieldTrimed := string_.Trim(keyField)
tempString = tea.String(tea.StringValue(tempString) + "&&" + tea.StringValue(keyFieldTrimed) + "=" + tea.StringValue(fieldValueTrimed))
}
}
}
if !tea.BoolValue(util.IsUnset(haquery.Sort)) {
sortStr := client.BuildHaQuerySortClauseStr(haquery.Sort)
if !tea.BoolValue(util.Empty(sortStr)) {
tempString = tea.String(tea.StringValue(tempString) + "&&sort=" + tea.StringValue(sortStr))
}
}
if !tea.BoolValue(util.IsUnset(haquery.Aggregate)) {
aggregateClauseStr, _err := client.BuildHaQueryAggregateClauseStr(haquery.Aggregate)
if _err != nil {
return _result, _err
}
if !tea.BoolValue(util.Empty(aggregateClauseStr)) {
tempString = tea.String(tea.StringValue(tempString) + "&&aggregate=" + tea.StringValue(aggregateClauseStr))
}
}
if !tea.BoolValue(util.IsUnset(haquery.Distinct)) {
distinctClauseStr, _err := client.BuildHaQueryDistinctClauseStr(haquery.Distinct)
if _err != nil {
return _result, _err
}
if !tea.BoolValue(util.Empty(distinctClauseStr)) {
tempString = tea.String(tea.StringValue(tempString) + "&&distinct=" + tea.StringValue(distinctClauseStr))
}
}
kvpairs := client.BuildSearcKvPairClauseStr(haquery.Kvpairs)
if !tea.BoolValue(util.Empty(kvpairs)) {
tempString = tea.String(tea.StringValue(tempString) + "&&kvpairs=" + tea.StringValue(kvpairs))
}
_result = tempString
return _result, _err
}
func (client *Client) BuildHaQueryAggregateClauseStr(Clause []*HaQueryAggregateClause) (_result *string, _err error) {
_err = nil
tempClauseString := tea.String("")
for _, AggregateClause := range Clause {
tempAggregateClauseString := tea.String("")
if tea.BoolValue(util.IsUnset(AggregateClause.GroupKey)) || tea.BoolValue(util.IsUnset(AggregateClause.AggFun)) {
_err := tea.NewSDKError(map[string]interface{}{
"name": "ParameterMissing",
"message": "'HaQueryAggregateClause.groupKey/aggFun' can not be unset",
})
return _result, _err
}
if !tea.BoolValue(util.Empty(AggregateClause.GroupKey)) && !tea.BoolValue(util.Empty(AggregateClause.AggFun)) {
groupKeyTrimed := string_.Trim(AggregateClause.GroupKey)
aggFunTrimed := string_.Trim(AggregateClause.AggFun)
tempAggregateClauseString = tea.String("group_key:" + tea.StringValue(groupKeyTrimed) + ",agg_fun:" + tea.StringValue(aggFunTrimed))
}
if !tea.BoolValue(util.Empty(AggregateClause.Range)) {
rangeTrimed := string_.Trim(AggregateClause.Range)
tempAggregateClauseString = tea.String(tea.StringValue(tempAggregateClauseString) + ",range:" + tea.StringValue(rangeTrimed))
}
if !tea.BoolValue(util.Empty(AggregateClause.MaxGroup)) {
maxGroupTrimed := string_.Trim(AggregateClause.MaxGroup)
tempAggregateClauseString = tea.String(tea.StringValue(tempAggregateClauseString) + ",max_group:" + tea.StringValue(maxGroupTrimed))
}
if !tea.BoolValue(util.Empty(AggregateClause.AggFilter)) {
aggFilterTrimed := string_.Trim(AggregateClause.AggFilter)
tempAggregateClauseString = tea.String(tea.StringValue(tempAggregateClauseString) + ",agg_filter:" + tea.StringValue(aggFilterTrimed))
}
if !tea.BoolValue(util.Empty(AggregateClause.AggSamplerThresHold)) {
aggSamplerThresHoldTrimed := string_.Trim(AggregateClause.AggSamplerThresHold)
tempAggregateClauseString = tea.String(tea.StringValue(tempAggregateClauseString) + ",agg_sampler_threshold:" + tea.StringValue(aggSamplerThresHoldTrimed))
}
if !tea.BoolValue(util.Empty(AggregateClause.AggSamplerStep)) {
aggSamplerStepTrimed := string_.Trim(AggregateClause.AggSamplerStep)
tempAggregateClauseString = tea.String(tea.StringValue(tempAggregateClauseString) + ",agg_sampler_step:" + tea.StringValue(aggSamplerStepTrimed))
}
if !tea.BoolValue(util.Empty(tempClauseString)) {
tempClauseString = tea.String(tea.StringValue(tempClauseString) + ";" + tea.StringValue(tempAggregateClauseString))
} else {
tempClauseString = tea.String(tea.StringValue(tempAggregateClauseString))
}
}
_result = tempClauseString
return _result, _err
}
func (client *Client) BuildHaQueryDistinctClauseStr(Clause []*HaQueryDistinctClause) (_result *string, _err error) {
tempClauseString := tea.String("")
_err = nil
for _, DistinctClause := range Clause {
tempDistinctClauseString := tea.String("")
if tea.BoolValue(util.IsUnset(DistinctClause.DistKey)) {
_err = tea.NewSDKError(map[string]interface{}{
"name": "ParameterMissing",
"message": "'HaQueryDistinctClause.distKey' can not be unset",
})
return _result, _err
}
if !tea.BoolValue(util.Empty(DistinctClause.DistKey)) {
distKeyTrimed := string_.Trim(DistinctClause.DistKey)
tempDistinctClauseString = tea.String("dist_key:" + tea.StringValue(distKeyTrimed))
}
if !tea.BoolValue(util.Empty(DistinctClause.DistCount)) {
distCountTrimed := string_.Trim(DistinctClause.DistCount)
tempDistinctClauseString = tea.String(tea.StringValue(tempDistinctClauseString) + ",dist_count:" + tea.StringValue(distCountTrimed))
}
if !tea.BoolValue(util.Empty(DistinctClause.DistTimes)) {
distTimesTrimed := string_.Trim(DistinctClause.DistTimes)
tempDistinctClauseString = tea.String(tea.StringValue(tempDistinctClauseString) + ",dist_times:" + tea.StringValue(distTimesTrimed))
}
if !tea.BoolValue(util.Empty(DistinctClause.Reserved)) {
reservedTrimed := string_.Trim(DistinctClause.Reserved)
tempDistinctClauseString = tea.String(tea.StringValue(tempDistinctClauseString) + ",reserved:" + tea.StringValue(reservedTrimed))
}
if !tea.BoolValue(util.Empty(DistinctClause.DistFilter)) {
distFilterTrimed := string_.Trim(DistinctClause.DistFilter)
tempDistinctClauseString = tea.String(tea.StringValue(tempDistinctClauseString) + ",dist_filter:" + tea.StringValue(distFilterTrimed))
}
if !tea.BoolValue(util.Empty(DistinctClause.UpdateTotalHit)) {
updateTotalHitTrimed := string_.Trim(DistinctClause.UpdateTotalHit)
tempDistinctClauseString = tea.String(tea.StringValue(tempDistinctClauseString) + ",update_total_hit:" + tea.StringValue(updateTotalHitTrimed))
}
if !tea.BoolValue(util.Empty(DistinctClause.Grade)) {
gradeTrimed := string_.Trim(DistinctClause.Grade)
tempDistinctClauseString = tea.String(tea.StringValue(tempDistinctClauseString) + ",grade:" + tea.StringValue(gradeTrimed))
}
if !tea.BoolValue(util.Empty(tempClauseString)) {
tempClauseString = tea.String(tea.StringValue(tempClauseString) + ";" + tea.StringValue(tempDistinctClauseString))
} else {
tempClauseString = tea.String(tea.StringValue(tempDistinctClauseString))
}
}
_result = tempClauseString
return _result, _err
}
func (client *Client) BuildHaQuerySortClauseStr(Clause []*HaQuerySortClause) (_result *string) {
tempClauseString := tea.String("")
for _, SortClause := range Clause {
fieldValueTrimed := string_.Trim(SortClause.SortOrder)
keyFieldTrimed := string_.Trim(SortClause.SortKey)
if tea.BoolValue(util.EqualString(fieldValueTrimed, tea.String("+"))) || tea.BoolValue(util.EqualString(fieldValueTrimed, tea.String("-"))) {
if !tea.BoolValue(util.Empty(fieldValueTrimed)) && !tea.BoolValue(util.Empty(keyFieldTrimed)) {
if tea.BoolValue(util.Empty(tempClauseString)) {
tempClauseString = tea.String(tea.StringValue(fieldValueTrimed) + tea.StringValue(keyFieldTrimed))
} else {
tempClauseString = tea.String(tea.StringValue(tempClauseString) + ";" + tea.StringValue(fieldValueTrimed) + tea.StringValue(keyFieldTrimed))
}
}
}
}
_result = tempClauseString
return _result
}
func (client *Client) BuildHaQueryconfigClauseStr(Clause *HaQueryconfigClause) (_result *string, _err error) {
_err = nil
tempClauseString := tea.String("")
if tea.BoolValue(util.IsUnset(tea.ToMap(Clause))) {
_err = tea.NewSDKError(map[string]interface{}{
"name": "ParameterMissing",
"message": "'HaQueryconfigClause' can not be unset",
})
return _result, _err
}
if tea.BoolValue(util.IsUnset(Clause.Start)) {
Clause.Start = nil
}
if tea.BoolValue(util.IsUnset(Clause.Hit)) {
Clause.Hit = nil
}
if tea.BoolValue(util.IsUnset(Clause.Format)) {
Clause.Format = nil
}
tempClauseString = tea.String("start:" + tea.StringValue(util.DefaultString(Clause.Start, tea.String("0"))))
tempClauseString = tea.String(tea.StringValue(tempClauseString) + ",hit:" + tea.StringValue(util.DefaultString(Clause.Hit, tea.String("10"))))
tempClauseString = tea.String(tea.StringValue(tempClauseString) + ",format:" + tea.StringValue(string_.ToLower(util.DefaultString(Clause.Format, tea.String("json")))))
if !tea.BoolValue(util.IsUnset(Clause.CustomConfig)) {
for _, keyField := range map_.KeySet(Clause.CustomConfig) {
fieldValue := Clause.CustomConfig[tea.StringValue(keyField)]
if !tea.BoolValue(util.Empty(fieldValue)) {
fieldValueTrimed := string_.Trim(fieldValue)
keyFieldTrimed := string_.Trim(keyField)
if !tea.BoolValue(util.Empty(tempClauseString)) {
tempClauseString = tea.String(tea.StringValue(tempClauseString) + "," + tea.StringValue(keyFieldTrimed) + ":" + tea.StringValue(fieldValueTrimed))
} else {
tempClauseString = tea.String(tea.StringValue(keyFieldTrimed) + ":" + tea.StringValue(fieldValueTrimed))
}
}
}
}
_result = tempClauseString
return _result, _err
}
func (client *Client) BuildSQLSearchQuery(sqlquery *SQLQuery) (_result *string, _err error) {
_err = nil
if tea.BoolValue(util.IsUnset(sqlquery.Query)) {
_err = tea.NewSDKError(map[string]interface{}{
"name": "ParameterMissing",
"message": "'SQLQuery.query' can not be unset",
})
return _result, _err
}
tempString := tea.String("query=" + tea.StringValue(sqlquery.Query))
kvpairs := client.BuildSearcKvPairClauseStr(sqlquery.Kvpairs)
if !tea.BoolValue(util.Empty(kvpairs)) {
tempString = tea.String(tea.StringValue(tempString) + "&&kvpair=" + tea.StringValue(kvpairs))
}
_result = tempString
return _result, _err
}
func (client *Client) BuildSearcKvPairClauseStr(kvPair map[string]*string) (_result *string) {
tempkvpairsString := tea.String("__ops_request_id:" + tea.StringValue(util.GetNonce()))
if !tea.BoolValue(util.IsUnset(kvPair)) {
for _, keyField := range map_.KeySet(kvPair) {
fieldValue := kvPair[tea.StringValue(keyField)]
if !tea.BoolValue(util.Empty(fieldValue)) {
fieldValueTrimed := string_.Trim(fieldValue)
keyFieldTrimed := string_.Trim(keyField)
tempkvpairsString = tea.String(tea.StringValue(tempkvpairsString) + "," + tea.StringValue(keyFieldTrimed) + ":" + tea.StringValue(fieldValueTrimed))
}
}
}
_result = tempkvpairsString
return _result
}
/**
* 系统提供了丰富的搜索语法以满足用户各种场景下的搜索需求。
*/
func (client *Client) SearchEx(request *SearchRequestModel, runtime *util.RuntimeOptions) (_result *SearchResponseModel, _err error) {
_result = &SearchResponseModel{}
_body, _err := client._request(tea.String("GET"), tea.String("/query"), tea.ToMap(request.Query), request.Headers, nil, runtime)
if _err != nil {
return _result, _err
}
_err = tea.Convert(_body, &_result)
return _result, _err
}
/**
* 系统提供了丰富的搜索语法以满足用户各种场景下的搜索需求。
*/
func (client *Client) Search(request *SearchRequestModel) (_result *SearchResponseModel, _err error) {
runtime := &util.RuntimeOptions{
ConnectTimeout: tea.Int(5000),
ReadTimeout: tea.Int(10000),
Autoretry: tea.Bool(false),
IgnoreSSL: tea.Bool(false),
MaxIdleConns: tea.Int(50),
}
_result = &SearchResponseModel{}
_body, _err := client.SearchWithOptions(request, runtime)
if _err != nil {
return _result, _err
}
_result = _body
return _result, _err
}
/**
* 系统提供了丰富的搜索语法以满足用户各种场景下的搜索需求,及传入运行时参数.
*/
func (client *Client) SearchWithOptions(request *SearchRequestModel, runtime *util.RuntimeOptions) (_result *SearchResponseModel, _err error) {
_result = &SearchResponseModel{}
_body, _err := client.SearchEx(request, runtime)
if _err != nil {
return _result, _err
}
_result = _body
return _result, _err
}
/**
* 支持新增、更新、删除 等操作,以及对应批量操作
*/
func (client *Client) PushDocumentEx(dataSourceName *string, request *PushDocumentsRequestModel, runtime *util.RuntimeOptions) (_result *PushDocumentsResponseModel, _err error) {
_result = &PushDocumentsResponseModel{}
_body, _err := client._request(tea.String("POST"), tea.String("/update/"+tea.StringValue(dataSourceName)+"/actions/bulk"), nil, request.Headers, request.Body, runtime)
if _err != nil {
return _result, _err
}
_err = tea.Convert(_body, &_result)
return _result, _err
}
/**
* 支持新增、更新、删除 等操作,以及对应批量操作
*/
func (client *Client) PushDocuments(dataSourceName *string, keyField *string, request *PushDocumentsRequestModel) (_result *PushDocumentsResponseModel, _err error) {
runtime := &util.RuntimeOptions{
ConnectTimeout: tea.Int(5000),
ReadTimeout: tea.Int(10000),
Autoretry: tea.Bool(false),
IgnoreSSL: tea.Bool(false),
MaxIdleConns: tea.Int(50),
}
_result = &PushDocumentsResponseModel{}
_body, _err := client.PushDocumentsWithOptions(dataSourceName, keyField, request, runtime)
if _err != nil {
return _result, _err
}
_result = _body
return _result, _err
}
/**
* 支持新增、更新、删除 等操作,以及对应批量操作,及传入运行时参数.
*/
func (client *Client) PushDocumentsWithOptions(dataSourceName *string, keyField *string, request *PushDocumentsRequestModel, runtime *util.RuntimeOptions) (_result *PushDocumentsResponseModel, _err error) {
request.Headers = map[string]*string{
"X-Opensearch-Swift-PK-Field": keyField,
}
_result = &PushDocumentsResponseModel{}
_body, _err := client.PushDocumentEx(dataSourceName, request, runtime)
if _err != nil {
return _result, _err
}
_result = _body
return _result, _err
}