/* tslint:disable */
/* eslint-disable */
/**
 * Indexea OpenAPI
 * 这是 Indexea 搜索服务平台的 OpenAPI，用于描述平台的所有接口信息，你可以通过这个页面来了解和在线验证平台的所有接口信息。  ### Errors  本 API 使用标准的 HTTP 状态码来指示操作成功或者失败，如果失败将会在 body 中以 JSON 格式提供详细的错误信息，如下所示：  ``` {   \"error\": 404,   \"message\": \"page not found\" } ``` 
 *
 * The version of the OpenAPI document: 1.0.0
 * Contact: indexea.com@gmail.com
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */


import * as runtime from '../runtime';
import type {
  AutoCompleteItem,
  QueryActionBean,
  SearchWord,
} from '../models';
import {
    AutoCompleteItemFromJSON,
    AutoCompleteItemToJSON,
    QueryActionBeanFromJSON,
    QueryActionBeanToJSON,
    SearchWordFromJSON,
    SearchWordToJSON,
} from '../models';

export interface SearchClickRequest {
    widget: string;
    actionId: string;
    docId: string;
    xToken?: string;
    userid?: string;
}

export interface SearchHistoriesRequest {
    widget: string;
    strategy: SearchHistoriesStrategyEnum;
    size: number;
    xToken?: string;
    userid?: string;
    query?: number;
}

export interface SearchLogsRequest {
    app: string;
    indices?: Array<number>;
    scope?: SearchLogsScopeEnum;
    widget?: number;
    query?: number;
    recomm?: number;
    startDate?: Date;
    endDate?: Date;
    from?: number;
    size?: number;
}

export interface SearchQueryClickRequest {
    query: string;
    actionId: string;
    docId: string;
    xToken?: string;
    userid?: string;
}

export interface SearchQueryHistoriesRequest {
    query: string;
    strategy: SearchQueryHistoriesStrategyEnum;
    size: number;
    xToken?: string;
    userid?: string;
}

export interface SearchQueryHotWordsRequest {
    query: string;
    scope: SearchQueryHotWordsScopeEnum;
    count: number;
    xToken?: string;
    userid?: string;
}

export interface SearchQueryRepeatScrollRequest {
    query: string;
    id: string;
    xToken?: string;
    userid?: string;
}

export interface SearchQueryScrollRequest {
    query: string;
    xToken?: string;
    userid?: string;
    size?: number;
    q?: string;
    params?: { [key: string]: string; };
}

export interface SearchQuerySearchRequest {
    query: string;
    xToken?: string;
    userid?: string;
    q?: string;
    from?: number;
    size?: number;
    params?: { [key: string]: string; };
}

export interface SearchWidgetAutoCompleteRequest {
    widget: string;
    q: string;
    size: number;
    xToken?: string;
    userid?: string;
    query?: number;
}

export interface SearchWidgetHotWordsRequest {
    widget: string;
    xToken?: string;
    userid?: string;
    query?: number;
    scope?: SearchWidgetHotWordsScopeEnum;
    count?: number;
}

export interface SearchWidgetSearchRequest {
    widget: string;
    xToken?: string;
    userid?: string;
    original?: string;
    query?: number;
    q?: string;
    from?: number;
    size?: number;
    params?: { [key: string]: string; };
}

/**
 * 
 */
export class SearchApi extends runtime.BaseAPI {

    /**
     * 该接口主要用于记录用户对搜索结果的点击行为
     * 搜索结果点击行为收集
     */
    async searchClickRaw(requestParameters: SearchClickRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<boolean>> {
        if (requestParameters.widget === null || requestParameters.widget === undefined) {
            throw new runtime.RequiredError('widget','Required parameter requestParameters.widget was null or undefined when calling searchClick.');
        }

        if (requestParameters.actionId === null || requestParameters.actionId === undefined) {
            throw new runtime.RequiredError('actionId','Required parameter requestParameters.actionId was null or undefined when calling searchClick.');
        }

        if (requestParameters.docId === null || requestParameters.docId === undefined) {
            throw new runtime.RequiredError('docId','Required parameter requestParameters.docId was null or undefined when calling searchClick.');
        }

        const queryParameters: any = {};

        if (requestParameters.actionId !== undefined) {
            queryParameters['action_id'] = requestParameters.actionId;
        }

        if (requestParameters.docId !== undefined) {
            queryParameters['doc_id'] = requestParameters.docId;
        }

        const headerParameters: runtime.HTTPHeaders = {};

        if (requestParameters.xToken !== undefined && requestParameters.xToken !== null) {
            headerParameters['x-token'] = String(requestParameters.xToken);
        }

        if (requestParameters.userid !== undefined && requestParameters.userid !== null) {
            headerParameters['userid'] = String(requestParameters.userid);
        }

        const response = await this.request({
            path: `/search/widget/{widget}/click`.replace(`{${"widget"}}`, encodeURIComponent(String(requestParameters.widget))),
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.TextApiResponse(response) as any;
    }

    /**
     * 该接口主要用于记录用户对搜索结果的点击行为
     * 搜索结果点击行为收集
     */
    async searchClick(requestParameters: SearchClickRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<boolean> {
        const response = await this.searchClickRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 获取当前搜索用户的最新搜索记录
     */
    async searchHistoriesRaw(requestParameters: SearchHistoriesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Array<string>>> {
        if (requestParameters.widget === null || requestParameters.widget === undefined) {
            throw new runtime.RequiredError('widget','Required parameter requestParameters.widget was null or undefined when calling searchHistories.');
        }

        if (requestParameters.strategy === null || requestParameters.strategy === undefined) {
            throw new runtime.RequiredError('strategy','Required parameter requestParameters.strategy was null or undefined when calling searchHistories.');
        }

        if (requestParameters.size === null || requestParameters.size === undefined) {
            throw new runtime.RequiredError('size','Required parameter requestParameters.size was null or undefined when calling searchHistories.');
        }

        const queryParameters: any = {};

        if (requestParameters.strategy !== undefined) {
            queryParameters['strategy'] = requestParameters.strategy;
        }

        if (requestParameters.query !== undefined) {
            queryParameters['query'] = requestParameters.query;
        }

        if (requestParameters.size !== undefined) {
            queryParameters['size'] = requestParameters.size;
        }

        const headerParameters: runtime.HTTPHeaders = {};

        if (requestParameters.xToken !== undefined && requestParameters.xToken !== null) {
            headerParameters['x-token'] = String(requestParameters.xToken);
        }

        if (requestParameters.userid !== undefined && requestParameters.userid !== null) {
            headerParameters['userid'] = String(requestParameters.userid);
        }

        const response = await this.request({
            path: `/search/widget/{widget}/histories`.replace(`{${"widget"}}`, encodeURIComponent(String(requestParameters.widget))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse<any>(response);
    }

    /**
     * 获取当前搜索用户的最新搜索记录
     */
    async searchHistories(requestParameters: SearchHistoriesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Array<string>> {
        const response = await this.searchHistoriesRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 该接口主要用于获取搜索明细
     * 获取搜索日志
     */
    async searchLogsRaw(requestParameters: SearchLogsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Array<QueryActionBean>>> {
        if (requestParameters.app === null || requestParameters.app === undefined) {
            throw new runtime.RequiredError('app','Required parameter requestParameters.app was null or undefined when calling searchLogs.');
        }

        const queryParameters: any = {};

        if (requestParameters.indices) {
            queryParameters['indices'] = requestParameters.indices;
        }

        if (requestParameters.scope !== undefined) {
            queryParameters['scope'] = requestParameters.scope;
        }

        if (requestParameters.widget !== undefined) {
            queryParameters['widget'] = requestParameters.widget;
        }

        if (requestParameters.query !== undefined) {
            queryParameters['query'] = requestParameters.query;
        }

        if (requestParameters.recomm !== undefined) {
            queryParameters['recomm'] = requestParameters.recomm;
        }

        if (requestParameters.startDate !== undefined) {
            queryParameters['start_date'] = (requestParameters.startDate as any).toISOString().substr(0,10);
        }

        if (requestParameters.endDate !== undefined) {
            queryParameters['end_date'] = (requestParameters.endDate as any).toISOString().substr(0,10);
        }

        if (requestParameters.from !== undefined) {
            queryParameters['from'] = requestParameters.from;
        }

        if (requestParameters.size !== undefined) {
            queryParameters['size'] = requestParameters.size;
        }

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("TokenAuth", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const response = await this.request({
            path: `/apps/{app}/logs-searchs`.replace(`{${"app"}}`, encodeURIComponent(String(requestParameters.app))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(QueryActionBeanFromJSON));
    }

    /**
     * 该接口主要用于获取搜索明细
     * 获取搜索日志
     */
    async searchLogs(requestParameters: SearchLogsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Array<QueryActionBean>> {
        const response = await this.searchLogsRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 该接口主要用于记录用户对搜索结果的点击行为
     * 搜索结果点击行为收集
     */
    async searchQueryClickRaw(requestParameters: SearchQueryClickRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<boolean>> {
        if (requestParameters.query === null || requestParameters.query === undefined) {
            throw new runtime.RequiredError('query','Required parameter requestParameters.query was null or undefined when calling searchQueryClick.');
        }

        if (requestParameters.actionId === null || requestParameters.actionId === undefined) {
            throw new runtime.RequiredError('actionId','Required parameter requestParameters.actionId was null or undefined when calling searchQueryClick.');
        }

        if (requestParameters.docId === null || requestParameters.docId === undefined) {
            throw new runtime.RequiredError('docId','Required parameter requestParameters.docId was null or undefined when calling searchQueryClick.');
        }

        const queryParameters: any = {};

        if (requestParameters.actionId !== undefined) {
            queryParameters['action_id'] = requestParameters.actionId;
        }

        if (requestParameters.docId !== undefined) {
            queryParameters['doc_id'] = requestParameters.docId;
        }

        const headerParameters: runtime.HTTPHeaders = {};

        if (requestParameters.xToken !== undefined && requestParameters.xToken !== null) {
            headerParameters['x-token'] = String(requestParameters.xToken);
        }

        if (requestParameters.userid !== undefined && requestParameters.userid !== null) {
            headerParameters['userid'] = String(requestParameters.userid);
        }

        const response = await this.request({
            path: `/search/query/{query}/click`.replace(`{${"query"}}`, encodeURIComponent(String(requestParameters.query))),
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.TextApiResponse(response) as any;
    }

    /**
     * 该接口主要用于记录用户对搜索结果的点击行为
     * 搜索结果点击行为收集
     */
    async searchQueryClick(requestParameters: SearchQueryClickRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<boolean> {
        const response = await this.searchQueryClickRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 获取当前搜索用户的最新搜索记录
     */
    async searchQueryHistoriesRaw(requestParameters: SearchQueryHistoriesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Array<string>>> {
        if (requestParameters.query === null || requestParameters.query === undefined) {
            throw new runtime.RequiredError('query','Required parameter requestParameters.query was null or undefined when calling searchQueryHistories.');
        }

        if (requestParameters.strategy === null || requestParameters.strategy === undefined) {
            throw new runtime.RequiredError('strategy','Required parameter requestParameters.strategy was null or undefined when calling searchQueryHistories.');
        }

        if (requestParameters.size === null || requestParameters.size === undefined) {
            throw new runtime.RequiredError('size','Required parameter requestParameters.size was null or undefined when calling searchQueryHistories.');
        }

        const queryParameters: any = {};

        if (requestParameters.strategy !== undefined) {
            queryParameters['strategy'] = requestParameters.strategy;
        }

        if (requestParameters.size !== undefined) {
            queryParameters['size'] = requestParameters.size;
        }

        const headerParameters: runtime.HTTPHeaders = {};

        if (requestParameters.xToken !== undefined && requestParameters.xToken !== null) {
            headerParameters['x-token'] = String(requestParameters.xToken);
        }

        if (requestParameters.userid !== undefined && requestParameters.userid !== null) {
            headerParameters['userid'] = String(requestParameters.userid);
        }

        const response = await this.request({
            path: `/search/query/{query}/histories`.replace(`{${"query"}}`, encodeURIComponent(String(requestParameters.query))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse<any>(response);
    }

    /**
     * 获取当前搜索用户的最新搜索记录
     */
    async searchQueryHistories(requestParameters: SearchQueryHistoriesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Array<string>> {
        const response = await this.searchQueryHistoriesRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 获取查询相关热词
     */
    async searchQueryHotWordsRaw(requestParameters: SearchQueryHotWordsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Array<SearchWord>>> {
        if (requestParameters.query === null || requestParameters.query === undefined) {
            throw new runtime.RequiredError('query','Required parameter requestParameters.query was null or undefined when calling searchQueryHotWords.');
        }

        if (requestParameters.scope === null || requestParameters.scope === undefined) {
            throw new runtime.RequiredError('scope','Required parameter requestParameters.scope was null or undefined when calling searchQueryHotWords.');
        }

        if (requestParameters.count === null || requestParameters.count === undefined) {
            throw new runtime.RequiredError('count','Required parameter requestParameters.count was null or undefined when calling searchQueryHotWords.');
        }

        const queryParameters: any = {};

        if (requestParameters.scope !== undefined) {
            queryParameters['scope'] = requestParameters.scope;
        }

        if (requestParameters.count !== undefined) {
            queryParameters['count'] = requestParameters.count;
        }

        const headerParameters: runtime.HTTPHeaders = {};

        if (requestParameters.xToken !== undefined && requestParameters.xToken !== null) {
            headerParameters['x-token'] = String(requestParameters.xToken);
        }

        if (requestParameters.userid !== undefined && requestParameters.userid !== null) {
            headerParameters['userid'] = String(requestParameters.userid);
        }

        const response = await this.request({
            path: `/search/query/{query}/hotwords`.replace(`{${"query"}}`, encodeURIComponent(String(requestParameters.query))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(SearchWordFromJSON));
    }

    /**
     * 获取查询相关热词
     */
    async searchQueryHotWords(requestParameters: SearchQueryHotWordsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Array<SearchWord>> {
        const response = await this.searchQueryHotWordsRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 先调用 search.queryScroll 获取 scroll_id 值以及第一批结果记录，然后使用 scroll_id 值调用该接口获取下一批结果记录，请注意该值的有效期是 1 分钟
     * 读取滚动搜索结果
     */
    async searchQueryRepeatScrollRaw(requestParameters: SearchQueryRepeatScrollRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<object>> {
        if (requestParameters.query === null || requestParameters.query === undefined) {
            throw new runtime.RequiredError('query','Required parameter requestParameters.query was null or undefined when calling searchQueryRepeatScroll.');
        }

        if (requestParameters.id === null || requestParameters.id === undefined) {
            throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling searchQueryRepeatScroll.');
        }

        const queryParameters: any = {};

        if (requestParameters.id !== undefined) {
            queryParameters['id'] = requestParameters.id;
        }

        const headerParameters: runtime.HTTPHeaders = {};

        if (requestParameters.xToken !== undefined && requestParameters.xToken !== null) {
            headerParameters['x-token'] = String(requestParameters.xToken);
        }

        if (requestParameters.userid !== undefined && requestParameters.userid !== null) {
            headerParameters['userid'] = String(requestParameters.userid);
        }

        const response = await this.request({
            path: `/search/scroll/{query}`.replace(`{${"query"}}`, encodeURIComponent(String(requestParameters.query))),
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse<any>(response);
    }

    /**
     * 先调用 search.queryScroll 获取 scroll_id 值以及第一批结果记录，然后使用 scroll_id 值调用该接口获取下一批结果记录，请注意该值的有效期是 1 分钟
     * 读取滚动搜索结果
     */
    async searchQueryRepeatScroll(requestParameters: SearchQueryRepeatScrollRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<object> {
        const response = await this.searchQueryRepeatScrollRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 用于读取超过 10000 条记录的搜索结果，当需要读取大批量查询结果时请采用此接口获得 scroll_id 值，然后再用 POST 方法 queryRepeatScroll 读取剩余的其他结果，每批次的读取间隔不能超过 1 分钟
     * 基于查询的滚动搜索
     */
    async searchQueryScrollRaw(requestParameters: SearchQueryScrollRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<object>> {
        if (requestParameters.query === null || requestParameters.query === undefined) {
            throw new runtime.RequiredError('query','Required parameter requestParameters.query was null or undefined when calling searchQueryScroll.');
        }

        const queryParameters: any = {};

        if (requestParameters.size !== undefined) {
            queryParameters['size'] = requestParameters.size;
        }

        if (requestParameters.q !== undefined) {
            queryParameters['q'] = requestParameters.q;
        }

        if (requestParameters.params !== undefined) {
            queryParameters['params'] = requestParameters.params;
        }

        const headerParameters: runtime.HTTPHeaders = {};

        if (requestParameters.xToken !== undefined && requestParameters.xToken !== null) {
            headerParameters['x-token'] = String(requestParameters.xToken);
        }

        if (requestParameters.userid !== undefined && requestParameters.userid !== null) {
            headerParameters['userid'] = String(requestParameters.userid);
        }

        const response = await this.request({
            path: `/search/scroll/{query}`.replace(`{${"query"}}`, encodeURIComponent(String(requestParameters.query))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse<any>(response);
    }

    /**
     * 用于读取超过 10000 条记录的搜索结果，当需要读取大批量查询结果时请采用此接口获得 scroll_id 值，然后再用 POST 方法 queryRepeatScroll 读取剩余的其他结果，每批次的读取间隔不能超过 1 分钟
     * 基于查询的滚动搜索
     */
    async searchQueryScroll(requestParameters: SearchQueryScrollRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<object> {
        const response = await this.searchQueryScrollRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 该接口主要用于公开搜索，如果查询是公开的就不需要授权
     * 基于查询的公开搜索
     */
    async searchQuerySearchRaw(requestParameters: SearchQuerySearchRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<object>> {
        if (requestParameters.query === null || requestParameters.query === undefined) {
            throw new runtime.RequiredError('query','Required parameter requestParameters.query was null or undefined when calling searchQuerySearch.');
        }

        const queryParameters: any = {};

        if (requestParameters.q !== undefined) {
            queryParameters['q'] = requestParameters.q;
        }

        if (requestParameters.from !== undefined) {
            queryParameters['from'] = requestParameters.from;
        }

        if (requestParameters.size !== undefined) {
            queryParameters['size'] = requestParameters.size;
        }

        if (requestParameters.params !== undefined) {
            queryParameters['params'] = requestParameters.params;
        }

        const headerParameters: runtime.HTTPHeaders = {};

        if (requestParameters.xToken !== undefined && requestParameters.xToken !== null) {
            headerParameters['x-token'] = String(requestParameters.xToken);
        }

        if (requestParameters.userid !== undefined && requestParameters.userid !== null) {
            headerParameters['userid'] = String(requestParameters.userid);
        }

        const response = await this.request({
            path: `/search/query/{query}`.replace(`{${"query"}}`, encodeURIComponent(String(requestParameters.query))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse<any>(response);
    }

    /**
     * 该接口主要用于公开搜索，如果查询是公开的就不需要授权
     * 基于查询的公开搜索
     */
    async searchQuerySearch(requestParameters: SearchQuerySearchRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<object> {
        const response = await this.searchQuerySearchRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 该接口主要为搜索输入框提供自动完成的功能
     * 基于组件的搜索词自动完成
     */
    async searchWidgetAutoCompleteRaw(requestParameters: SearchWidgetAutoCompleteRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Array<AutoCompleteItem>>> {
        if (requestParameters.widget === null || requestParameters.widget === undefined) {
            throw new runtime.RequiredError('widget','Required parameter requestParameters.widget was null or undefined when calling searchWidgetAutoComplete.');
        }

        if (requestParameters.q === null || requestParameters.q === undefined) {
            throw new runtime.RequiredError('q','Required parameter requestParameters.q was null or undefined when calling searchWidgetAutoComplete.');
        }

        if (requestParameters.size === null || requestParameters.size === undefined) {
            throw new runtime.RequiredError('size','Required parameter requestParameters.size was null or undefined when calling searchWidgetAutoComplete.');
        }

        const queryParameters: any = {};

        if (requestParameters.query !== undefined) {
            queryParameters['query'] = requestParameters.query;
        }

        if (requestParameters.q !== undefined) {
            queryParameters['q'] = requestParameters.q;
        }

        if (requestParameters.size !== undefined) {
            queryParameters['size'] = requestParameters.size;
        }

        const headerParameters: runtime.HTTPHeaders = {};

        if (requestParameters.xToken !== undefined && requestParameters.xToken !== null) {
            headerParameters['x-token'] = String(requestParameters.xToken);
        }

        if (requestParameters.userid !== undefined && requestParameters.userid !== null) {
            headerParameters['userid'] = String(requestParameters.userid);
        }

        const response = await this.request({
            path: `/search/widget/{widget}/autocomplete`.replace(`{${"widget"}}`, encodeURIComponent(String(requestParameters.widget))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(AutoCompleteItemFromJSON));
    }

    /**
     * 该接口主要为搜索输入框提供自动完成的功能
     * 基于组件的搜索词自动完成
     */
    async searchWidgetAutoComplete(requestParameters: SearchWidgetAutoCompleteRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Array<AutoCompleteItem>> {
        const response = await this.searchWidgetAutoCompleteRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 获取组件搜索的相关热词
     */
    async searchWidgetHotWordsRaw(requestParameters: SearchWidgetHotWordsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Array<SearchWord>>> {
        if (requestParameters.widget === null || requestParameters.widget === undefined) {
            throw new runtime.RequiredError('widget','Required parameter requestParameters.widget was null or undefined when calling searchWidgetHotWords.');
        }

        const queryParameters: any = {};

        if (requestParameters.query !== undefined) {
            queryParameters['query'] = requestParameters.query;
        }

        if (requestParameters.scope !== undefined) {
            queryParameters['scope'] = requestParameters.scope;
        }

        if (requestParameters.count !== undefined) {
            queryParameters['count'] = requestParameters.count;
        }

        const headerParameters: runtime.HTTPHeaders = {};

        if (requestParameters.xToken !== undefined && requestParameters.xToken !== null) {
            headerParameters['x-token'] = String(requestParameters.xToken);
        }

        if (requestParameters.userid !== undefined && requestParameters.userid !== null) {
            headerParameters['userid'] = String(requestParameters.userid);
        }

        const response = await this.request({
            path: `/search/widget/{widget}/hotwords`.replace(`{${"widget"}}`, encodeURIComponent(String(requestParameters.widget))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(SearchWordFromJSON));
    }

    /**
     * 获取组件搜索的相关热词
     */
    async searchWidgetHotWords(requestParameters: SearchWidgetHotWordsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Array<SearchWord>> {
        const response = await this.searchWidgetHotWordsRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 该接口主要为UI组件提供公开搜索
     * 基于组件的公开搜索
     */
    async searchWidgetSearchRaw(requestParameters: SearchWidgetSearchRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<object>> {
        if (requestParameters.widget === null || requestParameters.widget === undefined) {
            throw new runtime.RequiredError('widget','Required parameter requestParameters.widget was null or undefined when calling searchWidgetSearch.');
        }

        const queryParameters: any = {};

        if (requestParameters.query !== undefined) {
            queryParameters['query'] = requestParameters.query;
        }

        if (requestParameters.q !== undefined) {
            queryParameters['q'] = requestParameters.q;
        }

        if (requestParameters.from !== undefined) {
            queryParameters['from'] = requestParameters.from;
        }

        if (requestParameters.size !== undefined) {
            queryParameters['size'] = requestParameters.size;
        }

        if (requestParameters.params !== undefined) {
            queryParameters['params'] = requestParameters.params;
        }

        const headerParameters: runtime.HTTPHeaders = {};

        if (requestParameters.xToken !== undefined && requestParameters.xToken !== null) {
            headerParameters['x-token'] = String(requestParameters.xToken);
        }

        if (requestParameters.userid !== undefined && requestParameters.userid !== null) {
            headerParameters['userid'] = String(requestParameters.userid);
        }

        if (requestParameters.original !== undefined && requestParameters.original !== null) {
            headerParameters['original'] = String(requestParameters.original);
        }

        const response = await this.request({
            path: `/search/widget/{widget}`.replace(`{${"widget"}}`, encodeURIComponent(String(requestParameters.widget))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse<any>(response);
    }

    /**
     * 该接口主要为UI组件提供公开搜索
     * 基于组件的公开搜索
     */
    async searchWidgetSearch(requestParameters: SearchWidgetSearchRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<object> {
        const response = await this.searchWidgetSearchRaw(requestParameters, initOverrides);
        return await response.value();
    }

}

/**
 * @export
 */
export const SearchHistoriesStrategyEnum = {
    Recent: 'recent',
    Popular: 'popular'
} as const;
export type SearchHistoriesStrategyEnum = typeof SearchHistoriesStrategyEnum[keyof typeof SearchHistoriesStrategyEnum];
/**
 * @export
 */
export const SearchLogsScopeEnum = {
    All: 'all',
    Search: 'search',
    Recomm: 'recomm'
} as const;
export type SearchLogsScopeEnum = typeof SearchLogsScopeEnum[keyof typeof SearchLogsScopeEnum];
/**
 * @export
 */
export const SearchQueryHistoriesStrategyEnum = {
    Recent: 'recent',
    Popular: 'popular'
} as const;
export type SearchQueryHistoriesStrategyEnum = typeof SearchQueryHistoriesStrategyEnum[keyof typeof SearchQueryHistoriesStrategyEnum];
/**
 * @export
 */
export const SearchQueryHotWordsScopeEnum = {
    Month: 'month',
    Year: 'year',
    All: 'all'
} as const;
export type SearchQueryHotWordsScopeEnum = typeof SearchQueryHotWordsScopeEnum[keyof typeof SearchQueryHotWordsScopeEnum];
/**
 * @export
 */
export const SearchWidgetHotWordsScopeEnum = {
    Month: 'month',
    Year: 'year',
    All: 'all',
    Custom: 'custom'
} as const;
export type SearchWidgetHotWordsScopeEnum = typeof SearchWidgetHotWordsScopeEnum[keyof typeof SearchWidgetHotWordsScopeEnum];
