python/alibabacloud_ha3engine/models.py (502 lines of code) (raw):

# -*- coding: utf-8 -*- # This file is auto-generated, don't edit it. Thanks. from Tea.model import TeaModel from typing import Dict, List, Any class Config(TeaModel): def __init__( self, endpoint: str = None, instance_id: str = None, protocol: str = None, access_user_name: str = None, access_pass_word: str = None, user_agent: str = None, ): self.endpoint = endpoint self.instance_id = instance_id self.protocol = protocol self.access_user_name = access_user_name self.access_pass_word = access_pass_word self.user_agent = user_agent def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.endpoint is not None: result['endpoint'] = self.endpoint if self.instance_id is not None: result['instanceId'] = self.instance_id if self.protocol is not None: result['protocol'] = self.protocol if self.access_user_name is not None: result['accessUserName'] = self.access_user_name if self.access_pass_word is not None: result['accessPassWord'] = self.access_pass_word if self.user_agent is not None: result['userAgent'] = self.user_agent return result def from_map(self, m: dict = None): m = m or dict() if m.get('endpoint') is not None: self.endpoint = m.get('endpoint') if m.get('instanceId') is not None: self.instance_id = m.get('instanceId') if m.get('protocol') is not None: self.protocol = m.get('protocol') if m.get('accessUserName') is not None: self.access_user_name = m.get('accessUserName') if m.get('accessPassWord') is not None: self.access_pass_word = m.get('accessPassWord') if m.get('userAgent') is not None: self.user_agent = m.get('userAgent') return self class HaQueryconfigClause(TeaModel): def __init__( self, start: str = None, hit: str = None, format: str = None, custom_config: Dict[str, str] = None, ): # 从结果集中第 start_offset 开始返回 document self.start = start # 返回文档的最大数量 self.hit = hit # 指定用户返回数据格式. 支持 xml 和 json 类型数据返回 self.format = format # 扩展 配置参数 self.custom_config = custom_config def validate(self): self.validate_required(self.start, 'start') self.validate_required(self.hit, 'hit') self.validate_required(self.format, 'format') def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.start is not None: result['start'] = self.start if self.hit is not None: result['hit'] = self.hit if self.format is not None: result['format'] = self.format if self.custom_config is not None: result['customConfig'] = self.custom_config return result def from_map(self, m: dict = None): m = m or dict() if m.get('start') is not None: self.start = m.get('start') if m.get('hit') is not None: self.hit = m.get('hit') if m.get('format') is not None: self.format = m.get('format') if m.get('customConfig') is not None: self.custom_config = m.get('customConfig') return self class HaQuerySortClause(TeaModel): def __init__( self, sort_key: str = None, sort_order: str = None, ): # field为要进行统计的字段名,必须配置属性字段 self.sort_key = sort_key # +为按字段值升序排序,-为降序排序 self.sort_order = sort_order def validate(self): self.validate_required(self.sort_key, 'sort_key') self.validate_required(self.sort_order, 'sort_order') def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.sort_key is not None: result['sortKey'] = self.sort_key if self.sort_order is not None: result['sortOrder'] = self.sort_order return result def from_map(self, m: dict = None): m = m or dict() if m.get('sortKey') is not None: self.sort_key = m.get('sortKey') if m.get('sortOrder') is not None: self.sort_order = m.get('sortOrder') return self class HaQueryAggregateClause(TeaModel): def __init__( self, group_key: str = None, agg_fun: str = None, range: str = None, max_group: str = None, agg_filter: str = None, agg_sampler_thres_hold: str = None, agg_sampler_step: str = None, ): # field为要进行统计的字段名,必须配置属性字段 self.group_key = group_key # func可以为count()、sum(id)、max(id)、min(id)四种系统函数,含义分别为:文档个数、对id字段求和、取id字段最大值、取id字段最小值;支持同时进行多个函数的统计,中间用英文井号(#)分隔;sum、max、min的内容支持基本的算术运算 self.agg_fun = agg_fun # 表示分段统计,可用于分布统计,只支持单个range参数。 self.range = range # 最大返回组数 self.max_group = max_group # 表示仅统计满足特定条件的文档 self.agg_filter = agg_filter # ,抽样统计的阈值。表示该值之前的文档会依次统计,该值之后的文档会进行抽样统计; self.agg_sampler_thres_hold = agg_sampler_thres_hold # 抽样统计的步长,表示从agg_sampler_threshold后的文档将间隔agg_sampler_step个文档统计一次。对于sum和count类型的统计会把阈值后的抽样统计结果最后乘以步长进行估算,估算的结果再加上阈值前的统计结果就是最后的统计结果。 self.agg_sampler_step = agg_sampler_step def validate(self): self.validate_required(self.group_key, 'group_key') self.validate_required(self.agg_fun, 'agg_fun') def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.group_key is not None: result['group_key'] = self.group_key if self.agg_fun is not None: result['agg_fun'] = self.agg_fun if self.range is not None: result['range'] = self.range if self.max_group is not None: result['max_group'] = self.max_group if self.agg_filter is not None: result['agg_filter'] = self.agg_filter if self.agg_sampler_thres_hold is not None: result['agg_sampler_threshold'] = self.agg_sampler_thres_hold if self.agg_sampler_step is not None: result['agg_sampler_step'] = self.agg_sampler_step return result def from_map(self, m: dict = None): m = m or dict() if m.get('group_key') is not None: self.group_key = m.get('group_key') if m.get('agg_fun') is not None: self.agg_fun = m.get('agg_fun') if m.get('range') is not None: self.range = m.get('range') if m.get('max_group') is not None: self.max_group = m.get('max_group') if m.get('agg_filter') is not None: self.agg_filter = m.get('agg_filter') if m.get('agg_sampler_threshold') is not None: self.agg_sampler_thres_hold = m.get('agg_sampler_threshold') if m.get('agg_sampler_step') is not None: self.agg_sampler_step = m.get('agg_sampler_step') return self class HaQueryDistinctClause(TeaModel): def __init__( self, dist_key: str = None, dist_count: str = None, dist_times: str = None, reserved: str = None, dist_filter: str = None, update_total_hit: str = None, grade: str = None, ): # 要打散的字段 self.dist_key = dist_key # 一轮抽取的文档数 self.dist_count = dist_count # 抽取的轮数 self.dist_times = dist_times # 是否保留抽取之后剩余的文档。如果为false,为不保留,则搜索结果的total(总匹配结果数)会不准确。 self.reserved = reserved # 过滤条件,被过滤的doc不参与distinct,只在后面的排序中,这些被过滤的doc将和被distinct出来的第一组doc一起参与排序。默认是全部参与distinct。 self.dist_filter = dist_filter # 当reserved为false时,设置update_total_hit为true,则最终total_hit会减去被distinct丢弃的数目(不一定准确),为false则不减。 self.update_total_hit = update_total_hit # 指定档位划分阈值,所有的文档将根据档位划分阈值划分成若干档,每个档位中各自根据distinct参数做distinct,可以不指定该参数,默认是所有文档都在同一档。档位的划分按照文档排序时第一维的排序依据的分数进行划分,两个档位阈值之间用 “|” 分开,档位的个数没有限制。例如:1、grade:3.0 :表示根据第一维排序依据的分数分成两档,(< 3.0)的是第一档,(>= 3.0) 的是第二档;2、grade:3.0|5.0 :表示分成三档,(< 3.0)是第一档,(>= 3.0,< 5.0)是第二档,(>= 5.0)是第三档。档位的先后顺序和第一维排序依据的顺序一致,即如果第一维排序依据是降序,则档位也是降序,反之亦然。 self.grade = grade def validate(self): self.validate_required(self.dist_key, 'dist_key') def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.dist_key is not None: result['dist_key'] = self.dist_key if self.dist_count is not None: result['dist_count'] = self.dist_count if self.dist_times is not None: result['dist_times'] = self.dist_times if self.reserved is not None: result['reserved'] = self.reserved if self.dist_filter is not None: result['dist_filter'] = self.dist_filter if self.update_total_hit is not None: result['update_total_hit'] = self.update_total_hit if self.grade is not None: result['grade'] = self.grade return result def from_map(self, m: dict = None): m = m or dict() if m.get('dist_key') is not None: self.dist_key = m.get('dist_key') if m.get('dist_count') is not None: self.dist_count = m.get('dist_count') if m.get('dist_times') is not None: self.dist_times = m.get('dist_times') if m.get('reserved') is not None: self.reserved = m.get('reserved') if m.get('dist_filter') is not None: self.dist_filter = m.get('dist_filter') if m.get('update_total_hit') is not None: self.update_total_hit = m.get('update_total_hit') if m.get('grade') is not None: self.grade = m.get('grade') return self class HaQuery(TeaModel): def __init__( self, query: str = None, cluster: str = None, config: HaQueryconfigClause = None, filter: str = None, kvpairs: Dict[str, str] = None, sort: List[HaQuerySortClause] = None, aggregate: List[HaQueryAggregateClause] = None, distinct: List[HaQueryDistinctClause] = None, custom_query: Dict[str, str] = None, ): # 搜索主体,不能为空.并且可以指定多个查询条件及其之间的关系. self.query = query # cluster部分用于指定要查询的集群的名字。它不仅可以同时指定多个集群,还可以指定到集群中的哪些partition获取结果。 self.cluster = cluster # config部分可以指定查询结果的起始位置、返回结果的数量、展现结果的格式、参与精排表达式文档个数等。 self.config = config # 过滤功能支持用户根据查询条件,筛选出用户感兴趣的文档。会在通过query子句查找到的文档进行进一步的过滤,以返回最终所需结果。 self.filter = filter # 为便于通过查询语句传递信息给具体的特征函数,用户可以在kvpairs子句中对排序表达式中的可变部分进行参数定义。 self.kvpairs = kvpairs # 用户可以通过查询语句控制结果的排序方式,包括指定排序的字段和升降序。field为要排序的字段,+为按字段值升序排序,-为降序排序 self.sort = sort # 一个关键词查询后可能会找到数以万计的文档,用户不太可能浏览所有的文档来获取自己需要的信息,有些情况下用户感兴趣的可能是一些统计的信息。 self.aggregate = aggregate # 打散子句可以在一定程度上保证展示结果的多样性,以提升用户体验。如一次查询可以查出很多的文档,但是如果某个用户的多个文档分值都比较高,则都排在了前面,导致一页中所展示的结果几乎都属于同一用户,这样既不利于结果展示也不利于用户体验。对此,打散子句可以对每个用户的文档进行抽取,使得每个用户都有展示文档的机会。 self.distinct = distinct # 扩展 配置参数 self.custom_query = custom_query def validate(self): self.validate_required(self.query, 'query') self.validate_required(self.config, 'config') if self.config: self.config.validate() if self.sort: for k in self.sort: if k: k.validate() if self.aggregate: for k in self.aggregate: if k: k.validate() if self.distinct: for k in self.distinct: if k: k.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.query is not None: result['query'] = self.query if self.cluster is not None: result['cluster'] = self.cluster if self.config is not None: result['config'] = self.config.to_map() if self.filter is not None: result['filter'] = self.filter if self.kvpairs is not None: result['kvpairs'] = self.kvpairs result['sort'] = [] if self.sort is not None: for k in self.sort: result['sort'].append(k.to_map() if k else None) result['aggregate'] = [] if self.aggregate is not None: for k in self.aggregate: result['aggregate'].append(k.to_map() if k else None) result['distinct'] = [] if self.distinct is not None: for k in self.distinct: result['distinct'].append(k.to_map() if k else None) if self.custom_query is not None: result['customConfig'] = self.custom_query return result def from_map(self, m: dict = None): m = m or dict() if m.get('query') is not None: self.query = m.get('query') if m.get('cluster') is not None: self.cluster = m.get('cluster') if m.get('config') is not None: temp_model = HaQueryconfigClause() self.config = temp_model.from_map(m['config']) if m.get('filter') is not None: self.filter = m.get('filter') if m.get('kvpairs') is not None: self.kvpairs = m.get('kvpairs') self.sort = [] if m.get('sort') is not None: for k in m.get('sort'): temp_model = HaQuerySortClause() self.sort.append(temp_model.from_map(k)) self.aggregate = [] if m.get('aggregate') is not None: for k in m.get('aggregate'): temp_model = HaQueryAggregateClause() self.aggregate.append(temp_model.from_map(k)) self.distinct = [] if m.get('distinct') is not None: for k in m.get('distinct'): temp_model = HaQueryDistinctClause() self.distinct.append(temp_model.from_map(k)) if m.get('customConfig') is not None: self.custom_query = m.get('customConfig') return self class SQLQuery(TeaModel): def __init__( self, query: str = None, kvpairs: Dict[str, str] = None, ): # 搜索主体,不能为空. self.query = query # cluster部分用于指定要查询的集群的名字。它不仅可以同时指定多个集群,还可以指定到集群中的哪些partition获取结果。 self.kvpairs = kvpairs def validate(self): self.validate_required(self.query, 'query') def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.query is not None: result['query'] = self.query if self.kvpairs is not None: result['kvpairs'] = self.kvpairs return result def from_map(self, m: dict = None): m = m or dict() if m.get('query') is not None: self.query = m.get('query') if m.get('kvpairs') is not None: self.kvpairs = m.get('kvpairs') return self class SearchQuery(TeaModel): def __init__( self, query: str = None, sql: str = None, ): # 适配于 Ha3 类型 query. 参数支持子句关键字请参照文档 self.query = query # 适配于 SQL 类型 query. 参数支持子句关键字请参照文档. self.sql = sql def validate(self): pass def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.query is not None: result['query'] = self.query if self.sql is not None: result['sql'] = self.sql return result def from_map(self, m: dict = None): m = m or dict() if m.get('query') is not None: self.query = m.get('query') if m.get('sql') is not None: self.sql = m.get('sql') return self class SearchRequestModel(TeaModel): def __init__( self, headers: Dict[str, str] = None, query: SearchQuery = None, ): # headers self.headers = headers # query self.query = query def validate(self): self.validate_required(self.query, 'query') if self.query: self.query.validate() def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.query is not None: result['query'] = self.query.to_map() return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('query') is not None: temp_model = SearchQuery() self.query = temp_model.from_map(m['query']) return self class SearchResponseModel(TeaModel): def __init__( self, headers: Dict[str, str] = None, body: str = None, ): # headers self.headers = headers # body self.body = body def validate(self): self.validate_required(self.body, 'body') def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.body is not None: result['body'] = self.body return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('body') is not None: self.body = m.get('body') return self class PushDocumentsRequestModel(TeaModel): def __init__( self, headers: Dict[str, str] = None, body: List[Dict[str, Any]] = None, ): # headers self.headers = headers # body self.body = body def validate(self): self.validate_required(self.body, 'body') def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.body is not None: result['body'] = self.body return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('body') is not None: self.body = m.get('body') return self class PushDocumentsResponseModel(TeaModel): def __init__( self, headers: Dict[str, str] = None, body: str = None, ): # headers self.headers = headers # body self.body = body def validate(self): self.validate_required(self.body, 'body') def to_map(self): _map = super().to_map() if _map is not None: return _map result = dict() if self.headers is not None: result['headers'] = self.headers if self.body is not None: result['body'] = self.body return result def from_map(self, m: dict = None): m = m or dict() if m.get('headers') is not None: self.headers = m.get('headers') if m.get('body') is not None: self.body = m.get('body') return self