From dca0ea2ade1bac1cd66cdd1f508c5bdf7e366564 Mon Sep 17 00:00:00 2001 From: Panagiota Mitsopoulou Date: Fri, 21 Jun 2024 13:24:52 +0200 Subject: [PATCH 01/33] [SLO] use generic edit actions in the SLO embeddables (#186374) Fixes https://github.com/elastic/kibana/issues/186365 ## SLO Group Overview Embeddable - `Edit criteria` appears on top - Edit criteria does not appear under `More` actions - Inline Edit criteria is removed from the panel https://github.com/elastic/kibana/assets/2852703/4b322361-08dd-4f3f-8440-2d4380efa2bd ## SLO Alerts Embeddable - `Edit configuration` appears on top - Edit configuration does not appear under `More` actions - `X SLOs included` within the panel still opens the Edit configuration https://github.com/elastic/kibana/assets/2852703/c609fa70-4c1f-4aa5-aa17-4e765456f7e6 --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../alerts/slo_alerts_embeddable_factory.tsx | 36 +++++++- .../slo/alerts/slo_alerts_wrapper.tsx | 13 +-- .../slo/public/embeddable/slo/alerts/types.ts | 4 +- .../slo/overview/slo_embeddable_factory.tsx | 90 +++++++++---------- .../public/embeddable/slo/overview/types.ts | 4 +- .../slo/public/plugin.ts | 7 +- .../ui_actions/edit_slo_alerts_panel.tsx | 75 ---------------- .../ui_actions/edit_slo_overview_panel.tsx | 86 ------------------ .../slo/public/ui_actions/index.ts | 7 -- 9 files changed, 89 insertions(+), 233 deletions(-) delete mode 100644 x-pack/plugins/observability_solution/slo/public/ui_actions/edit_slo_alerts_panel.tsx delete mode 100644 x-pack/plugins/observability_solution/slo/public/ui_actions/edit_slo_overview_panel.tsx diff --git a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/alerts/slo_alerts_embeddable_factory.tsx b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/alerts/slo_alerts_embeddable_factory.tsx index b70e1d8e4c40a..24c29a20f1e6f 100644 --- a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/alerts/slo_alerts_embeddable_factory.tsx +++ b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/alerts/slo_alerts_embeddable_factory.tsx @@ -21,8 +21,10 @@ import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { createBrowserHistory } from 'history'; import { Storage } from '@kbn/kibana-utils-plugin/public'; +import type { StartServicesAccessor } from '@kbn/core-lifecycle-browser'; import { SLO_ALERTS_EMBEDDABLE_ID } from './constants'; -import { SloEmbeddableDeps, SloAlertsEmbeddableState, SloAlertsApi } from './types'; +import { SloAlertsEmbeddableState, SloAlertsApi } from './types'; +import { SloPublicPluginsStart, SloPublicStart } from '../../../types'; import { SloAlertsWrapper } from './slo_alerts_wrapper'; const history = createBrowserHistory(); const queryClient = new QueryClient(); @@ -32,7 +34,10 @@ export const getAlertsPanelTitle = () => defaultMessage: 'SLO Alerts', }); -export function getAlertsEmbeddableFactory(deps: SloEmbeddableDeps, kibanaVersion: string) { +export function getAlertsEmbeddableFactory( + getStartServices: StartServicesAccessor, + kibanaVersion: string +) { const factory: ReactEmbeddableFactory< SloAlertsEmbeddableState, SloAlertsEmbeddableState, @@ -43,6 +48,23 @@ export function getAlertsEmbeddableFactory(deps: SloEmbeddableDeps, kibanaVersio return state.rawState as SloAlertsEmbeddableState; }, buildEmbeddable: async (state, buildApi, uuid, parentApi) => { + const [coreStart, pluginStart] = await getStartServices(); + const deps = { ...coreStart, ...pluginStart }; + async function onEdit() { + try { + const { openSloConfiguration } = await import('./slo_alerts_open_configuration'); + + const result = await openSloConfiguration( + coreStart, + pluginStart, + api.getSloAlertsConfig() + ); + api.updateSloAlertsConfig(result); + } catch (e) { + return Promise.reject(); + } + } + const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); const defaultTitle$ = new BehaviorSubject(getAlertsPanelTitle()); const slos$ = new BehaviorSubject(state.slos); @@ -52,6 +74,14 @@ export function getAlertsEmbeddableFactory(deps: SloEmbeddableDeps, kibanaVersio { ...titlesApi, defaultPanelTitle: defaultTitle$, + getTypeDisplayName: () => + i18n.translate('xpack.slo.editSloAlertswEmbeddable.typeDisplayName', { + defaultMessage: 'configuration', + }), + isEditingEnabled: () => true, + onEdit: async () => { + onEdit(); + }, serializeState: () => { return { rawState: { @@ -116,7 +146,7 @@ export function getAlertsEmbeddableFactory(deps: SloEmbeddableDeps, kibanaVersio void; reloadSubject: Subject; showAllGroupByInstances?: boolean; + onEdit: () => void; } export function SloAlertsWrapper({ - embeddable, slos, deps, timeRange: initialTimeRange, onRenderComplete, reloadSubject, showAllGroupByInstances, + onEdit, }: Props) { const { application: { navigateToUrl }, @@ -102,11 +99,7 @@ export function SloAlertsWrapper({ { - const trigger = deps.uiActions.getTrigger(CONTEXT_MENU_TRIGGER); - deps.uiActions.getAction(EDIT_SLO_ALERTS_ACTION).execute({ - trigger, - embeddable, - } as ActionExecutionContext); + onEdit(); }} data-test-subj="o11ySloAlertsWrapperSlOsIncludedLink" > diff --git a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/alerts/types.ts b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/alerts/types.ts index 8b660442ca7b6..7682c3f55bedf 100644 --- a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/alerts/types.ts +++ b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/alerts/types.ts @@ -24,6 +24,7 @@ import { PublishesWritablePanelTitle, PublishesPanelTitle, EmbeddableApiContext, + HasEditCapabilities, } from '@kbn/presentation-publishing'; export interface SloItem { @@ -45,7 +46,8 @@ export type SloAlertsEmbeddableState = SerializedTitles & EmbeddableSloProps; export type SloAlertsApi = DefaultEmbeddableApi & PublishesWritablePanelTitle & PublishesPanelTitle & - HasSloAlertsConfig; + HasSloAlertsConfig & + HasEditCapabilities; export interface HasSloAlertsConfig { getSloAlertsConfig: () => EmbeddableSloProps; diff --git a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/slo_embeddable_factory.tsx b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/slo_embeddable_factory.tsx index 861909b040e9a..2d043e85df4d4 100644 --- a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/slo_embeddable_factory.tsx +++ b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/slo_embeddable_factory.tsx @@ -8,7 +8,7 @@ import { i18n } from '@kbn/i18n'; import React, { useEffect } from 'react'; import styled from 'styled-components'; -import { EuiFlexItem, EuiLink, EuiFlexGroup } from '@elastic/eui'; +import { EuiFlexItem, EuiFlexGroup } from '@elastic/eui'; import { ReactEmbeddableFactory } from '@kbn/embeddable-plugin/public'; import { initializeTitles, @@ -16,26 +16,22 @@ import { fetch$, } from '@kbn/presentation-publishing'; import { BehaviorSubject, Subject } from 'rxjs'; -import { CONTEXT_MENU_TRIGGER } from '@kbn/embeddable-plugin/public'; -import { ActionExecutionContext } from '@kbn/ui-actions-plugin/public'; +import type { StartServicesAccessor } from '@kbn/core-lifecycle-browser'; import { SLO_OVERVIEW_EMBEDDABLE_ID } from './constants'; import { SloCardChartList } from './slo_overview_grid'; import { SloOverview } from './slo_overview'; import { GroupSloView } from './group_view/group_view'; -import { - SloOverviewEmbeddableState, - SloEmbeddableDeps, - SloOverviewApi, - GroupSloCustomInput, -} from './types'; -import { EDIT_SLO_OVERVIEW_ACTION } from '../../../ui_actions/edit_slo_overview_panel'; +import { SloOverviewEmbeddableState, SloOverviewApi, GroupSloCustomInput } from './types'; +import { SloPublicPluginsStart, SloPublicStart } from '../../../types'; import { SloEmbeddableContext } from '../common/slo_embeddable_context'; export const getOverviewPanelTitle = () => i18n.translate('xpack.slo.sloEmbeddable.displayName', { defaultMessage: 'SLO Overview', }); -export const getOverviewEmbeddableFactory = (deps: SloEmbeddableDeps) => { +export const getOverviewEmbeddableFactory = ( + getStartServices: StartServicesAccessor +) => { const factory: ReactEmbeddableFactory< SloOverviewEmbeddableState, SloOverviewEmbeddableState, @@ -46,6 +42,22 @@ export const getOverviewEmbeddableFactory = (deps: SloEmbeddableDeps) => { return state.rawState as SloOverviewEmbeddableState; }, buildEmbeddable: async (state, buildApi, uuid, parentApi) => { + const [coreStart, pluginStart] = await getStartServices(); + const deps = { ...coreStart, ...pluginStart }; + async function onEdit() { + try { + const { openSloConfiguration } = await import('./slo_overview_open_configuration'); + + const result = await openSloConfiguration( + coreStart, + pluginStart, + api.getSloGroupOverviewConfig() + ); + api.updateSloGroupOverviewConfig(result as GroupSloCustomInput); + } catch (e) { + return Promise.reject(); + } + } const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); const defaultTitle$ = new BehaviorSubject(getOverviewPanelTitle()); const sloId$ = new BehaviorSubject(state.sloId); @@ -60,6 +72,14 @@ export const getOverviewEmbeddableFactory = (deps: SloEmbeddableDeps) => { { ...titlesApi, defaultPanelTitle: defaultTitle$, + getTypeDisplayName: () => + i18n.translate('xpack.slo.editSloOverviewEmbeddableTitle.typeDisplayName', { + defaultMessage: 'criteria', + }), + isEditingEnabled: () => api.getSloGroupOverviewConfig().overviewMode === 'groups', + onEdit: async () => { + onEdit(); + }, serializeState: () => { return { rawState: { @@ -134,42 +154,22 @@ export const getOverviewEmbeddableFactory = (deps: SloEmbeddableDeps) => { const groups = groupFilters?.groups ?? []; return ( - - - { - const trigger = deps.uiActions.getTrigger(CONTEXT_MENU_TRIGGER); - deps.uiActions.getAction(EDIT_SLO_OVERVIEW_ACTION).execute({ - trigger, - embeddable: api, - } as ActionExecutionContext); - }} - data-test-subj="o11ySloOverviewEditCriteriaLink" - > - {i18n.translate('xpack.slo.overviewEmbeddable.editCriteriaLabel', { - defaultMessage: 'Edit criteria', - })} - + + + - - - ); } else { diff --git a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/types.ts b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/types.ts index 8773fba3e0998..c64faff1f110d 100644 --- a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/types.ts +++ b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/types.ts @@ -8,6 +8,7 @@ import { SerializedTitles, PublishesWritablePanelTitle, PublishesPanelTitle, + HasEditCapabilities, } from '@kbn/presentation-publishing'; import type { EmbeddableApiContext } from '@kbn/presentation-publishing'; import { DefaultEmbeddableApi } from '@kbn/embeddable-plugin/public'; @@ -53,7 +54,8 @@ export type SloOverviewEmbeddableState = SerializedTitles & export type SloOverviewApi = DefaultEmbeddableApi & PublishesWritablePanelTitle & PublishesPanelTitle & - HasSloGroupOverviewConfig; + HasSloGroupOverviewConfig & + HasEditCapabilities; export interface HasSloGroupOverviewConfig { getSloGroupOverviewConfig: () => GroupSloCustomInput; diff --git a/x-pack/plugins/observability_solution/slo/public/plugin.ts b/x-pack/plugins/observability_solution/slo/public/plugin.ts index e387a7f85a7e3..5bdd830830fd6 100644 --- a/x-pack/plugins/observability_solution/slo/public/plugin.ts +++ b/x-pack/plugins/observability_solution/slo/public/plugin.ts @@ -108,24 +108,21 @@ export class SloPlugin pluginsSetup.embeddable.registerReactEmbeddableFactory( SLO_OVERVIEW_EMBEDDABLE_ID, async () => { - const deps = { ...coreStart, ...pluginsStart }; const { getOverviewEmbeddableFactory } = await import( './embeddable/slo/overview/slo_embeddable_factory' ); - return getOverviewEmbeddableFactory(deps); + return getOverviewEmbeddableFactory(coreSetup.getStartServices); } ); pluginsSetup.embeddable.registerReactEmbeddableFactory( SLO_ALERTS_EMBEDDABLE_ID, async () => { - const deps = { ...coreStart, ...pluginsStart }; - const { getAlertsEmbeddableFactory } = await import( './embeddable/slo/alerts/slo_alerts_embeddable_factory' ); - return getAlertsEmbeddableFactory(deps, kibanaVersion); + return getAlertsEmbeddableFactory(coreSetup.getStartServices, kibanaVersion); } ); diff --git a/x-pack/plugins/observability_solution/slo/public/ui_actions/edit_slo_alerts_panel.tsx b/x-pack/plugins/observability_solution/slo/public/ui_actions/edit_slo_alerts_panel.tsx deleted file mode 100644 index ce9b4d196ffb5..0000000000000 --- a/x-pack/plugins/observability_solution/slo/public/ui_actions/edit_slo_alerts_panel.tsx +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { i18n } from '@kbn/i18n'; -import { ViewMode } from '@kbn/embeddable-plugin/common'; -import type { CoreSetup } from '@kbn/core/public'; -import { - apiCanAccessViewMode, - apiHasType, - apiIsOfType, - EmbeddableApiContext, - getInheritedViewMode, - CanAccessViewMode, - HasType, -} from '@kbn/presentation-publishing'; -import { type UiActionsActionDefinition } from '@kbn/ui-actions-plugin/public'; -import { SLO_ALERTS_EMBEDDABLE_ID } from '../embeddable/slo/alerts/constants'; -import { SloPublicPluginsStart, SloPublicStart } from '..'; -import { - HasSloAlertsConfig, - SloAlertsEmbeddableActionContext, -} from '../embeddable/slo/alerts/types'; -export const EDIT_SLO_ALERTS_ACTION = 'editSloAlertsPanelAction'; -type EditSloAlertsPanelApi = CanAccessViewMode & HasType & HasSloAlertsConfig; -const isEditSloAlertsPanelApi = (api: unknown): api is EditSloAlertsPanelApi => - Boolean( - apiHasType(api) && - apiIsOfType(api, SLO_ALERTS_EMBEDDABLE_ID) && - apiCanAccessViewMode(api) && - getInheritedViewMode(api) === ViewMode.EDIT - ); - -export function createEditSloAlertsPanelAction( - getStartServices: CoreSetup['getStartServices'] -): UiActionsActionDefinition { - return { - id: EDIT_SLO_ALERTS_ACTION, - type: EDIT_SLO_ALERTS_ACTION, - getIconType(): string { - return 'pencil'; - }, - getDisplayName: () => - i18n.translate('xpack.slo.actions.editSloAlertsEmbeddableTitle', { - defaultMessage: 'Edit configuration', - }), - async execute({ embeddable }) { - if (!embeddable) { - throw new Error('Not possible to execute an action without the embeddable context'); - } - - const [coreStart, pluginStart] = await getStartServices(); - - try { - const { openSloConfiguration } = await import( - '../embeddable/slo/alerts/slo_alerts_open_configuration' - ); - - const result = await openSloConfiguration( - coreStart, - pluginStart, - embeddable.getSloAlertsConfig() - ); - embeddable.updateSloAlertsConfig(result); - } catch (e) { - return Promise.reject(); - } - }, - isCompatible: async ({ embeddable }: EmbeddableApiContext) => - isEditSloAlertsPanelApi(embeddable), - }; -} diff --git a/x-pack/plugins/observability_solution/slo/public/ui_actions/edit_slo_overview_panel.tsx b/x-pack/plugins/observability_solution/slo/public/ui_actions/edit_slo_overview_panel.tsx deleted file mode 100644 index 55f5c9b6feb0d..0000000000000 --- a/x-pack/plugins/observability_solution/slo/public/ui_actions/edit_slo_overview_panel.tsx +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { i18n } from '@kbn/i18n'; -import { ViewMode } from '@kbn/embeddable-plugin/common'; -import type { CoreSetup } from '@kbn/core/public'; -import { - apiCanAccessViewMode, - apiHasType, - apiIsOfType, - EmbeddableApiContext, - getInheritedViewMode, - CanAccessViewMode, - HasType, -} from '@kbn/presentation-publishing'; -import { - type UiActionsActionDefinition, - IncompatibleActionError, -} from '@kbn/ui-actions-plugin/public'; -import { SLO_EMBEDDABLE } from '../embeddable/slo/constants'; -import { SloPublicPluginsStart, SloPublicStart } from '..'; -import { - GroupSloCustomInput, - HasSloGroupOverviewConfig, - SloOverviewEmbeddableActionContext, - apiHasSloGroupOverviewConfig, -} from '../embeddable/slo/overview/types'; - -export const EDIT_SLO_OVERVIEW_ACTION = 'editSloOverviewPanelAction'; -type EditSloOverviewPanelApi = CanAccessViewMode & HasType & HasSloGroupOverviewConfig; -const isEditSloOverviewPanelApi = (api: unknown): api is EditSloOverviewPanelApi => - Boolean( - apiHasType(api) && - apiIsOfType(api, SLO_EMBEDDABLE) && - apiCanAccessViewMode(api) && - getInheritedViewMode(api) === ViewMode.EDIT - ); - -export function createEditSloOverviewPanelAction( - getStartServices: CoreSetup['getStartServices'] -): UiActionsActionDefinition { - return { - id: EDIT_SLO_OVERVIEW_ACTION, - type: EDIT_SLO_OVERVIEW_ACTION, - getIconType(): string { - return 'pencil'; - }, - getDisplayName: () => - i18n.translate('xpack.slo.actions.editSloOverviewEmbeddableTitle', { - defaultMessage: 'Edit criteria', - }), - async execute(context) { - const { embeddable } = context; - if (!apiHasSloGroupOverviewConfig(embeddable)) { - throw new IncompatibleActionError(); - } - - const [coreStart, pluginStart] = await getStartServices(); - - try { - const { openSloConfiguration } = await import( - '../embeddable/slo/overview/slo_overview_open_configuration' - ); - - const result = await openSloConfiguration( - coreStart, - pluginStart, - embeddable.getSloGroupOverviewConfig() - ); - embeddable.updateSloGroupOverviewConfig(result as GroupSloCustomInput); - } catch (e) { - return Promise.reject(); - } - }, - isCompatible: async ({ embeddable }: EmbeddableApiContext) => { - return ( - isEditSloOverviewPanelApi(embeddable) && - embeddable.getSloGroupOverviewConfig().overviewMode === 'groups' - ); - }, - }; -} diff --git a/x-pack/plugins/observability_solution/slo/public/ui_actions/index.ts b/x-pack/plugins/observability_solution/slo/public/ui_actions/index.ts index 76862a3afe90d..61c1569f1a9d7 100644 --- a/x-pack/plugins/observability_solution/slo/public/ui_actions/index.ts +++ b/x-pack/plugins/observability_solution/slo/public/ui_actions/index.ts @@ -6,10 +6,7 @@ */ import type { UiActionsSetup } from '@kbn/ui-actions-plugin/public'; -import { CONTEXT_MENU_TRIGGER } from '@kbn/embeddable-plugin/public'; import type { CoreSetup } from '@kbn/core/public'; -import { createEditSloAlertsPanelAction } from './edit_slo_alerts_panel'; -import { createEditSloOverviewPanelAction } from './edit_slo_overview_panel'; import { createOverviewPanelAction } from './create_overview_panel_action'; import { createAddErrorBudgetPanelAction } from './create_error_budget_action'; import { createAddAlertsPanelAction } from './create_alerts_panel_action'; @@ -20,15 +17,11 @@ export function registerSloUiActions( core: CoreSetup ) { // Initialize actions - const editSloAlertsPanelAction = createEditSloAlertsPanelAction(core.getStartServices); - const editSloOverviewPanelAction = createEditSloOverviewPanelAction(core.getStartServices); const addOverviewPanelAction = createOverviewPanelAction(core.getStartServices); const addErrorBudgetPanelAction = createAddErrorBudgetPanelAction(core.getStartServices); const addAlertsPanelAction = createAddAlertsPanelAction(core.getStartServices); // Assign triggers - uiActions.addTriggerAction(CONTEXT_MENU_TRIGGER, editSloAlertsPanelAction); - uiActions.addTriggerAction(CONTEXT_MENU_TRIGGER, editSloOverviewPanelAction); uiActions.addTriggerAction('ADD_PANEL_TRIGGER', addOverviewPanelAction); uiActions.addTriggerAction('ADD_PANEL_TRIGGER', addErrorBudgetPanelAction); uiActions.addTriggerAction('ADD_PANEL_TRIGGER', addAlertsPanelAction); From 385bb2b35b47d63278c106bdce9d9ca1be3c2845 Mon Sep 17 00:00:00 2001 From: Saikat Sarkar <132922331+saikatsarkar056@users.noreply.github.com> Date: Fri, 21 Jun 2024 05:33:48 -0600 Subject: [PATCH 02/33] [Semantic Text UI] Display semantic_text based on licensing (#185902) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR includes changes related to displaying semantic_text based on the ml operations capacity of the users. The PR includes the following changes: - Display a banner based on the user's capacity to run ML operations. - Display semantic_text if the user has the capacity to run ML operations; otherwise, hide the semantic_text field. ### Trial License Screenshot 2024-06-10 at 4 06 16 PM ### Basic License Screenshot 2024-06-10 at 4 00 56 PM ### Serverless Screenshot 2024-06-10 at 3 52 19 PM # How to test - Enable semantic_text in config/kibana.yml. `xpack.index_management.dev.enableSemanticText: true` - For Basic license, we can run elastic_search using: `yarn es snapshot` - For Trial license, we can run elastic_seach using: `yarn es snapshot --license trial` - For serverless, we can run elastic_search using: `yarn es serverless --projectType es` --- .../index_details_page.test.tsx | 15 +++++ .../semantic_text_bannner.test.tsx | 17 +++++- x-pack/plugins/index_management/kibana.jsonc | 2 +- .../public/application/app_context.tsx | 2 + .../application/mount_management_section.ts | 1 + .../details_page_mappings_content.tsx | 40 +++++++++++--- .../details_page/semantic_text_banner.tsx | 55 ++++++++++++++----- .../plugins/index_management/public/plugin.ts | 3 +- .../plugins/index_management/public/types.ts | 2 + 9 files changed, 112 insertions(+), 25 deletions(-) diff --git a/x-pack/plugins/index_management/__jest__/client_integration/index_details_page/index_details_page.test.tsx b/x-pack/plugins/index_management/__jest__/client_integration/index_details_page/index_details_page.test.tsx index 18f43807041ff..c79efbbf53f53 100644 --- a/x-pack/plugins/index_management/__jest__/client_integration/index_details_page/index_details_page.test.tsx +++ b/x-pack/plugins/index_management/__jest__/client_integration/index_details_page/index_details_page.test.tsx @@ -647,6 +647,10 @@ describe('', () => { }); describe('Add Semantic text field', () => { const customInferenceModel = 'my-elser-model'; + const mockLicense = { + isActive: true, + hasAtLeast: jest.fn((type) => true), + }; beforeEach(async () => { httpRequestsMockHelpers.setInferenceModels({ data: [ @@ -674,7 +678,18 @@ describe('', () => { enterpriseSearch: '', }, }, + core: { + application: { capabilities: { ml: { canGetTrainedModels: true } } }, + }, plugins: { + licensing: { + license$: { + subscribe: jest.fn((callback) => { + callback(mockLicense); + return { unsubscribe: jest.fn() }; + }), + }, + }, ml: { mlApi: { trainedModels: { diff --git a/x-pack/plugins/index_management/__jest__/client_integration/index_details_page/semantic_text_bannner.test.tsx b/x-pack/plugins/index_management/__jest__/client_integration/index_details_page/semantic_text_bannner.test.tsx index 1370c328bf873..6be691a03d8f1 100644 --- a/x-pack/plugins/index_management/__jest__/client_integration/index_details_page/semantic_text_bannner.test.tsx +++ b/x-pack/plugins/index_management/__jest__/client_integration/index_details_page/semantic_text_bannner.test.tsx @@ -20,7 +20,7 @@ describe('When semantic_text is enabled', () => { getItemSpy = jest.spyOn(Storage.prototype, 'getItem'); setItemSpy = jest.spyOn(Storage.prototype, 'setItem'); const setup = registerTestBed(SemanticTextBanner, { - defaultProps: { isSemanticTextEnabled: true }, + defaultProps: { isSemanticTextEnabled: true, isPlatinumLicense: true }, memoryRouter: { wrapComponent: false }, }); const testBed = setup(); @@ -56,6 +56,21 @@ describe('When semantic_text is enabled', () => { }); }); +describe('when user does not have ML permissions', () => { + const setupWithNoMlPermission = registerTestBed(SemanticTextBanner, { + defaultProps: { isSemanticTextEnabled: true, isPlatinumLicense: false }, + memoryRouter: { wrapComponent: false }, + }); + + const { find } = setupWithNoMlPermission(); + + it('should contain content related to semantic_text', () => { + expect(find('indexDetailsMappingsSemanticTextBanner').text()).toContain( + 'Semantic text now available for platinum license' + ); + }); +}); + describe('When semantic_text is disabled', () => { const setup = registerTestBed(SemanticTextBanner, { defaultProps: { isSemanticTextEnabled: false }, diff --git a/x-pack/plugins/index_management/kibana.jsonc b/x-pack/plugins/index_management/kibana.jsonc index 84e4a6221c502..b9bec8115e019 100644 --- a/x-pack/plugins/index_management/kibana.jsonc +++ b/x-pack/plugins/index_management/kibana.jsonc @@ -8,7 +8,7 @@ "browser": true, "configPath": ["xpack", "index_management"], "requiredPlugins": ["home", "management", "features", "share"], - "optionalPlugins": ["security", "usageCollection", "fleet", "cloud", "ml", "console"], + "optionalPlugins": ["security", "usageCollection", "fleet", "cloud", "ml", "console","licensing"], "requiredBundles": ["kibanaReact", "esUiShared", "runtimeFields"] } } diff --git a/x-pack/plugins/index_management/public/application/app_context.tsx b/x-pack/plugins/index_management/public/application/app_context.tsx index 964a0e098c15e..c5e80263a7fea 100644 --- a/x-pack/plugins/index_management/public/application/app_context.tsx +++ b/x-pack/plugins/index_management/public/application/app_context.tsx @@ -26,6 +26,7 @@ import type { CloudSetup } from '@kbn/cloud-plugin/public'; import type { ConsolePluginStart } from '@kbn/console-plugin/public'; import { EuiBreadcrumb } from '@elastic/eui'; +import { LicensingPluginStart } from '@kbn/licensing-plugin/public'; import { ExtensionsService } from '../services'; import { HttpService, NotificationService, UiMetricService } from './services'; import { IndexManagementBreadcrumb } from './services/breadcrumbs'; @@ -48,6 +49,7 @@ export interface AppDependencies { share: SharePluginStart; cloud?: CloudSetup; console?: ConsolePluginStart; + licensing?: LicensingPluginStart; ml?: MlPluginStart; }; services: { diff --git a/x-pack/plugins/index_management/public/application/mount_management_section.ts b/x-pack/plugins/index_management/public/application/mount_management_section.ts index 76c3dd6cd7a23..d0cd5b07eab0f 100644 --- a/x-pack/plugins/index_management/public/application/mount_management_section.ts +++ b/x-pack/plugins/index_management/public/application/mount_management_section.ts @@ -83,6 +83,7 @@ export function getIndexManagementDependencies({ cloud, console: startDependencies.console, ml: startDependencies.ml, + licensing: startDependencies.licensing, }, services: { httpService, diff --git a/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/details_page_mappings_content.tsx b/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/details_page_mappings_content.tsx index b8d2e3a5dc59f..effa53f717cde 100644 --- a/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/details_page_mappings_content.tsx +++ b/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/details_page_mappings_content.tsx @@ -27,6 +27,7 @@ import { css } from '@emotion/react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import React, { FunctionComponent, useCallback, useEffect, useMemo, useState } from 'react'; +import { ILicense } from '@kbn/licensing-plugin/public'; import { Index } from '../../../../../../common'; import { useDetailsPageMappingsModelManagement } from '../../../../../hooks/use_details_page_mappings_model_management'; import { useAppContext } from '../../../../app_context'; @@ -65,17 +66,33 @@ export const DetailsPageMappingsContent: FunctionComponent<{ }> = ({ index, data, jsonData, refetchMapping, showAboutMappings }) => { const { services: { extensionsService }, - core: { getUrlForApp }, - plugins: { ml }, + core: { + getUrlForApp, + application: { capabilities }, + }, + plugins: { ml, licensing }, url, config, } = useAppContext(); + + const [isPlatinumLicense, setIsPlatinumLicense] = useState(false); + useEffect(() => { + const subscription = licensing?.license$.subscribe((license: ILicense) => { + setIsPlatinumLicense(license.isActive && license.hasAtLeast('platinum')); + }); + + return () => subscription?.unsubscribe(); + }, [licensing]); + const { enableSemanticText: isSemanticTextEnabled } = config; const [errorsInTrainedModelDeployment, setErrorsInTrainedModelDeployment] = useState( [] ); + + const hasMLPermissions = capabilities?.ml?.canGetTrainedModels ? true : false; + const semanticTextInfo = { - isSemanticTextEnabled, + isSemanticTextEnabled: isSemanticTextEnabled && hasMLPermissions && isPlatinumLicense, indexName: index.name, ml, setErrorsInTrainedModelDeployment, @@ -164,7 +181,7 @@ export const DetailsPageMappingsContent: FunctionComponent<{ const [isModalVisible, setIsModalVisible] = useState(false); useEffect(() => { - if (!isSemanticTextEnabled) { + if (!isSemanticTextEnabled || !hasMLPermissions) { return; } @@ -182,15 +199,19 @@ export const DetailsPageMappingsContent: FunctionComponent<{ return; } + if (!hasMLPermissions) { + return; + } + await fetchInferenceToModelIdMap(); } catch (exception) { setSaveMappingError(exception.message); } - }, [fetchInferenceToModelIdMap, isSemanticTextEnabled]); + }, [fetchInferenceToModelIdMap, isSemanticTextEnabled, hasMLPermissions]); const updateMappings = useCallback(async () => { try { - if (isSemanticTextEnabled) { + if (isSemanticTextEnabled && hasMLPermissions) { await fetchInferenceToModelIdMap(); if (pendingDeployments.length > 0) { @@ -487,7 +508,12 @@ export const DetailsPageMappingsContent: FunctionComponent<{ - + {hasMLPermissions && ( + + )} {errorSavingMappings} {isAddingFields && ( diff --git a/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/semantic_text_banner.tsx b/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/semantic_text_banner.tsx index 6eb388a7d4545..0773069754483 100644 --- a/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/semantic_text_banner.tsx +++ b/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/semantic_text_banner.tsx @@ -11,9 +11,47 @@ import useLocalStorage from 'react-use/lib/useLocalStorage'; interface SemanticTextBannerProps { isSemanticTextEnabled: boolean; + isPlatinumLicense?: boolean; } -export function SemanticTextBanner({ isSemanticTextEnabled }: SemanticTextBannerProps) { +const defaultLicenseMessage = ( + + + + ), + }} + /> +); + +const platinumLicenseMessage = ( + + + + ), + }} + /> +); + +export function SemanticTextBanner({ + isSemanticTextEnabled, + isPlatinumLicense = false, +}: SemanticTextBannerProps) { const [isSemanticTextBannerDisplayable, setIsSemanticTextBannerDisplayable] = useLocalStorage('semantic-text-banner-display', true); @@ -23,20 +61,7 @@ export function SemanticTextBanner({ isSemanticTextEnabled }: SemanticTextBanner - - - - ), - }} - /> + {isPlatinumLicense ? platinumLicenseMessage : defaultLicenseMessage} diff --git a/x-pack/plugins/index_management/public/plugin.ts b/x-pack/plugins/index_management/public/plugin.ts index a94fca4f6198f..8314734a0bf61 100644 --- a/x-pack/plugins/index_management/public/plugin.ts +++ b/x-pack/plugins/index_management/public/plugin.ts @@ -112,7 +112,7 @@ export class IndexMgmtUIPlugin } public start(coreStart: CoreStart, plugins: StartDependencies): IndexManagementPluginStart { - const { fleet, usageCollection, cloud, share, console, ml } = plugins; + const { fleet, usageCollection, cloud, share, console, ml, licensing } = plugins; return { extensionsService: this.extensionsService.setup(), getIndexMappingComponent: (deps: { history: ScopedHistory }) => { @@ -134,6 +134,7 @@ export class IndexMgmtUIPlugin cloud, console, ml, + licensing, }, services: { extensionsService: this.extensionsService, diff --git a/x-pack/plugins/index_management/public/types.ts b/x-pack/plugins/index_management/public/types.ts index 30df6157abd8b..634023efb70e0 100644 --- a/x-pack/plugins/index_management/public/types.ts +++ b/x-pack/plugins/index_management/public/types.ts @@ -17,6 +17,7 @@ import { ManagementSetup } from '@kbn/management-plugin/public'; import { MlPluginStart } from '@kbn/ml-plugin/public'; import { SharePluginSetup, SharePluginStart } from '@kbn/share-plugin/public'; import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/public'; +import { LicensingPluginStart } from '@kbn/licensing-plugin/public'; export interface IndexManagementStartServices { analytics: Pick; @@ -40,6 +41,7 @@ export interface StartDependencies { fleet?: unknown; usageCollection: UsageCollectionSetup; management: ManagementSetup; + licensing?: LicensingPluginStart; ml?: MlPluginStart; } From 55687dd53931e33f268085c0fdf578dd954a78e0 Mon Sep 17 00:00:00 2001 From: Nikita Indik Date: Fri, 21 Jun 2024 14:05:55 +0200 Subject: [PATCH 03/33] [Security Solution] `DetectionRulesClient`: return `RuleResponse` from all methods (#186179) **Partially addresses: https://github.com/elastic/kibana/issues/184364** ## Summary This PR is a follow-up to [PR #185748](https://github.com/elastic/kibana/pull/185748) and it converts the remaining `DetectionRulesClient` methods to return `RuleResponse`. Changes in this PR: - These methods now return `RuleResponse` instead of internal `RuleAlertType` type: - `updateRule` - `patchRule` - `upgradePrebuiltRule` - `importRule` --- .../perform_rule_upgrade_route.ts | 3 +- .../api/rules/bulk_patch_rules/route.test.ts | 19 +++---- .../api/rules/bulk_patch_rules/route.ts | 5 +- .../api/rules/bulk_update_rules/route.test.ts | 3 +- .../api/rules/bulk_update_rules/route.ts | 5 +- .../api/rules/import_rules/route.test.ts | 4 +- .../api/rules/patch_rule/route.test.ts | 20 +++---- .../api/rules/patch_rule/route.ts | 5 +- .../api/rules/update_rule/route.test.ts | 3 +- .../api/rules/update_rule/route.ts | 6 +-- ...on_rules_client.create_custom_rule.test.ts | 16 ------ ...detection_rules_client.import_rule.test.ts | 2 + .../detection_rules_client.ts | 9 ++-- ...rules_client.upgrade_prebuilt_rule.test.ts | 6 ++- .../detection_rules_client_interface.ts | 9 ++-- .../methods/create_custom_rule.ts | 8 +-- .../methods/create_prebuilt_rule.ts | 8 +-- .../methods/import_rule.ts | 54 +++++++++++++------ .../methods/patch_rule.ts | 41 ++++++++++---- .../methods/update_rule.ts | 39 +++++++++++--- .../methods/upgrade_prebuilt_rule.ts | 41 +++++++++----- .../logic/detection_rules_client/utils.ts | 10 +++- .../logic/import/import_rules_utils.test.ts | 34 ++++++------ .../logic/import/import_rules_utils.ts | 2 +- .../rule_management/utils/validate.test.ts | 19 +------ .../rule_management/utils/validate.ts | 6 --- 26 files changed, 218 insertions(+), 159 deletions(-) diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/perform_rule_upgrade/perform_rule_upgrade_route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/perform_rule_upgrade/perform_rule_upgrade_route.ts index 33968f6e56fc9..0d1693a69806e 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/perform_rule_upgrade/perform_rule_upgrade_route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/perform_rule_upgrade/perform_rule_upgrade_route.ts @@ -21,7 +21,6 @@ import type { SecuritySolutionPluginRouter } from '../../../../../types'; import { buildRouteValidation } from '../../../../../utils/build_validation/route_validation'; import type { PromisePoolError } from '../../../../../utils/promise_pool'; import { buildSiemResponse } from '../../../routes/utils'; -import { internalRuleToAPIResponse } from '../../../rule_management/normalization/rule_converters'; import { aggregatePrebuiltRuleErrors } from '../../logic/aggregate_prebuilt_rule_errors'; import { performTimelinesInstallation } from '../../logic/perform_timelines_installation'; import { createPrebuiltRuleAssetsClient } from '../../logic/rule_assets/prebuilt_rule_assets_client'; @@ -182,7 +181,7 @@ export const performRuleUpgradeRoute = (router: SecuritySolutionPluginRouter) => failed: ruleErrors.length, }, results: { - updated: updatedRules.map(({ result }) => internalRuleToAPIResponse(result)), + updated: updatedRules.map(({ result }) => result), skipped: skippedRules, }, errors: allErrors, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_patch_rules/route.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_patch_rules/route.test.ts index 7bda64e6a30d8..c6a2ef1b83d8c 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_patch_rules/route.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_patch_rules/route.test.ts @@ -17,6 +17,10 @@ import { typicalMlRulePayload, } from '../../../../routes/__mocks__/request_responses'; import { serverMock, requestContextMock, requestMock } from '../../../../routes/__mocks__'; +import { + getRulesSchemaMock, + getRulesMlSchemaMock, +} from '../../../../../../../common/api/detection_engine/model/rule_schema/rule_response_schema.mock'; import { bulkPatchRulesRoute } from './route'; import { getCreateRulesSchemaMock } from '../../../../../../../common/api/detection_engine/model/rule_schema/mocks'; import { getMlRuleParams, getQueryRuleParams } from '../../../../rule_schema/mocks'; @@ -34,7 +38,7 @@ describe('Bulk patch rules route', () => { clients.rulesClient.find.mockResolvedValue(getFindResultWithSingleHit()); // rule exists clients.rulesClient.update.mockResolvedValue(getRuleMock(getQueryRuleParams())); // update succeeds - clients.detectionRulesClient.patchRule.mockResolvedValue(getRuleMock(getQueryRuleParams())); + clients.detectionRulesClient.patchRule.mockResolvedValue(getRulesSchemaMock()); bulkPatchRulesRoute(server.router, logger); }); @@ -72,14 +76,11 @@ describe('Bulk patch rules route', () => { ...getFindResultWithSingleHit(), data: [getRuleMock(getMlRuleParams())], }); - clients.detectionRulesClient.patchRule.mockResolvedValueOnce( - getRuleMock( - getMlRuleParams({ - anomalyThreshold, - machineLearningJobId: [machineLearningJobId], - }) - ) - ); + clients.detectionRulesClient.patchRule.mockResolvedValueOnce({ + ...getRulesMlSchemaMock(), + anomaly_threshold: anomalyThreshold, + machine_learning_job_id: [machineLearningJobId], + }); const request = requestMock.create({ method: 'patch', diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_patch_rules/route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_patch_rules/route.ts index aa06c04db0619..3b16ba5fa4742 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_patch_rules/route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_patch_rules/route.ts @@ -17,7 +17,6 @@ import { import type { SecuritySolutionPluginRouter } from '../../../../../../types'; import { transformBulkError, buildSiemResponse } from '../../../../routes/utils'; import { getIdBulkError } from '../../../utils/utils'; -import { transformValidateBulkError } from '../../../utils/validate'; import { readRules } from '../../../logic/detection_rules_client/read_rules'; import { getDeprecatedBulkEndpointHeader, logDeprecatedBulkEndpoint } from '../../deprecation'; import { validateRuleDefaultExceptionList } from '../../../logic/exceptions/validate_rule_default_exception_list'; @@ -86,11 +85,11 @@ export const bulkPatchRulesRoute = (router: SecuritySolutionPluginRouter, logger ruleId: payloadRule.id, }); - const rule = await detectionRulesClient.patchRule({ + const patchedRule = await detectionRulesClient.patchRule({ nextParams: payloadRule, }); - return transformValidateBulkError(rule.id, rule); + return patchedRule; } catch (err) { return transformBulkError(idOrRuleIdOrUnknown, err); } diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.test.ts index 5f2a89df6b7dd..ebdc1604346b5 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.test.ts @@ -14,6 +14,7 @@ import { typicalMlRulePayload, } from '../../../../routes/__mocks__/request_responses'; import { serverMock, requestContextMock, requestMock } from '../../../../routes/__mocks__'; +import { getRulesSchemaMock } from '../../../../../../../common/api/detection_engine/model/rule_schema/rule_response_schema.mock'; import { bulkUpdateRulesRoute } from './route'; import type { BulkError } from '../../../../routes/utils'; import { getCreateRulesSchemaMock } from '../../../../../../../common/api/detection_engine/model/rule_schema/mocks'; @@ -32,7 +33,7 @@ describe('Bulk update rules route', () => { clients.rulesClient.find.mockResolvedValue(getFindResultWithSingleHit()); clients.rulesClient.update.mockResolvedValue(getRuleMock(getQueryRuleParams())); - clients.detectionRulesClient.updateRule.mockResolvedValue(getRuleMock(getQueryRuleParams())); + clients.detectionRulesClient.updateRule.mockResolvedValue(getRulesSchemaMock()); clients.appClient.getSignalsIndex.mockReturnValue('.siem-signals-test-index'); bulkUpdateRulesRoute(server.router, logger); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.ts index bae89a74ab0b1..fb95e7e452afd 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/bulk_update_rules/route.ts @@ -16,7 +16,6 @@ import { import type { SecuritySolutionPluginRouter } from '../../../../../../types'; import { DETECTION_ENGINE_RULES_BULK_UPDATE } from '../../../../../../../common/constants'; import { getIdBulkError } from '../../../utils/utils'; -import { transformValidateBulkError } from '../../../utils/validate'; import { transformBulkError, buildSiemResponse, @@ -97,11 +96,11 @@ export const bulkUpdateRulesRoute = (router: SecuritySolutionPluginRouter, logge ruleId: payloadRule.id, }); - const rule = await detectionRulesClient.updateRule({ + const updatedRule = await detectionRulesClient.updateRule({ ruleUpdate: payloadRule, }); - return transformValidateBulkError(rule.id, rule); + return updatedRule; } catch (err) { return transformBulkError(idOrRuleIdOrUnknown, err); } diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/import_rules/route.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/import_rules/route.test.ts index 182e9bb8d92b7..123b39a588c59 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/import_rules/route.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/import_rules/route.test.ts @@ -12,6 +12,7 @@ import { ruleIdsToNdJsonString, rulesToNdJsonString, } from '../../../../../../../common/api/detection_engine/rule_management/mocks'; +import { getRulesSchemaMock } from '../../../../../../../common/api/detection_engine/model/rule_schema/rule_response_schema.mock'; import type { requestMock } from '../../../../routes/__mocks__'; import { createMockConfig, requestContextMock, serverMock } from '../../../../routes/__mocks__'; @@ -47,7 +48,8 @@ describe('Import rules route', () => { clients.rulesClient.find.mockResolvedValue(getEmptyFindResult()); // no extant rules clients.rulesClient.update.mockResolvedValue(getRuleMock(getQueryRuleParams())); - clients.detectionRulesClient.importRule.mockResolvedValue(getRuleMock(getQueryRuleParams())); + clients.detectionRulesClient.createCustomRule.mockResolvedValue(getRulesSchemaMock()); + clients.detectionRulesClient.importRule.mockResolvedValue(getRulesSchemaMock()); clients.actionsClient.getAll.mockResolvedValue([]); context.core.elasticsearch.client.asCurrentUser.search.mockResolvedValue( elasticsearchClientMock.createSuccessTransportRequestPromise(getBasicEmptySearchResponse()) diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/patch_rule/route.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/patch_rule/route.test.ts index c09eebec7689d..6352005acaca5 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/patch_rule/route.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/patch_rule/route.test.ts @@ -20,6 +20,11 @@ import { import { getMlRuleParams, getQueryRuleParams } from '../../../../rule_schema/mocks'; +import { + getRulesSchemaMock, + getRulesMlSchemaMock, +} from '../../../../../../../common/api/detection_engine/model/rule_schema/rule_response_schema.mock'; + import { patchRuleRoute } from './route'; import { HttpAuthzError } from '../../../../../machine_learning/validation'; @@ -34,7 +39,7 @@ describe('Patch rule route', () => { clients.rulesClient.get.mockResolvedValue(getRuleMock(getQueryRuleParams())); // existing rule clients.rulesClient.find.mockResolvedValue(getFindResultWithSingleHit()); // existing rule clients.rulesClient.update.mockResolvedValue(getRuleMock(getQueryRuleParams())); // successful update - clients.detectionRulesClient.patchRule.mockResolvedValue(getRuleMock(getQueryRuleParams())); + clients.detectionRulesClient.patchRule.mockResolvedValue(getRulesSchemaMock()); patchRuleRoute(server.router); }); @@ -99,14 +104,11 @@ describe('Patch rule route', () => { const anomalyThreshold = 4; const machineLearningJobId = 'some_job_id'; - clients.detectionRulesClient.patchRule.mockResolvedValueOnce( - getRuleMock( - getMlRuleParams({ - anomalyThreshold, - machineLearningJobId: [machineLearningJobId], - }) - ) - ); + clients.detectionRulesClient.patchRule.mockResolvedValueOnce({ + ...getRulesMlSchemaMock(), + anomaly_threshold: anomalyThreshold, + machine_learning_job_id: [machineLearningJobId], + }); const request = requestMock.create({ method: 'patch', diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/patch_rule/route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/patch_rule/route.ts index 506b36d4441dc..0e508f43103d6 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/patch_rule/route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/patch_rule/route.ts @@ -20,7 +20,6 @@ import { readRules } from '../../../logic/detection_rules_client/read_rules'; import { checkDefaultRuleExceptionListReferences } from '../../../logic/exceptions/check_for_default_rule_exception_list'; import { validateRuleDefaultExceptionList } from '../../../logic/exceptions/validate_rule_default_exception_list'; import { getIdError } from '../../../utils/utils'; -import { transformValidate } from '../../../utils/validate'; export const patchRuleRoute = (router: SecuritySolutionPluginRouter) => { router.versioned @@ -76,12 +75,12 @@ export const patchRuleRoute = (router: SecuritySolutionPluginRouter) => { ruleId: params.id, }); - const rule = await detectionRulesClient.patchRule({ + const patchedRule = await detectionRulesClient.patchRule({ nextParams: params, }); return response.ok({ - body: transformValidate(rule), + body: patchedRule, }); } catch (err) { const error = transformError(err); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/update_rule/route.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/update_rule/route.test.ts index ff34f1a4c3e56..80db9f68a853b 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/update_rule/route.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/update_rule/route.test.ts @@ -13,6 +13,7 @@ import { typicalMlRulePayload, } from '../../../../routes/__mocks__/request_responses'; import { requestContextMock, serverMock, requestMock } from '../../../../routes/__mocks__'; +import { getRulesSchemaMock } from '../../../../../../../common/api/detection_engine/model/rule_schema/rule_response_schema.mock'; import { DETECTION_ENGINE_RULES_URL } from '../../../../../../../common/constants'; import { updateRuleRoute } from './route'; import { @@ -34,7 +35,7 @@ describe('Update rule route', () => { clients.rulesClient.get.mockResolvedValue(getRuleMock(getQueryRuleParams())); // existing rule clients.rulesClient.find.mockResolvedValue(getFindResultWithSingleHit()); // rule exists clients.rulesClient.update.mockResolvedValue(getRuleMock(getQueryRuleParams())); // successful update - clients.detectionRulesClient.updateRule.mockResolvedValue(getRuleMock(getQueryRuleParams())); + clients.detectionRulesClient.updateRule.mockResolvedValue(getRulesSchemaMock()); clients.appClient.getSignalsIndex.mockReturnValue('.siem-signals-test-index'); updateRuleRoute(server.router); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/update_rule/route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/update_rule/route.ts index 5e77fa64e1fb9..fb7a7a9e3197d 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/update_rule/route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/update_rule/route.ts @@ -20,7 +20,7 @@ import { readRules } from '../../../logic/detection_rules_client/read_rules'; import { checkDefaultRuleExceptionListReferences } from '../../../logic/exceptions/check_for_default_rule_exception_list'; import { validateRuleDefaultExceptionList } from '../../../logic/exceptions/validate_rule_default_exception_list'; import { getIdError } from '../../../utils/utils'; -import { transformValidate, validateResponseActionsPermissions } from '../../../utils/validate'; +import { validateResponseActionsPermissions } from '../../../utils/validate'; export const updateRuleRoute = (router: SecuritySolutionPluginRouter) => { router.versioned @@ -80,12 +80,12 @@ export const updateRuleRoute = (router: SecuritySolutionPluginRouter) => { existingRule ); - const rule = await detectionRulesClient.updateRule({ + const updatedRule = await detectionRulesClient.updateRule({ ruleUpdate: request.body, }); return response.ok({ - body: transformValidate(rule), + body: updatedRule, }); } catch (err) { const error = transformError(err); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.create_custom_rule.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.create_custom_rule.test.ts index 1cf4afecedb26..7aab6640a1b52 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.create_custom_rule.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.create_custom_rule.test.ts @@ -19,8 +19,6 @@ import { buildMlAuthz } from '../../../../machine_learning/authz'; import { throwAuthzError } from '../../../../machine_learning/validation'; import { createDetectionRulesClient } from './detection_rules_client'; import type { IDetectionRulesClient } from './detection_rules_client_interface'; -import { RuleResponseValidationError } from './utils'; -import type { RuleAlertType } from '../../../rule_schema'; jest.mock('../../../../machine_learning/authz'); jest.mock('../../../../machine_learning/validation'); @@ -70,20 +68,6 @@ describe('DetectionRulesClient.createCustomRule', () => { expect(rulesClient.create).not.toHaveBeenCalled(); }); - it('throws if RuleResponse validation fails', async () => { - const internalRuleMock: RuleAlertType = getRuleMock({ - ...getQueryRuleParams(), - /* Casting as 'query' suppress to TS error */ - type: 'fake-non-existent-type' as 'query', - }); - - rulesClient.create.mockResolvedValueOnce(internalRuleMock); - - await expect( - detectionRulesClient.createCustomRule({ params: getCreateMachineLearningRulesSchemaMock() }) - ).rejects.toThrow(RuleResponseValidationError); - }); - it('calls the rulesClient with legacy ML params', async () => { await detectionRulesClient.createCustomRule({ params: getCreateMachineLearningRulesSchemaMock(), diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.import_rule.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.import_rule.test.ts index 4d2cb0ee65519..474fecc186519 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.import_rule.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.import_rule.test.ts @@ -42,6 +42,8 @@ describe('DetectionRulesClient.importRule', () => { beforeEach(() => { rulesClient = rulesClientMock.create(); + rulesClient.create.mockResolvedValue(getRuleMock(getQueryRuleParams())); + rulesClient.update.mockResolvedValue(getRuleMock(getQueryRuleParams())); detectionRulesClient = createDetectionRulesClient(rulesClient, mlAuthz); }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.ts index c26649604b282..ce6043a420907 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.ts @@ -8,7 +8,6 @@ import type { RulesClient } from '@kbn/alerting-plugin/server'; import type { MlAuthz } from '../../../../machine_learning/authz'; -import type { RuleAlertType } from '../../../rule_schema'; import type { RuleResponse } from '../../../../../../common/api/detection_engine/model/rule_schema'; import type { IDetectionRulesClient, @@ -47,13 +46,13 @@ export const createDetectionRulesClient = ( }); }, - async updateRule(args: UpdateRuleArgs): Promise { + async updateRule(args: UpdateRuleArgs): Promise { return withSecuritySpan('DetectionRulesClient.updateRule', async () => { return updateRule(rulesClient, args, mlAuthz); }); }, - async patchRule(args: PatchRuleArgs): Promise { + async patchRule(args: PatchRuleArgs): Promise { return withSecuritySpan('DetectionRulesClient.patchRule', async () => { return patchRule(rulesClient, args, mlAuthz); }); @@ -65,13 +64,13 @@ export const createDetectionRulesClient = ( }); }, - async upgradePrebuiltRule(args: UpgradePrebuiltRuleArgs): Promise { + async upgradePrebuiltRule(args: UpgradePrebuiltRuleArgs): Promise { return withSecuritySpan('DetectionRulesClient.upgradePrebuiltRule', async () => { return upgradePrebuiltRule(rulesClient, args, mlAuthz); }); }, - async importRule(args: ImportRuleArgs): Promise { + async importRule(args: ImportRuleArgs): Promise { return withSecuritySpan('DetectionRulesClient.importRule', async () => { return importRule(rulesClient, args, mlAuthz); }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.upgrade_prebuilt_rule.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.upgrade_prebuilt_rule.test.ts index 97a564cbf86e6..38f3507d2f7ae 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.upgrade_prebuilt_rule.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.upgrade_prebuilt_rule.test.ts @@ -99,10 +99,12 @@ describe('DetectionRulesClient.upgradePrebuiltRule', () => { ruleId: 'rule-id', }); beforeEach(() => { + jest.resetAllMocks(); + rulesClient.create.mockResolvedValue(getRuleMock(getQueryRuleParams())); (readRules as jest.Mock).mockResolvedValue(installedRule); }); - it('deletes the old rule ', async () => { + it('deletes the old rule', async () => { await detectionRulesClient.upgradePrebuiltRule({ ruleAsset }); expect(rulesClient.delete).toHaveBeenCalled(); }); @@ -153,6 +155,8 @@ describe('DetectionRulesClient.upgradePrebuiltRule', () => { }); it('patches the existing rule with the new params from the rule asset', async () => { + rulesClient.update.mockResolvedValue(getRuleMock(getEqlRuleParams())); + await detectionRulesClient.upgradePrebuiltRule({ ruleAsset }); expect(rulesClient.update).toHaveBeenCalledWith( expect.objectContaining({ diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client_interface.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client_interface.ts index 2d9c787119cdf..34c39153206b1 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client_interface.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client_interface.ts @@ -13,17 +13,16 @@ import type { RuleToImport, RuleResponse, } from '../../../../../../common/api/detection_engine'; -import type { RuleAlertType } from '../../../rule_schema'; import type { PrebuiltRuleAsset } from '../../../prebuilt_rules'; export interface IDetectionRulesClient { createCustomRule: (args: CreateCustomRuleArgs) => Promise; createPrebuiltRule: (args: CreatePrebuiltRuleArgs) => Promise; - updateRule: (args: UpdateRuleArgs) => Promise; - patchRule: (args: PatchRuleArgs) => Promise; + updateRule: (args: UpdateRuleArgs) => Promise; + patchRule: (args: PatchRuleArgs) => Promise; deleteRule: (args: DeleteRuleArgs) => Promise; - upgradePrebuiltRule: (args: UpgradePrebuiltRuleArgs) => Promise; - importRule: (args: ImportRuleArgs) => Promise; + upgradePrebuiltRule: (args: UpgradePrebuiltRuleArgs) => Promise; + importRule: (args: ImportRuleArgs) => Promise; } export interface CreateCustomRuleArgs { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/create_custom_rule.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/create_custom_rule.ts index c77446f5baf63..963cac7e10dd1 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/create_custom_rule.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/create_custom_rule.ts @@ -11,8 +11,10 @@ import type { CreateCustomRuleArgs } from '../detection_rules_client_interface'; import type { MlAuthz } from '../../../../../machine_learning/authz'; import type { RuleParams } from '../../../../rule_schema'; import { RuleResponse } from '../../../../../../../common/api/detection_engine/model/rule_schema'; -import { convertCreateAPIToInternalSchema } from '../../../normalization/rule_converters'; -import { transform } from '../../../utils/utils'; +import { + convertCreateAPIToInternalSchema, + internalRuleToAPIResponse, +} from '../../../normalization/rule_converters'; import { validateMlAuth, RuleResponseValidationError } from '../utils'; export const createCustomRule = async ( @@ -29,7 +31,7 @@ export const createCustomRule = async ( }); /* Trying to convert the rule to a RuleResponse object */ - const parseResult = RuleResponse.safeParse(transform(rule)); + const parseResult = RuleResponse.safeParse(internalRuleToAPIResponse(rule)); if (!parseResult.success) { throw new RuleResponseValidationError({ diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/create_prebuilt_rule.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/create_prebuilt_rule.ts index db510d9071c4f..0f0a4aea12d7b 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/create_prebuilt_rule.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/create_prebuilt_rule.ts @@ -11,8 +11,10 @@ import type { CreatePrebuiltRuleArgs } from '../detection_rules_client_interface import type { MlAuthz } from '../../../../../machine_learning/authz'; import { RuleResponse } from '../../../../../../../common/api/detection_engine/model/rule_schema'; import type { RuleParams } from '../../../../rule_schema'; -import { convertCreateAPIToInternalSchema } from '../../../normalization/rule_converters'; -import { transform } from '../../../utils/utils'; +import { + convertCreateAPIToInternalSchema, + internalRuleToAPIResponse, +} from '../../../normalization/rule_converters'; import { validateMlAuth, RuleResponseValidationError } from '../utils'; export const createPrebuiltRule = async ( @@ -34,7 +36,7 @@ export const createPrebuiltRule = async ( }); /* Trying to convert the rule to a RuleResponse object */ - const parseResult = RuleResponse.safeParse(transform(rule)); + const parseResult = RuleResponse.safeParse(internalRuleToAPIResponse(rule)); if (!parseResult.success) { throw new RuleResponseValidationError({ diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/import_rule.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/import_rule.ts index 8761478e30eda..55a0399f1a528 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/import_rule.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/import_rule.ts @@ -6,6 +6,7 @@ */ import type { RulesClient } from '@kbn/alerting-plugin/server'; +import { stringifyZodError } from '@kbn/zod-helpers'; import type { MlAuthz } from '../../../../../machine_learning/authz'; import type { ImportRuleArgs } from '../detection_rules_client_interface'; import type { RuleAlertType, RuleParams } from '../../../../rule_schema'; @@ -13,9 +14,11 @@ import { createBulkErrorObject } from '../../../../routes/utils'; import { convertCreateAPIToInternalSchema, convertUpdateAPIToInternalSchema, + internalRuleToAPIResponse, } from '../../../normalization/rule_converters'; +import { RuleResponse } from '../../../../../../../common/api/detection_engine/model/rule_schema'; -import { validateMlAuth } from '../utils'; +import { validateMlAuth, RuleResponseValidationError } from '../utils'; import { readRules } from '../read_rules'; @@ -23,7 +26,7 @@ export const importRule = async ( rulesClient: RulesClient, importRulePayload: ImportRuleArgs, mlAuthz: MlAuthz -): Promise => { +): Promise => { const { ruleToImport, overwriteRules, allowMissingConnectorSecrets } = importRulePayload; await validateMlAuth(mlAuthz, ruleToImport.type); @@ -34,30 +37,47 @@ export const importRule = async ( id: undefined, }); - if (!existingRule) { - const internalRule = convertCreateAPIToInternalSchema(ruleToImport, { - immutable: false, + if (existingRule && !overwriteRules) { + throw createBulkErrorObject({ + ruleId: existingRule.params.ruleId, + statusCode: 409, + message: `rule_id: "${existingRule.params.ruleId}" already exists`, }); + } - return rulesClient.create({ - data: internalRule, - allowMissingConnectorSecrets, - }); - } else if (existingRule && overwriteRules) { - const newInternalRule = convertUpdateAPIToInternalSchema({ + let importedInternalRule: RuleAlertType; + + if (existingRule && overwriteRules) { + const ruleUpdateParams = convertUpdateAPIToInternalSchema({ existingRule, ruleUpdate: ruleToImport, }); - return rulesClient.update({ + importedInternalRule = await rulesClient.update({ id: existingRule.id, - data: newInternalRule, + data: ruleUpdateParams, }); } else { - throw createBulkErrorObject({ - ruleId: existingRule.params.ruleId, - statusCode: 409, - message: `rule_id: "${existingRule.params.ruleId}" already exists`, + /* Rule does not exist, so we'll create it */ + const ruleCreateParams = convertCreateAPIToInternalSchema(ruleToImport, { + immutable: false, + }); + + importedInternalRule = await rulesClient.create({ + data: ruleCreateParams, + allowMissingConnectorSecrets, }); } + + /* Trying to convert an internal rule to a RuleResponse object */ + const parseResult = RuleResponse.safeParse(internalRuleToAPIResponse(importedInternalRule)); + + if (!parseResult.success) { + throw new RuleResponseValidationError({ + message: stringifyZodError(parseResult.error), + ruleId: importedInternalRule.params.ruleId, + }); + } + + return parseResult.data; }; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/patch_rule.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/patch_rule.ts index b7c8c1539d664..ce9956c5eec84 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/patch_rule.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/patch_rule.ts @@ -6,13 +6,22 @@ */ import type { RulesClient } from '@kbn/alerting-plugin/server'; +import { stringifyZodError } from '@kbn/zod-helpers'; import type { MlAuthz } from '../../../../../machine_learning/authz'; import type { PatchRuleArgs } from '../detection_rules_client_interface'; -import type { RuleAlertType } from '../../../../rule_schema'; import { getIdError } from '../../../utils/utils'; -import { convertPatchAPIToInternalSchema } from '../../../normalization/rule_converters'; +import { + convertPatchAPIToInternalSchema, + internalRuleToAPIResponse, +} from '../../../normalization/rule_converters'; +import { RuleResponse } from '../../../../../../../common/api/detection_engine/model/rule_schema'; -import { validateMlAuth, ClientError, toggleRuleEnabledOnUpdate } from '../utils'; +import { + validateMlAuth, + ClientError, + toggleRuleEnabledOnUpdate, + RuleResponseValidationError, +} from '../utils'; import { readRules } from '../read_rules'; @@ -20,7 +29,7 @@ export const patchRule = async ( rulesClient: RulesClient, args: PatchRuleArgs, mlAuthz: MlAuthz -): Promise => { +): Promise => { const { nextParams } = args; const { rule_id: ruleId, id } = nextParams; @@ -39,16 +48,28 @@ export const patchRule = async ( const patchedRule = convertPatchAPIToInternalSchema(nextParams, existingRule); - const update = await rulesClient.update({ + const patchedInternalRule = await rulesClient.update({ id: existingRule.id, data: patchedRule, }); - await toggleRuleEnabledOnUpdate(rulesClient, existingRule, nextParams.enabled); + const { enabled } = await toggleRuleEnabledOnUpdate( + rulesClient, + existingRule, + nextParams.enabled + ); + + /* Trying to convert the internal rule to a RuleResponse object */ + const parseResult = RuleResponse.safeParse( + internalRuleToAPIResponse({ ...patchedInternalRule, enabled }) + ); - if (nextParams.enabled != null) { - return { ...update, enabled: nextParams.enabled }; - } else { - return update; + if (!parseResult.success) { + throw new RuleResponseValidationError({ + message: stringifyZodError(parseResult.error), + ruleId: patchedInternalRule.params.ruleId, + }); } + + return parseResult.data; }; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/update_rule.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/update_rule.ts index a37b5eaddcee0..8684a7ccd2c61 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/update_rule.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/update_rule.ts @@ -6,13 +6,22 @@ */ import type { RulesClient } from '@kbn/alerting-plugin/server'; +import { stringifyZodError } from '@kbn/zod-helpers'; import type { MlAuthz } from '../../../../../machine_learning/authz'; -import type { RuleAlertType } from '../../../../rule_schema'; import type { UpdateRuleArgs } from '../detection_rules_client_interface'; import { getIdError } from '../../../utils/utils'; -import { convertUpdateAPIToInternalSchema } from '../../../normalization/rule_converters'; +import { + convertUpdateAPIToInternalSchema, + internalRuleToAPIResponse, +} from '../../../normalization/rule_converters'; +import { RuleResponse } from '../../../../../../../common/api/detection_engine/model/rule_schema'; -import { validateMlAuth, ClientError, toggleRuleEnabledOnUpdate } from '../utils'; +import { + validateMlAuth, + ClientError, + toggleRuleEnabledOnUpdate, + RuleResponseValidationError, +} from '../utils'; import { readRules } from '../read_rules'; @@ -20,7 +29,7 @@ export const updateRule = async ( rulesClient: RulesClient, args: UpdateRuleArgs, mlAuthz: MlAuthz -): Promise => { +): Promise => { const { ruleUpdate } = args; const { rule_id: ruleId, id } = ruleUpdate; @@ -42,12 +51,28 @@ export const updateRule = async ( ruleUpdate, }); - const update = await rulesClient.update({ + const updatedInternalRule = await rulesClient.update({ id: existingRule.id, data: newInternalRule, }); - await toggleRuleEnabledOnUpdate(rulesClient, existingRule, ruleUpdate.enabled); + const { enabled } = await toggleRuleEnabledOnUpdate( + rulesClient, + existingRule, + ruleUpdate.enabled + ); + + /* Trying to convert the internal rule to a RuleResponse object */ + const parseResult = RuleResponse.safeParse( + internalRuleToAPIResponse({ ...updatedInternalRule, enabled }) + ); + + if (!parseResult.success) { + throw new RuleResponseValidationError({ + message: stringifyZodError(parseResult.error), + ruleId: updatedInternalRule.params.ruleId, + }); + } - return { ...update, enabled: ruleUpdate.enabled ?? existingRule.enabled }; + return parseResult.data; }; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/upgrade_prebuilt_rule.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/upgrade_prebuilt_rule.ts index 528f81ac9c57b..8c1079f5716db 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/upgrade_prebuilt_rule.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/upgrade_prebuilt_rule.ts @@ -6,16 +6,19 @@ */ import type { RulesClient } from '@kbn/alerting-plugin/server'; +import { stringifyZodError } from '@kbn/zod-helpers'; import type { MlAuthz } from '../../../../../machine_learning/authz'; -import type { RuleAlertType, RuleParams } from '../../../../rule_schema'; +import type { RuleParams } from '../../../../rule_schema'; import type { UpgradePrebuiltRuleArgs } from '../detection_rules_client_interface'; import { convertPatchAPIToInternalSchema, convertCreateAPIToInternalSchema, + internalRuleToAPIResponse, } from '../../../normalization/rule_converters'; import { transformAlertToRuleAction } from '../../../../../../../common/detection_engine/transform_actions'; +import { RuleResponse } from '../../../../../../../common/api/detection_engine/model/rule_schema'; -import { validateMlAuth, ClientError } from '../utils'; +import { validateMlAuth, ClientError, RuleResponseValidationError } from '../utils'; import { readRules } from '../read_rules'; @@ -23,7 +26,7 @@ export const upgradePrebuiltRule = async ( rulesClient: RulesClient, upgradePrebuiltRulePayload: UpgradePrebuiltRuleArgs, mlAuthz: MlAuthz -): Promise => { +): Promise => { const { ruleAsset } = upgradePrebuiltRulePayload; await validateMlAuth(mlAuthz, ruleAsset.type); @@ -56,29 +59,41 @@ export const upgradePrebuiltRule = async ( { immutable: true, defaultEnabled: existingRule.enabled } ); - return rulesClient.create({ + const createdRule = await rulesClient.create({ data: internalRule, options: { id: existingRule.id }, }); + + /* Trying to convert the rule to a RuleResponse object */ + const parseResult = RuleResponse.safeParse(internalRuleToAPIResponse(createdRule)); + + if (!parseResult.success) { + throw new RuleResponseValidationError({ + message: stringifyZodError(parseResult.error), + ruleId: createdRule.params.ruleId, + }); + } + + return parseResult.data; } // Else, simply patch it. const patchedRule = convertPatchAPIToInternalSchema(ruleAsset, existingRule); - await rulesClient.update({ + const patchedInternalRule = await rulesClient.update({ id: existingRule.id, data: patchedRule, }); - const updatedRule = await readRules({ - rulesClient, - ruleId: ruleAsset.rule_id, - id: undefined, - }); + /* Trying to convert the internal rule to a RuleResponse object */ + const parseResult = RuleResponse.safeParse(internalRuleToAPIResponse(patchedInternalRule)); - if (!updatedRule) { - throw new ClientError(`Rule ${ruleAsset.rule_id} not found after upgrade`, 500); + if (!parseResult.success) { + throw new RuleResponseValidationError({ + message: stringifyZodError(parseResult.error), + ruleId: patchedInternalRule.params.ruleId, + }); } - return updatedRule; + return parseResult.data; }; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/utils.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/utils.ts index 624f86a49422a..4f25497b30564 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/utils.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/utils.ts @@ -20,12 +20,18 @@ export const toggleRuleEnabledOnUpdate = async ( rulesClient: RulesClient, existingRule: RuleAlertType, updatedRuleEnabled?: boolean -) => { +): Promise<{ enabled: boolean }> => { if (existingRule.enabled && updatedRuleEnabled === false) { await rulesClient.disable({ id: existingRule.id }); - } else if (!existingRule.enabled && updatedRuleEnabled === true) { + return { enabled: false }; + } + + if (!existingRule.enabled && updatedRuleEnabled === true) { await rulesClient.enable({ id: existingRule.id }); + return { enabled: true }; } + + return { enabled: existingRule.enabled }; }; export const validateMlAuth = async (mlAuthz: MlAuthz, ruleType: Type) => { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/import_rules_utils.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/import_rules_utils.test.ts index 5fef4d40a22e5..6537dfed3a169 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/import_rules_utils.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/import_rules_utils.test.ts @@ -6,28 +6,21 @@ */ import { getImportRulesSchemaMock } from '../../../../../../common/api/detection_engine/rule_management/mocks'; -import { getQueryRuleParams } from '../../../rule_schema/mocks'; - +import { getRulesSchemaMock } from '../../../../../../common/api/detection_engine/model/rule_schema/rule_response_schema.mock'; import { requestContextMock } from '../../../routes/__mocks__'; -import { getRuleMock, getEmptyFindResult } from '../../../routes/__mocks__/request_responses'; import { importRules } from './import_rules_utils'; import { createBulkErrorObject } from '../../../routes/utils'; describe('importRules', () => { const { clients, context } = requestContextMock.createTools(); - const importedRule = getRuleMock(getQueryRuleParams()); + const ruleToImport = getImportRulesSchemaMock(); beforeEach(() => { - clients.rulesClient.find.mockResolvedValue(getEmptyFindResult()); - clients.rulesClient.update.mockResolvedValue(importedRule); - clients.detectionRulesClient.importRule.mockResolvedValue(importedRule); - clients.actionsClient.getAll.mockResolvedValue([]); - jest.clearAllMocks(); }); - it('returns rules response if no rules to import', async () => { + it('returns an empty rules response if no rules to import', async () => { const result = await importRules({ ruleChunks: [], rulesResponseAcc: [], @@ -62,12 +55,13 @@ describe('importRules', () => { it('returns 409 error if DetectionRulesClient throws with 409 - existing rule', async () => { clients.detectionRulesClient.importRule.mockImplementationOnce(async () => { throw createBulkErrorObject({ - ruleId: importedRule.params.ruleId, + ruleId: ruleToImport.rule_id, statusCode: 409, - message: `rule_id: "${importedRule.params.ruleId}" already exists`, + message: `rule_id: "${ruleToImport.rule_id}" already exists`, }); }); - const ruleChunk = [getImportRulesSchemaMock({ rule_id: importedRule.params.ruleId })]; + + const ruleChunk = [ruleToImport]; const result = await importRules({ ruleChunks: [ruleChunk], rulesResponseAcc: [], @@ -79,15 +73,21 @@ describe('importRules', () => { expect(result).toEqual([ { error: { - message: `rule_id: "${importedRule.params.ruleId}" already exists`, + message: `rule_id: "${ruleToImport.rule_id}" already exists`, status_code: 409, }, - rule_id: importedRule.params.ruleId, + rule_id: ruleToImport.rule_id, }, ]); }); + it('creates rule if no matching existing rule found', async () => { - const ruleChunk = [getImportRulesSchemaMock({ rule_id: importedRule.params.ruleId })]; + clients.detectionRulesClient.importRule.mockResolvedValue({ + ...getRulesSchemaMock(), + rule_id: ruleToImport.rule_id, + }); + + const ruleChunk = [ruleToImport]; const result = await importRules({ ruleChunks: [ruleChunk], rulesResponseAcc: [], @@ -96,6 +96,6 @@ describe('importRules', () => { existingLists: {}, }); - expect(result).toEqual([{ rule_id: importedRule.params.ruleId, status_code: 200 }]); + expect(result).toEqual([{ rule_id: ruleToImport.rule_id, status_code: 200 }]); }); }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/import_rules_utils.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/import_rules_utils.ts index 5c64a2a6f9a33..5fc57a7a91e45 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/import_rules_utils.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/import_rules_utils.ts @@ -98,7 +98,7 @@ export const importRules = async ({ }); resolve({ - rule_id: importedRule.params.ruleId, + rule_id: importedRule.rule_id, status_code: 200, }); } catch (err) { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/validate.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/validate.test.ts index 8fa275c7ba59f..f11e31691d25b 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/validate.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/validate.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { transformValidate, transformValidateBulkError } from './validate'; +import { transformValidateBulkError } from './validate'; import type { BulkError } from '../../routes/utils'; import { getRuleMock } from '../../routes/__mocks__/request_responses'; import { getListArrayMock } from '../../../../../common/detection_engine/schemas/types/lists.mock'; @@ -82,23 +82,6 @@ export const ruleOutput = (): RuleResponse => ({ }); describe('validate', () => { - describe('transformValidate', () => { - test('it should do a validation correctly of a partial alert', () => { - const ruleAlert = getRuleMock(getQueryRuleParams()); - const validated = transformValidate(ruleAlert); - expect(validated).toEqual(ruleOutput()); - }); - - test('it should do an in-validation correctly of a partial alert', () => { - const ruleAlert = getRuleMock(getQueryRuleParams()); - // @ts-expect-error - delete ruleAlert.name; - expect(() => { - transformValidate(ruleAlert); - }).toThrowError('Required'); - }); - }); - describe('transformValidateBulkError', () => { test('it should do a validation correctly of a rule id', () => { const ruleAlert = getRuleMock(getQueryRuleParams()); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/validate.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/validate.ts index bd66139529cb3..298b7f62d2973 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/validate.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/utils/validate.ts @@ -31,14 +31,8 @@ import { type UnifiedQueryRuleParams, } from '../../rule_schema'; import { type BulkError, createBulkErrorObject } from '../../routes/utils'; -import { transform } from './utils'; import { internalRuleToAPIResponse } from '../normalization/rule_converters'; -export const transformValidate = (rule: PartialRule): RuleResponse => { - const transformed = transform(rule); - return RuleResponse.parse(transformed); -}; - export const transformValidateBulkError = ( ruleId: string, rule: PartialRule From a9089be4b30224b2cc27d3a141abcd5514fcbae9 Mon Sep 17 00:00:00 2001 From: Bena Kansara <69037875+benakansara@users.noreply.github.com> Date: Fri, 21 Jun 2024 14:10:05 +0200 Subject: [PATCH 04/33] [SLO] Fix alert reason not being hyperlinked in SLO details and SLO alerts embeddable (#186563) Closes https://github.com/elastic/kibana/issues/183322 - Fixes alert reason link in SLO details -> Alerts tab - Fixes alert reason link in SLO alerts embeddable https://github.com/elastic/kibana/assets/69037875/04805171-b3ad-4d83-a89d-317345d13675 https://github.com/elastic/kibana/assets/69037875/eaaab802-bc88-4977-a2e8-f30c566eb635 --- .../embeddable/slo/alerts/components/slo_alerts_table.tsx | 2 ++ .../slo/public/embeddable/slo/alerts/types.ts | 2 ++ .../public/pages/slo_details/components/slo_detail_alerts.tsx | 2 ++ 3 files changed, 6 insertions(+) diff --git a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/alerts/components/slo_alerts_table.tsx b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/alerts/components/slo_alerts_table.tsx index c53f7c7c73d20..157c636ff131e 100644 --- a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/alerts/components/slo_alerts_table.tsx +++ b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/alerts/components/slo_alerts_table.tsx @@ -98,6 +98,7 @@ export function SloAlertsTable({ }: Props) { const { triggersActionsUi: { alertsTableConfigurationRegistry, getAlertsStateTable: AlertsStateTable }, + observability: { observabilityRuleTypeRegistry }, } = deps; return ( ); } diff --git a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/alerts/types.ts b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/alerts/types.ts index 7682c3f55bedf..d3cb4629584ff 100644 --- a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/alerts/types.ts +++ b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/alerts/types.ts @@ -26,6 +26,7 @@ import { EmbeddableApiContext, HasEditCapabilities, } from '@kbn/presentation-publishing'; +import { ObservabilityPublicStart } from '@kbn/observability-plugin/public'; export interface SloItem { id: string; @@ -71,6 +72,7 @@ export interface SloEmbeddableDeps { http: CoreStart['http']; i18n: CoreStart['i18n']; application: ApplicationStart; + observability: ObservabilityPublicStart; triggersActionsUi: TriggersAndActionsUIPublicPluginStart; data: DataPublicPluginStart; notifications: NotificationsStart; diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slo_details/components/slo_detail_alerts.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slo_details/components/slo_detail_alerts.tsx index 90db5efb27311..ed4f5dd89fb8f 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slo_details/components/slo_detail_alerts.tsx +++ b/x-pack/plugins/observability_solution/slo/public/pages/slo_details/components/slo_detail_alerts.tsx @@ -19,6 +19,7 @@ export interface Props { export function SloDetailsAlerts({ slo }: Props) { const { triggersActionsUi: { alertsTableConfigurationRegistry, getAlertsStateTable: AlertsStateTable }, + observability: { observabilityRuleTypeRegistry }, } = useKibana().services; return ( @@ -42,6 +43,7 @@ export function SloDetailsAlerts({ slo }: Props) { }} showAlertStatusWithFlapping pageSize={100} + cellContext={{ observabilityRuleTypeRegistry }} /> From 2820ae44dca2110490fc851e7be4de7dbb6f02e1 Mon Sep 17 00:00:00 2001 From: Tomasz Ciecierski Date: Fri, 21 Jun 2024 15:18:58 +0200 Subject: [PATCH 05/33] [EDR Workflows] Change crowdstrike fields to ecs fields (#186469) --- .../service/response_actions/constants.ts | 2 +- .../use_alert_response_actions_support.ts | 20 +++------- .../mock/endpoint/endpoint_alert_data_mock.ts | 16 ++++---- .../rule_exceptions/utils/helpers.test.tsx | 8 ++-- .../highlighted_fields_cell.test.tsx | 9 +++-- .../hooks/use_highlighted_fields.test.tsx | 18 ++++----- .../emulator_plugins/crowdstrike/mocks.ts | 4 +- .../crowdstrike/crowdstrike_actions_client.ts | 39 ++++++++++++------- .../actions/clients/crowdstrike/mocks.ts | 6 +-- 9 files changed, 62 insertions(+), 60 deletions(-) diff --git a/x-pack/plugins/security_solution/common/endpoint/service/response_actions/constants.ts b/x-pack/plugins/security_solution/common/endpoint/service/response_actions/constants.ts index fdfa5ed02cb73..447ae1f98c653 100644 --- a/x-pack/plugins/security_solution/common/endpoint/service/response_actions/constants.ts +++ b/x-pack/plugins/security_solution/common/endpoint/service/response_actions/constants.ts @@ -183,5 +183,5 @@ export const RESPONSE_ACTIONS_ALERT_AGENT_ID_FIELD: Readonly< > = Object.freeze({ endpoint: 'agent.id', sentinel_one: 'observer.serial_number', - crowdstrike: 'crowdstrike.event.DeviceId', + crowdstrike: 'device.id', }); diff --git a/x-pack/plugins/security_solution/public/common/hooks/endpoint/use_alert_response_actions_support.ts b/x-pack/plugins/security_solution/public/common/hooks/endpoint/use_alert_response_actions_support.ts index 7d4698695c3b8..60917dfb3a9f7 100644 --- a/x-pack/plugins/security_solution/public/common/hooks/endpoint/use_alert_response_actions_support.ts +++ b/x-pack/plugins/security_solution/public/common/hooks/endpoint/use_alert_response_actions_support.ts @@ -132,7 +132,7 @@ export const useAlertResponseActionsSupport = ( if (agentType === 'crowdstrike') { return getAlertDetailsFieldValue( - { category: 'crowdstrike', field: RESPONSE_ACTIONS_ALERT_AGENT_ID_FIELD.crowdstrike }, + { category: 'device', field: RESPONSE_ACTIONS_ALERT_AGENT_ID_FIELD.crowdstrike }, eventData ); } @@ -172,23 +172,15 @@ export const useAlertResponseActionsSupport = ( }, [agentType, isFeatureEnabled]); const hostName = useMemo(() => { - // TODO:PT need to check if crowdstrike event has `host.name` - if (agentType === 'crowdstrike') { - return getAlertDetailsFieldValue( - { category: 'crowdstrike', field: 'crowdstrike.event.HostName' }, - eventData - ); - } - return getAlertDetailsFieldValue({ category: 'host', field: 'host.name' }, eventData); - }, [agentType, eventData]); + }, [eventData]); const platform = useMemo(() => { - // TODO:PT need to check if crowdstrike event has `host.os.family` + // TODO:TC I couldn't find host.os.family in the example data, thus using host.os.type and host.os.platform which are present one at a time in different type of events if (agentType === 'crowdstrike') { - return getAlertDetailsFieldValue( - { category: 'crowdstrike', field: 'crowdstrike.event.Platform' }, - eventData + return ( + getAlertDetailsFieldValue({ category: 'host', field: 'host.os.type' }, eventData) || + getAlertDetailsFieldValue({ category: 'host', field: 'host.os.platform' }, eventData) ); } diff --git a/x-pack/plugins/security_solution/public/common/mock/endpoint/endpoint_alert_data_mock.ts b/x-pack/plugins/security_solution/public/common/mock/endpoint/endpoint_alert_data_mock.ts index 96003266c1315..0de961badd9b1 100644 --- a/x-pack/plugins/security_solution/public/common/mock/endpoint/endpoint_alert_data_mock.ts +++ b/x-pack/plugins/security_solution/public/common/mock/endpoint/endpoint_alert_data_mock.ts @@ -90,7 +90,7 @@ const generateEndpointAlertDetailsItemDataMock = ( }, { category: 'agent', - field: 'agent.id', + field: RESPONSE_ACTIONS_ALERT_AGENT_ID_FIELD.endpoint, values: ['abfe4a35-d5b4-42a0-a539-bd054c791769'], originalValue: ['abfe4a35-d5b4-42a0-a539-bd054c791769'], isObjectArray: false, @@ -185,22 +185,22 @@ const generateCrowdStrikeAlertDetailsItemDataMock = ( data.push( { - category: 'crowdstrike', + category: 'device', field: RESPONSE_ACTIONS_ALERT_AGENT_ID_FIELD.crowdstrike, values: ['abfe4a35-d5b4-42a0-a539-bd054c791769'], originalValue: ['abfe4a35-d5b4-42a0-a539-bd054c791769'], isObjectArray: false, }, { - category: 'crowdstrike', - field: 'crowdstrike.event.HostName', - values: ['elastic-host-win'], - originalValue: ['windows-native'], + category: 'host', + field: 'host.os.type', + values: ['windows'], + originalValue: ['windows'], isObjectArray: false, }, { - category: 'crowdstrike', - field: 'crowdstrike.event.Platform', + category: 'host', + field: 'host.os.platform', values: ['windows'], originalValue: ['windows'], isObjectArray: false, diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/utils/helpers.test.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/utils/helpers.test.tsx index c3b288cb15c79..574aa6a6c1970 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/utils/helpers.test.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/utils/helpers.test.tsx @@ -49,6 +49,8 @@ import { ALERT_ORIGINAL_EVENT_MODULE, } from '../../../../common/field_maps/field_names'; import { AGENT_ID } from './highlighted_fields_config'; +import { RESPONSE_ACTIONS_ALERT_AGENT_ID_FIELD } from '../../../../common/endpoint/service/response_actions/constants'; + jest.mock('uuid', () => ({ v4: jest.fn().mockReturnValue('123'), })); @@ -1796,17 +1798,17 @@ describe('Exception helpers', () => { id: 'host.name', }, { - id: 'agent.id', + id: RESPONSE_ACTIONS_ALERT_AGENT_ID_FIELD.endpoint, label: 'Agent status', overrideField: 'agent.status', }, { - id: 'observer.serial_number', + id: RESPONSE_ACTIONS_ALERT_AGENT_ID_FIELD.sentinel_one, overrideField: 'agent.status', label: 'Agent status', }, { - id: 'crowdstrike.event.DeviceId', + id: RESPONSE_ACTIONS_ALERT_AGENT_ID_FIELD.crowdstrike, overrideField: 'agent.status', label: 'Agent status', }, diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/highlighted_fields_cell.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/highlighted_fields_cell.test.tsx index 46f22886c8b58..d7fb75cfa57a4 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/right/components/highlighted_fields_cell.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/right/components/highlighted_fields_cell.test.tsx @@ -25,6 +25,7 @@ import { useGetSentinelOneAgentStatus, } from '../../../../management/hooks/agents/use_get_agent_status'; import { type ExpandableFlyoutApi, useExpandableFlyoutApi } from '@kbn/expandable-flyout'; +import { RESPONSE_ACTIONS_ALERT_AGENT_ID_FIELD } from '../../../../../common/endpoint/service/response_actions/constants'; jest.mock('../../../../management/hooks'); jest.mock('../../../../management/hooks/agents/use_get_agent_status'); @@ -116,7 +117,7 @@ describe('', () => { // TODO: 8.15 simplify when `agentStatusClientEnabled` FF is enabled and removed it.each(Object.keys(hooksToMock))( - 'should render SentinelOne agent status cell if field is agent.status and `originalField` is `observer.serial_number` with %s hook', + `should render SentinelOne agent status cell if field is agent.status and 'originalField' is ${RESPONSE_ACTIONS_ALERT_AGENT_ID_FIELD.sentinel_one} with %s hook`, (hookName) => { const hook = hooksToMock[hookName]; useAgentStatusHookMock.mockImplementation(() => hook); @@ -131,7 +132,7 @@ describe('', () => { ); @@ -140,7 +141,7 @@ describe('', () => { } ); it.each(Object.keys(hooksToMock))( - 'should render Crowdstrike agent status cell if field is agent.status and `originalField` is `crowdstrike.event.DeviceId` with %s hook', + `should render Crowdstrike agent status cell if field is agent.status and 'originalField' is ${RESPONSE_ACTIONS_ALERT_AGENT_ID_FIELD.crowdstrike} with %s hook`, (hookName) => { const hook = hooksToMock[hookName]; useAgentStatusHookMock.mockImplementation(() => hook); @@ -155,7 +156,7 @@ describe('', () => { ); diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_highlighted_fields.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_highlighted_fields.test.tsx index c78e7313792c8..28a7277fa5318 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_highlighted_fields.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_highlighted_fields.test.tsx @@ -126,13 +126,13 @@ describe('useHighlightedFields', () => { const hookResult = renderHook(() => useHighlightedFields({ dataFormattedForFieldBrowser: dataFormattedForFieldBrowser.concat({ - category: 'crowdstrike', - field: 'crowdstrike.event.DeviceId', - values: ['expectedCrowdstrikeAgentId'], - originalValue: ['expectedCrowdstrikeAgentId'], + category: 'device', + field: RESPONSE_ACTIONS_ALERT_AGENT_ID_FIELD.crowdstrike, + values: ['abfe4a35-d5b4-42a0-a539-bd054c791769'], + originalValue: ['abfe4a35-d5b4-42a0-a539-bd054c791769'], isObjectArray: false, }), - investigationFields: ['agent.status', 'crowdstrike.event.DeviceId'], + investigationFields: ['agent.status', 'device.id'], }) ); @@ -188,14 +188,14 @@ describe('useHighlightedFields', () => { isObjectArray: false, }, { - category: 'crowdstrike', - field: 'crowdstrike.event.DeviceId', + category: 'device', + field: 'device.id', values: ['expectedCrowdstrikeAgentId'], originalValue: ['expectedCrowdstrikeAgentId'], isObjectArray: false, }, ]), - investigationFields: ['agent.status', 'crowdstrike.event.DeviceId'], + investigationFields: ['agent.status', 'device.id'], }) ); @@ -203,7 +203,7 @@ describe('useHighlightedFields', () => { 'kibana.alert.rule.type': { values: ['query'], }, - 'crowdstrike.event.DeviceId': { + 'device.id': { values: ['expectedCrowdstrikeAgentId'], }, }); diff --git a/x-pack/plugins/security_solution/scripts/endpoint/api_emulator/emulator_plugins/crowdstrike/mocks.ts b/x-pack/plugins/security_solution/scripts/endpoint/api_emulator/emulator_plugins/crowdstrike/mocks.ts index cab12ebaeac1a..e915a16c250b0 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/api_emulator/emulator_plugins/crowdstrike/mocks.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/api_emulator/emulator_plugins/crowdstrike/mocks.ts @@ -30,7 +30,7 @@ export const createCrowdstrikeAgentDetailsMock = ( ): CrowdstrikeGetAgentsResponse['resources'][number] => { return merge( { - device_id: '0eec3717b2eb472195bbb3964c05cfd3', + device_id: '5f4ed7ec2690431f8fa79213268779cb', cid: '234567890', agent_load_flags: '0', agent_local_time: '2024-03-18T22:21:00.173Z', @@ -141,7 +141,7 @@ export const createCrowdstrikeGetAgentOnlineStatusDetailsMock: ( return merge( { state: 'online', - id: 'ae86ad7402404048ac9b8d94db8f7ba2', + id: '5f4ed7ec2690431f8fa79213268779cb', }, overrides ); diff --git a/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/crowdstrike/crowdstrike_actions_client.ts b/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/crowdstrike/crowdstrike_actions_client.ts index 3e90ee30572c3..ac982f43f151f 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/crowdstrike/crowdstrike_actions_client.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/crowdstrike/crowdstrike_actions_client.ts @@ -68,7 +68,7 @@ export class CrowdstrikeActionsClient extends ResponseActionsClientImpl { const agentId = actionRequest.endpoint_ids[0]; const eventDetails = await this.getEventDetailsById(agentId); - const hostname = eventDetails.crowdstrike.event.HostName; + const hostname = eventDetails.host.name; return super.writeActionRequestToEndpointIndex({ ...actionRequest, hosts: { @@ -120,34 +120,43 @@ export class CrowdstrikeActionsClient extends ResponseActionsClientImpl { } private async getEventDetailsById(agentId: string): Promise<{ - crowdstrike: { event: { HostName: string } }; + host: { name: string }; }> { const search = { index: ['logs-crowdstrike.fdr*', 'logs-crowdstrike.falcon*'], size: 1, - _source: ['crowdstrike.event.HostName'], + _source: ['host.name'], body: { query: { bool: { - filter: [{ term: { 'crowdstrike.event.DeviceId': agentId } }], + filter: [{ term: { 'device.id': agentId } }], }, }, }, }; - const result: SearchResponse<{ crowdstrike: { event: { HostName: string } } }> = - await this.options.esClient - .search<{ crowdstrike: { event: { HostName: string } } }>(search, { + try { + const result: SearchResponse<{ host: { name: string } }> = + await this.options.esClient.search<{ host: { name: string } }>(search, { ignore: [404], - }) - .catch((err) => { - throw new ResponseActionsClientError( - `Failed to fetch event document: ${err.message}`, - err.statusCode ?? 500, - err - ); }); - return result.hits.hits?.[0]?._source as { crowdstrike: { event: { HostName: string } } }; + // Check if host name exists + const hostName = result.hits.hits?.[0]?._source?.host?.name; + if (!hostName) { + throw new ResponseActionsClientError( + `Host name not found in the event document for agentId: ${agentId}`, + 404 + ); + } + + return result.hits.hits[0]._source as { host: { name: string } }; + } catch (err) { + throw new ResponseActionsClientError( + `Failed to fetch event document: ${err.message}`, + err.statusCode ?? 500, + err + ); + } } // TODO TC: uncomment when working on agent status support diff --git a/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/crowdstrike/mocks.ts b/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/crowdstrike/mocks.ts index 8ee3dcd51aeda..d1c0734e90909 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/crowdstrike/mocks.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/crowdstrike/mocks.ts @@ -89,10 +89,8 @@ const createEventSearchResponseMock = (): CrowdstrikeEventSearchResponseMock => _id: '1-2-3', _index: 'logs-crowdstrike.fdr-default', _source: { - crowdstrike: { - event: { - HostName: 'Crowdstrike-1460', - }, + host: { + name: 'Crowdstrike-1460', }, }, }, From c16c036ac1ab0e91ea98445b1f9d71e105afa33f Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Fri, 21 Jun 2024 15:20:00 +0200 Subject: [PATCH 06/33] [OAS] Bump joi-to-json for meta copy fix (#186592) ## Summary Bumps `joi-to-json` for new meta copy behaviour. See https://github.com/kenspirit/joi-to-json/pull/52. --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 0969445f4255f..a0777e361b67c 100644 --- a/package.json +++ b/package.json @@ -1055,7 +1055,7 @@ "ipaddr.js": "2.0.0", "isbinaryfile": "4.0.2", "joi": "^17.7.1", - "joi-to-json": "^4.2.1", + "joi-to-json": "^4.3.0", "jquery": "^3.5.0", "js-levenshtein": "^1.1.6", "js-search": "^1.4.3", diff --git a/yarn.lock b/yarn.lock index 7ae0cbe249d52..e0070b5f0b15a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21238,10 +21238,10 @@ jest@^29.6.1: import-local "^3.0.2" jest-cli "^29.6.1" -joi-to-json@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/joi-to-json/-/joi-to-json-4.2.1.tgz#be275866fd617c63f1ae81eea428fa5de6e036a4" - integrity sha512-HIPyrmT9akm2C4zOZ3qR30GkQs7JBr3LX1/oXXWyC2E1NUnDHjTczqHT0H6l495B99xAyFaJ6LM6KRFTdkKoxQ== +joi-to-json@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/joi-to-json/-/joi-to-json-4.3.0.tgz#c56131ecf8a772fce89fd98b7f81d7b0fac31dbc" + integrity sha512-j6wV/liW2CmPJBJCAsRHegS91JV2QQtg2J/Z/67VfdSvuE65njCx6DrYZY1cw0BXwlxHewpVtiDnY8W0aaNr+A== dependencies: combinations "^1.0.0" lodash "^4.17.21" From e9a224d5b0f3ad19643832a50f7c19181afe4f99 Mon Sep 17 00:00:00 2001 From: Achyut Jhunjhunwala Date: Fri, 21 Jun 2024 15:24:22 +0200 Subject: [PATCH 07/33] [Dataset Quality] Fix flaky summary test (#186618) ## Summary Closes https://github.com/elastic/kibana/issues/186549 --- .../functional/apps/dataset_quality/dataset_quality_summary.ts | 3 +-- x-pack/test/functional/page_objects/dataset_quality.ts | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/x-pack/test/functional/apps/dataset_quality/dataset_quality_summary.ts b/x-pack/test/functional/apps/dataset_quality/dataset_quality_summary.ts index be70275f0874d..491a3b20c8004 100644 --- a/x-pack/test/functional/apps/dataset_quality/dataset_quality_summary.ts +++ b/x-pack/test/functional/apps/dataset_quality/dataset_quality_summary.ts @@ -49,6 +49,7 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid describe('Dataset quality summary', () => { before(async () => { + await synthtrace.index(getInitialTestLogs({ to, count: 4 })); await PageObjects.datasetQuality.navigateTo(); }); @@ -57,8 +58,6 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid }); it('shows poor, degraded and good count as 0 and all dataset as healthy', async () => { - await synthtrace.index(getInitialTestLogs({ to, count: 4 })); - await PageObjects.datasetQuality.refreshTable(); const summary = await PageObjects.datasetQuality.parseSummaryPanel(); expect(summary).to.eql({ datasetHealthPoor: '0', diff --git a/x-pack/test/functional/page_objects/dataset_quality.ts b/x-pack/test/functional/page_objects/dataset_quality.ts index d9b274e158536..dc580d2951c6a 100644 --- a/x-pack/test/functional/page_objects/dataset_quality.ts +++ b/x-pack/test/functional/page_objects/dataset_quality.ts @@ -220,7 +220,8 @@ export function DatasetQualityPageObject({ getPageObjects, getService }: FtrProv async refreshTable() { const filtersContainer = await testSubjects.find( - testSubjectSelectors.datasetQualityFiltersContainer + testSubjectSelectors.datasetQualityFiltersContainer, + 20 * 1000 ); const refreshButton = await filtersContainer.findByTestSubject( testSubjectSelectors.superDatePickerApplyTimeButton From 6faadda1eb78788114e1f530dcdd6718a252afa5 Mon Sep 17 00:00:00 2001 From: Ying Mao Date: Fri, 21 Jun 2024 09:29:13 -0400 Subject: [PATCH 08/33] [Response Ops][Task Manager] Integration test for switching between task claim strategies (#186419) Resolves https://github.com/elastic/kibana/issues/184941 ## Summary Adds integration test to verify that restarting Kibana with a different task claim strategy does not break anything and tasks are claimed as expected. --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../lib/setup_test_servers.ts | 54 ++- .../task_manager_switch_task_claimers.test.ts | 369 ++++++++++++++++++ 2 files changed, 410 insertions(+), 13 deletions(-) create mode 100644 x-pack/plugins/task_manager/server/integration_tests/task_manager_switch_task_claimers.test.ts diff --git a/x-pack/plugins/task_manager/server/integration_tests/lib/setup_test_servers.ts b/x-pack/plugins/task_manager/server/integration_tests/lib/setup_test_servers.ts index 7ded9629eb31e..5ec8e724ae819 100644 --- a/x-pack/plugins/task_manager/server/integration_tests/lib/setup_test_servers.ts +++ b/x-pack/plugins/task_manager/server/integration_tests/lib/setup_test_servers.ts @@ -8,19 +8,8 @@ import deepmerge from 'deepmerge'; import { createTestServers, createRootWithCorePlugins } from '@kbn/core-test-helpers-kbn-server'; -export async function setupTestServers(settings = {}) { - const { startES } = createTestServers({ - adjustTimeout: (t) => jest.setTimeout(t), - settings: { - es: { - license: 'trial', - }, - }, - }); - - const esServer = await startES(); - - const root = createRootWithCorePlugins( +function createRoot(settings = {}) { + return createRootWithCorePlugins( deepmerge( { logging: { @@ -32,6 +21,14 @@ export async function setupTestServers(settings = {}) { name: 'plugins.taskManager', level: 'all', }, + { + name: 'plugins.taskManager.metrics-debugger', + level: 'warn', + }, + { + name: 'plugins.taskManager.metrics-subscribe-debugger', + level: 'warn', + }, ], }, }, @@ -39,6 +36,20 @@ export async function setupTestServers(settings = {}) { ), { oss: false } ); +} +export async function setupTestServers(settings = {}) { + const { startES } = createTestServers({ + adjustTimeout: (t) => jest.setTimeout(t), + settings: { + es: { + license: 'trial', + }, + }, + }); + + const esServer = await startES(); + + const root = createRoot(settings); await root.preboot(); const coreSetup = await root.setup(); @@ -54,3 +65,20 @@ export async function setupTestServers(settings = {}) { }, }; } + +export async function setupKibanaServer(settings = {}) { + const root = createRoot(settings); + + await root.preboot(); + const coreSetup = await root.setup(); + const coreStart = await root.start(); + + return { + kibanaServer: { + root, + coreSetup, + coreStart, + stop: async () => await root.shutdown(), + }, + }; +} diff --git a/x-pack/plugins/task_manager/server/integration_tests/task_manager_switch_task_claimers.test.ts b/x-pack/plugins/task_manager/server/integration_tests/task_manager_switch_task_claimers.test.ts new file mode 100644 index 0000000000000..46450a93df30a --- /dev/null +++ b/x-pack/plugins/task_manager/server/integration_tests/task_manager_switch_task_claimers.test.ts @@ -0,0 +1,369 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { v4 as uuidV4 } from 'uuid'; +import { schema } from '@kbn/config-schema'; +import { SerializedConcreteTaskInstance, TaskStatus } from '../task'; +import type { TaskClaimingOpts } from '../queries/task_claiming'; +import { injectTask, setupTestServers, retry } from './lib'; +import { setupKibanaServer } from './lib/setup_test_servers'; + +const mockTaskTypeRunFn = jest.fn(); +const mockCreateTaskRunner = jest.fn(); +const mockTaskType = { + title: '', + description: '', + stateSchemaByVersion: { + 1: { + up: (state: Record) => ({ ...state, baz: state.baz || '' }), + schema: schema.object({ + foo: schema.string(), + bar: schema.string(), + baz: schema.string(), + }), + }, + }, + createTaskRunner: mockCreateTaskRunner.mockImplementation(() => ({ + run: mockTaskTypeRunFn, + })), +}; +const { TaskClaiming: TaskClaimingMock } = jest.requireMock('../queries/task_claiming'); +jest.mock('../queries/task_claiming', () => { + const actual = jest.requireActual('../queries/task_claiming'); + return { + ...actual, + TaskClaiming: jest.fn().mockImplementation((opts: TaskClaimingOpts) => { + // We need to register here because once the class is instantiated, adding + // definitions won't get claimed because of "partitionIntoClaimingBatches". + opts.definitions.registerTaskDefinitions({ + fooType: mockTaskType, + }); + return new actual.TaskClaiming(opts); + }), + }; +}); + +describe('switch task claiming strategies', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should switch from default to mget and still claim tasks', async () => { + const setupResultDefault = await setupTestServers(); + const esServer = setupResultDefault.esServer; + let kibanaServer = setupResultDefault.kibanaServer; + let taskClaimingOpts: TaskClaimingOpts = TaskClaimingMock.mock.calls[0][0]; + + expect(taskClaimingOpts.strategy).toBe('default'); + + mockTaskTypeRunFn.mockImplementation(() => { + return { state: {} }; + }); + + // inject a task to run and ensure it is claimed and run + const id1 = uuidV4(); + await injectTask(kibanaServer.coreStart.elasticsearch.client.asInternalUser, { + id: id1, + taskType: 'fooType', + params: { foo: true }, + state: { foo: 'test', bar: 'test', baz: 'test' }, + stateVersion: 4, + runAt: new Date(), + enabled: true, + scheduledAt: new Date(), + attempts: 0, + status: TaskStatus.Idle, + startedAt: null, + retryAt: null, + ownerId: null, + }); + + await retry(async () => { + expect(mockTaskTypeRunFn).toHaveBeenCalledTimes(1); + }); + + if (kibanaServer) { + await kibanaServer.stop(); + } + + const setupResultMget = await setupKibanaServer({ + xpack: { + task_manager: { + claim_strategy: 'unsafe_mget', + }, + }, + }); + kibanaServer = setupResultMget.kibanaServer; + + taskClaimingOpts = TaskClaimingMock.mock.calls[1][0]; + expect(taskClaimingOpts.strategy).toBe('unsafe_mget'); + + // inject a task to run and ensure it is claimed and run + const id2 = uuidV4(); + await injectTask(kibanaServer.coreStart.elasticsearch.client.asInternalUser, { + id: id2, + taskType: 'fooType', + params: { foo: true }, + state: { foo: 'test', bar: 'test', baz: 'test' }, + stateVersion: 4, + runAt: new Date(), + enabled: true, + scheduledAt: new Date(), + attempts: 0, + status: TaskStatus.Idle, + startedAt: null, + retryAt: null, + ownerId: null, + }); + + await retry(async () => { + expect(mockTaskTypeRunFn).toHaveBeenCalledTimes(2); + }); + + if (kibanaServer) { + await kibanaServer.stop(); + } + if (esServer) { + await esServer.stop(); + } + }); + + it('should switch from mget to default and still claim tasks', async () => { + const setupResultMget = await setupTestServers({ + xpack: { + task_manager: { + claim_strategy: 'unsafe_mget', + }, + }, + }); + const esServer = setupResultMget.esServer; + let kibanaServer = setupResultMget.kibanaServer; + let taskClaimingOpts: TaskClaimingOpts = TaskClaimingMock.mock.calls[0][0]; + + expect(taskClaimingOpts.strategy).toBe('unsafe_mget'); + + mockTaskTypeRunFn.mockImplementation(() => { + return { state: {} }; + }); + + // inject a task to run and ensure it is claimed and run + const id1 = uuidV4(); + await injectTask(kibanaServer.coreStart.elasticsearch.client.asInternalUser, { + id: id1, + taskType: 'fooType', + params: { foo: true }, + state: { foo: 'test', bar: 'test', baz: 'test' }, + stateVersion: 4, + runAt: new Date(), + enabled: true, + scheduledAt: new Date(), + attempts: 0, + status: TaskStatus.Idle, + startedAt: null, + retryAt: null, + ownerId: null, + }); + + await retry(async () => { + expect(mockTaskTypeRunFn).toHaveBeenCalledTimes(1); + }); + + if (kibanaServer) { + await kibanaServer.stop(); + } + + const setupResultDefault = await setupKibanaServer(); + kibanaServer = setupResultDefault.kibanaServer; + + taskClaimingOpts = TaskClaimingMock.mock.calls[1][0]; + expect(taskClaimingOpts.strategy).toBe('default'); + + // inject a task to run and ensure it is claimed and run + const id2 = uuidV4(); + await injectTask(kibanaServer.coreStart.elasticsearch.client.asInternalUser, { + id: id2, + taskType: 'fooType', + params: { foo: true }, + state: { foo: 'test', bar: 'test', baz: 'test' }, + stateVersion: 4, + runAt: new Date(), + enabled: true, + scheduledAt: new Date(), + attempts: 0, + status: TaskStatus.Idle, + startedAt: null, + retryAt: null, + ownerId: null, + }); + + await retry(async () => { + expect(mockTaskTypeRunFn).toHaveBeenCalledTimes(2); + }); + + if (kibanaServer) { + await kibanaServer.stop(); + } + if (esServer) { + await esServer.stop(); + } + }); + + it('should switch from default to mget and claim tasks that were running during shutdown', async () => { + const setupResultDefault = await setupTestServers(); + const esServer = setupResultDefault.esServer; + let kibanaServer = setupResultDefault.kibanaServer; + let taskClaimingOpts: TaskClaimingOpts = TaskClaimingMock.mock.calls[0][0]; + + expect(taskClaimingOpts.strategy).toBe('default'); + + mockTaskTypeRunFn.mockImplementation(async () => { + await new Promise((resolve) => setTimeout(resolve, 2000)); + return { state: {} }; + }); + + // inject a task to run and ensure it is claimed and run + const id1 = uuidV4(); + await injectTask(kibanaServer.coreStart.elasticsearch.client.asInternalUser, { + id: id1, + taskType: 'fooType', + params: { foo: true }, + state: { foo: 'test', bar: 'test', baz: 'test' }, + stateVersion: 4, + runAt: new Date(), + enabled: true, + scheduledAt: new Date(), + attempts: 0, + status: TaskStatus.Idle, + startedAt: null, + timeoutOverride: '5s', + retryAt: null, + ownerId: null, + }); + + await retry(async () => { + expect(mockTaskTypeRunFn).toHaveBeenCalledTimes(1); + }); + + if (kibanaServer) { + await kibanaServer.stop(); + } + + const setupResultMget = await setupKibanaServer({ + xpack: { + task_manager: { + claim_strategy: 'unsafe_mget', + }, + }, + }); + kibanaServer = setupResultMget.kibanaServer; + + taskClaimingOpts = TaskClaimingMock.mock.calls[1][0]; + expect(taskClaimingOpts.strategy).toBe('unsafe_mget'); + + // task doc should still exist and be running + const task = await kibanaServer.coreStart.elasticsearch.client.asInternalUser.get<{ + task: SerializedConcreteTaskInstance; + }>({ + id: `task:${id1}`, + index: '.kibana_task_manager', + }); + + expect(task._source?.task?.status).toBe(TaskStatus.Running); + + // task manager should pick up and claim the task that was running during shutdown + await retry( + async () => { + expect(mockTaskTypeRunFn).toHaveBeenCalledTimes(2); + }, + { times: 60, intervalMs: 1000 } + ); + + if (kibanaServer) { + await kibanaServer.stop(); + } + if (esServer) { + await esServer.stop(); + } + }); + + it('should switch from mget to default and claim tasks that were running during shutdown', async () => { + const setupResultMget = await setupTestServers({ + xpack: { + task_manager: { + claim_strategy: 'unsafe_mget', + }, + }, + }); + const esServer = setupResultMget.esServer; + let kibanaServer = setupResultMget.kibanaServer; + let taskClaimingOpts: TaskClaimingOpts = TaskClaimingMock.mock.calls[0][0]; + + expect(taskClaimingOpts.strategy).toBe('unsafe_mget'); + + mockTaskTypeRunFn.mockImplementation(async () => { + await new Promise((resolve) => setTimeout(resolve, 2000)); + return { state: {} }; + }); + + // inject a task to run and ensure it is claimed and run + const id1 = uuidV4(); + await injectTask(kibanaServer.coreStart.elasticsearch.client.asInternalUser, { + id: id1, + taskType: 'fooType', + params: { foo: true }, + state: { foo: 'test', bar: 'test', baz: 'test' }, + stateVersion: 4, + runAt: new Date(), + enabled: true, + scheduledAt: new Date(), + attempts: 0, + status: TaskStatus.Idle, + startedAt: null, + timeoutOverride: '5s', + retryAt: null, + ownerId: null, + }); + + await retry(async () => { + expect(mockTaskTypeRunFn).toHaveBeenCalledTimes(1); + }); + + if (kibanaServer) { + await kibanaServer.stop(); + } + + const setupResultDefault = await setupKibanaServer(); + kibanaServer = setupResultDefault.kibanaServer; + + taskClaimingOpts = TaskClaimingMock.mock.calls[1][0]; + expect(taskClaimingOpts.strategy).toBe('default'); + + // task doc should still exist and be running + const task = await kibanaServer.coreStart.elasticsearch.client.asInternalUser.get<{ + task: SerializedConcreteTaskInstance; + }>({ + id: `task:${id1}`, + index: '.kibana_task_manager', + }); + + expect(task._source?.task?.status).toBe(TaskStatus.Running); + + await retry( + async () => { + expect(mockTaskTypeRunFn).toHaveBeenCalledTimes(2); + }, + { times: 60, intervalMs: 1000 } + ); + + if (kibanaServer) { + await kibanaServer.stop(); + } + if (esServer) { + await esServer.stop(); + } + }); +}); From 5478a06445714d72852ea65148972fba4d0319ed Mon Sep 17 00:00:00 2001 From: Tre Date: Fri, 21 Jun 2024 14:51:45 +0100 Subject: [PATCH 09/33] [FTR](reporting) update common serverless api tests to use api keys (#184819) ## Summary - update api tests in `x-pack/test_serverless/api_integration/test_suites/common/reporting/` - update one ui test in `x-pack/test_serverless/functional/test_suites/common/reporting/management.ts` - update snapshot `x-pack/test_serverless/api_integration/test_suites/common/reporting/__snapshots__/generate_csv_discover.snap` - update shared service in `x-pack/test_serverless/shared/services/svl_reporting.ts` Contributes to: https://github.com/elastic/kibana/issues/180834 --------- Co-authored-by: Tim Sullivan Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../common/reporting/datastream.ts | 10 ++++--- .../common/reporting/management.ts | 28 ++++++++++--------- .../common/reporting/management.ts | 18 ++++++------ .../shared/services/svl_reporting.ts | 2 +- 4 files changed, 31 insertions(+), 27 deletions(-) diff --git a/x-pack/test_serverless/api_integration/test_suites/common/reporting/datastream.ts b/x-pack/test_serverless/api_integration/test_suites/common/reporting/datastream.ts index 6cec7b7c2fcfb..168746c5ebe50 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/reporting/datastream.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/reporting/datastream.ts @@ -14,8 +14,8 @@ export default function ({ getService }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const reportingAPI = getService('svlReportingApi'); const svlCommonApi = getService('svlCommonApi'); - const svlUserManager = getService('svlUserManager'); const supertestWithoutAuth = getService('supertestWithoutAuth'); + const svlUserManager = getService('svlUserManager'); let roleAuthc: RoleCredentials; let internalReqHeader: InternalRequestHeader; @@ -30,6 +30,7 @@ export default function ({ getService }: FtrProviderContext) { before(async () => { roleAuthc = await svlUserManager.createApiKeyForRole('admin'); internalReqHeader = svlCommonApi.getInternalRequestHeader(); + await esArchiver.load(archives.ecommerce.data); await kibanaServer.importExport.load(archives.ecommerce.savedObjects); @@ -60,11 +61,12 @@ export default function ({ getService }: FtrProviderContext) { }); it('uses the datastream configuration with set ILM policy', async () => { - const { body } = await supertestWithoutAuth + const { status, body } = await supertestWithoutAuth .get(`/api/index_management/data_streams/.kibana-reporting`) .set(internalReqHeader) - .set(roleAuthc.apiKeyHeader) - .expect(200); + .set(roleAuthc.apiKeyHeader); + + svlCommonApi.assertResponseStatusCode(200, status, body); expect(body).toEqual({ _meta: { diff --git a/x-pack/test_serverless/api_integration/test_suites/common/reporting/management.ts b/x-pack/test_serverless/api_integration/test_suites/common/reporting/management.ts index 8610bb6aa1c2f..953dd533b4a96 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/reporting/management.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/reporting/management.ts @@ -9,20 +9,17 @@ import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common/src/con import expect from '@kbn/expect'; import { INTERNAL_ROUTES } from '@kbn/reporting-common'; import { FtrProviderContext } from '../../../ftr_provider_context'; +import { RoleCredentials } from '../../../../shared/services'; // the archived data holds a report created by test_user -const TEST_USERNAME = 'test_user'; -const TEST_USER_PASSWORD = 'changeme'; const API_HEADER: [string, string] = ['kbn-xsrf', 'reporting']; const INTERNAL_HEADER: [string, string] = [X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'Kibana']; export default ({ getService }: FtrProviderContext) => { const esArchiver = getService('esArchiver'); - const supertest = getService('supertestWithoutAuth'); - const config = getService('config'); - - const REPORTING_USER_USERNAME = config.get('servers.kibana.username'); - const REPORTING_USER_PASSWORD = config.get('servers.kibana.password'); + const supertestWithoutAuth = getService('supertestWithoutAuth'); + const svlUserManager = getService('svlUserManager'); + let roleAuthc: RoleCredentials; describe('Reporting Management', function () { // security_exception: action [indices:admin/create] is unauthorized for user [elastic] with effective roles [superuser] on restricted indices [.reporting-2020.04.19], this action is granted by the index privileges [create_index,manage,all] @@ -30,12 +27,17 @@ export default ({ getService }: FtrProviderContext) => { const dataArchive = 'x-pack/test/functional/es_archives/reporting/archived_reports'; + before(async () => { + roleAuthc = await svlUserManager.createApiKeyForRole('admin'); + }); + beforeEach(async () => { await esArchiver.load(dataArchive); }); after(async () => { await esArchiver.unload(dataArchive); + await svlUserManager.invalidateApiKeyForRole(roleAuthc); }); describe('Deletion', () => { @@ -43,22 +45,22 @@ export default ({ getService }: FtrProviderContext) => { // archived data uses the test user but functionality for specific users is not possible yet for svl xit(`user can delete a report they've created`, async () => { - const response = await supertest + const response = await supertestWithoutAuth .delete(`${INTERNAL_ROUTES.JOBS.DELETE_PREFIX}/${DELETE_REPORT_ID}`) - .auth(TEST_USERNAME, TEST_USER_PASSWORD) .set(...API_HEADER) - .set(...INTERNAL_HEADER); + .set(...INTERNAL_HEADER) + .set(roleAuthc.apiKeyHeader); expect(response.status).to.be(200); expect(response.body).to.eql({ deleted: true }); }); it(`user can not delete a report they haven't created`, async () => { - const response = await supertest + const response = await supertestWithoutAuth .delete(`${INTERNAL_ROUTES.JOBS.DELETE_PREFIX}/${DELETE_REPORT_ID}`) - .auth(REPORTING_USER_USERNAME, REPORTING_USER_PASSWORD) .set(...API_HEADER) - .set(...INTERNAL_HEADER); + .set(...INTERNAL_HEADER) + .set(roleAuthc.apiKeyHeader); expect(response.status).to.be(404); expect(response.body.message).to.be('Not Found'); diff --git a/x-pack/test_serverless/functional/test_suites/common/reporting/management.ts b/x-pack/test_serverless/functional/test_suites/common/reporting/management.ts index be4c365263dbd..bb875e7fac186 100644 --- a/x-pack/test_serverless/functional/test_suites/common/reporting/management.ts +++ b/x-pack/test_serverless/functional/test_suites/common/reporting/management.ts @@ -20,10 +20,10 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { const retry = getService('retry'); const PageObjects = getPageObjects(['common', 'svlCommonPage', 'header']); const reportingAPI = getService('svlReportingApi'); - const config = getService('config'); - const svlCommonApi = getService('svlCommonApi'); const svlUserManager = getService('svlUserManager'); + const svlCommonApi = getService('svlCommonApi'); let roleAuthc: RoleCredentials; + let roleName: string; let internalReqHeader: InternalRequestHeader; const navigateToReportingManagement = async () => { @@ -56,11 +56,9 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }; // Kibana CI and MKI use different users - const TEST_USERNAME = config.get('servers.kibana.username'); - const TEST_PASSWORD = config.get('servers.kibana.password'); - before('initialize saved object archive', async () => { - roleAuthc = await svlUserManager.createApiKeyForRole('admin'); + roleName = 'admin'; + roleAuthc = await svlUserManager.createApiKeyForRole(roleName); internalReqHeader = svlCommonApi.getInternalRequestHeader(); // add test saved search object await kibanaServer.importExport.load(savedObjectsArchive); @@ -69,6 +67,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { after('clean up archives', async () => { await kibanaServer.importExport.unload(savedObjectsArchive); await svlUserManager.invalidateApiKeyForRole(roleAuthc); + await svlUserManager.invalidateApiKeyForRole(roleAuthc); }); // Cant auth into the route as it's structured currently @@ -87,16 +86,17 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }); // Skipping test for now because functionality is not yet possible to test + // See details: https://github.com/elastic/kibana/issues/186558 xit(`user doesn't see a job another user has created`, async () => { - log.debug(`creating a csv report job as '${TEST_USERNAME}'`); + log.debug(`creating a csv report job using api keys for role: [${roleName}]`); const { job: { id: jobId }, } = await reportingAPI.createReportJobInternal( CSV_REPORT_TYPE_V2, job, - TEST_USERNAME, - TEST_PASSWORD + roleAuthc, + internalReqHeader ); await navigateToReportingManagement(); diff --git a/x-pack/test_serverless/shared/services/svl_reporting.ts b/x-pack/test_serverless/shared/services/svl_reporting.ts index f3cf4065c31f1..cd231ee8e77e1 100644 --- a/x-pack/test_serverless/shared/services/svl_reporting.ts +++ b/x-pack/test_serverless/shared/services/svl_reporting.ts @@ -98,7 +98,7 @@ export function SvlReportingServiceProvider({ getService }: FtrProviderContext) }, /* - * This function is only used in the API tests, funtional tests we have to click the download link in the UI + * This function is only used in the API tests, functional tests we have to click the download link in the UI */ async getCompletedJobOutput( downloadReportPath: string, From d3897a93c2cb30a6218c4c09380b26c5dcfa5955 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loix?= Date: Fri, 21 Jun 2024 14:55:44 +0100 Subject: [PATCH 10/33] [Stateful sidenav] Fix isSolutionNavigationEnabled$ (#186611) --- src/plugins/navigation/public/plugin.test.ts | 82 +++++++++++++++++++- src/plugins/navigation/public/plugin.tsx | 32 ++++++-- src/plugins/navigation/tsconfig.json | 1 - 3 files changed, 103 insertions(+), 12 deletions(-) diff --git a/src/plugins/navigation/public/plugin.test.ts b/src/plugins/navigation/public/plugin.test.ts index 6ebdfbe5003a2..e5c3a88babaf1 100644 --- a/src/plugins/navigation/public/plugin.test.ts +++ b/src/plugins/navigation/public/plugin.test.ts @@ -14,7 +14,6 @@ import { cloudExperimentsMock } from '@kbn/cloud-experiments-plugin/common/mocks import { spacesPluginMock } from '@kbn/spaces-plugin/public/mocks'; import type { Space } from '@kbn/spaces-plugin/public'; import type { BuildFlavor } from '@kbn/config'; -import type { UserSettingsData } from '@kbn/user-profile-components'; import { SOLUTION_NAV_FEATURE_FLAG_NAME } from '../common'; import { NavigationPublicPlugin } from './plugin'; @@ -32,10 +31,8 @@ const setup = ( }, { buildFlavor = 'traditional', - userSettings = {}, }: { buildFlavor?: BuildFlavor; - userSettings?: UserSettingsData; } = {} ) => { const initializerContext = coreMock.createPluginInitializerContext({}, { buildFlavor }); @@ -219,6 +216,85 @@ describe('Navigation Plugin', () => { }); describe('isSolutionNavEnabled$', () => { + // This test will need to be changed when we remove the feature flag + it('should be off by default', async () => { + const { plugin, coreStart, unifiedSearch, cloud } = setup({ featureOn }); + + const { isSolutionNavEnabled$ } = plugin.start(coreStart, { + unifiedSearch, + cloud, + }); + await new Promise((resolve) => setTimeout(resolve)); + + const isEnabled = await firstValueFrom(isSolutionNavEnabled$); + expect(isEnabled).toBe(false); + }); + + it('should be off if feature flag if "ON" but space solution is "classic" or "undefined"', async () => { + const { plugin, coreStart, unifiedSearch, cloud, cloudExperiments, spaces } = setup({ + featureOn, + }); + + cloudExperiments.getVariation.mockResolvedValue(true); // Feature flag ON + + { + spaces.getActiveSpace$ = jest + .fn() + .mockReturnValue(of({ solution: undefined } as Pick)); + + const { isSolutionNavEnabled$ } = plugin.start(coreStart, { + unifiedSearch, + cloud, + cloudExperiments, + spaces, + }); + await new Promise((resolve) => setTimeout(resolve)); + + const isEnabled = await firstValueFrom(isSolutionNavEnabled$); + expect(isEnabled).toBe(false); + } + + { + spaces.getActiveSpace$ = jest + .fn() + .mockReturnValue(of({ solution: 'classic' } as Pick)); + + const { isSolutionNavEnabled$ } = plugin.start(coreStart, { + unifiedSearch, + cloud, + cloudExperiments, + spaces, + }); + await new Promise((resolve) => setTimeout(resolve)); + + const isEnabled = await firstValueFrom(isSolutionNavEnabled$); + expect(isEnabled).toBe(false); + } + }); + + it('should be on if feature flag if "ON" and space solution is set', async () => { + const { plugin, coreStart, unifiedSearch, cloud, cloudExperiments, spaces } = setup({ + featureOn, + }); + + cloudExperiments.getVariation.mockResolvedValue(true); // Feature flag ON + + spaces.getActiveSpace$ = jest + .fn() + .mockReturnValue(of({ solution: 'es' } as Pick)); + + const { isSolutionNavEnabled$ } = plugin.start(coreStart, { + unifiedSearch, + cloud, + cloudExperiments, + spaces, + }); + await new Promise((resolve) => setTimeout(resolve)); + + const isEnabled = await firstValueFrom(isSolutionNavEnabled$); + expect(isEnabled).toBe(true); + }); + it('on serverless should flag must be disabled', async () => { const { plugin, coreStart, unifiedSearch, cloud, cloudExperiments } = setup( { featureOn }, diff --git a/src/plugins/navigation/public/plugin.tsx b/src/plugins/navigation/public/plugin.tsx index 8aa9eea2351d6..bef9b7c3a933c 100644 --- a/src/plugins/navigation/public/plugin.tsx +++ b/src/plugins/navigation/public/plugin.tsx @@ -6,7 +6,16 @@ * Side Public License, v 1. */ import React from 'react'; -import { firstValueFrom, from, of, ReplaySubject, shareReplay, take, combineLatest } from 'rxjs'; +import { + firstValueFrom, + from, + of, + ReplaySubject, + shareReplay, + take, + combineLatest, + map, +} from 'rxjs'; import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from '@kbn/core/public'; import type { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; import type { Space } from '@kbn/spaces-plugin/public'; @@ -119,7 +128,14 @@ export class NavigationPublicPlugin this.addSolutionNavigation(solutionNavigation); }); }, - isSolutionNavEnabled$: this.isSolutionNavExperiementEnabled$, + isSolutionNavEnabled$: combineLatest([ + this.isSolutionNavExperiementEnabled$, + activeSpace$, + ]).pipe( + map(([isFeatureEnabled, activeSpace]) => { + return getIsProjectNav(isFeatureEnabled, activeSpace?.solution) && !isServerless; + }) + ), }; } @@ -169,11 +185,7 @@ export class NavigationPublicPlugin }: { isFeatureEnabled: boolean; isServerless: boolean; activeSpace?: Space } ) { const solutionView = activeSpace?.solution; - const isProjectNav = - isFeatureEnabled && - Boolean(solutionView) && - isKnownSolutionView(solutionView) && - solutionView !== 'classic'; + const isProjectNav = getIsProjectNav(isFeatureEnabled, solutionView) && !isServerless; // On serverless the chrome style is already set by the serverless plugin if (!isServerless) { @@ -186,6 +198,10 @@ export class NavigationPublicPlugin } } +function getIsProjectNav(isFeatureEnabled: boolean, solutionView?: string) { + return isFeatureEnabled && Boolean(solutionView) && isKnownSolutionView(solutionView); +} + function isKnownSolutionView(solution?: string) { - return solution && ['oblt', 'es', 'security'].includes(solution); + return Boolean(solution) && ['oblt', 'es', 'security'].includes(solution!); } diff --git a/src/plugins/navigation/tsconfig.json b/src/plugins/navigation/tsconfig.json index 69c26355ea7eb..53faee865c065 100644 --- a/src/plugins/navigation/tsconfig.json +++ b/src/plugins/navigation/tsconfig.json @@ -22,7 +22,6 @@ "@kbn/shared-ux-chrome-navigation", "@kbn/cloud-plugin", "@kbn/config", - "@kbn/user-profile-components", "@kbn/cloud-experiments-plugin", "@kbn/spaces-plugin", ], From 350044a92780e518ca282682c42575a30fe8355a Mon Sep 17 00:00:00 2001 From: Alex Szabo Date: Fri, 21 Jun 2024 16:16:02 +0200 Subject: [PATCH 11/33] [BK] Migrate emergency-release-branch-testing pipeline to the new infra (#186537) ## Summary Migrates (without history preservation) the emergency release branch testing job to the new infra Verified through: - [x] locally tested the pipeline definition file - [x] ran the testing pipeline through the migration staging job (https://buildkite.com/elastic/kibana-migration-pipeline-staging/builds/125#_) --- .../kibana-serverless-release-testing.yml | 46 +++++++++++++++++++ .../locations.yml | 1 + .../emergency_release_branch_testing.yml | 5 +- 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 .buildkite/pipeline-resource-definitions/kibana-serverless-release-testing.yml diff --git a/.buildkite/pipeline-resource-definitions/kibana-serverless-release-testing.yml b/.buildkite/pipeline-resource-definitions/kibana-serverless-release-testing.yml new file mode 100644 index 0000000000000..fe3fdaf49c748 --- /dev/null +++ b/.buildkite/pipeline-resource-definitions/kibana-serverless-release-testing.yml @@ -0,0 +1,46 @@ +# yaml-language-server: $schema=https://gist.githubusercontent.com/elasticmachine/988b80dae436cafea07d9a4a460a011d/raw/rre.schema.json +apiVersion: backstage.io/v1alpha1 +kind: Resource +metadata: + name: bk-kibana-serverless-emergency-release-branch-testing + description: Runs testing for emergency release / hotfix branches + links: + - url: 'https://buildkite.com/elastic/kibana-serverless-emergency-release-branch-testing' + title: Pipeline link +spec: + type: buildkite-pipeline + owner: 'group:kibana-operations' + system: buildkite + implementation: + apiVersion: buildkite.elastic.dev/v1 + kind: Pipeline + metadata: + name: kibana / serverless / emergency release branch testing + description: Runs testing for emergency release / hotfix branches + spec: + env: + SLACK_NOTIFICATIONS_CHANNEL: '#kibana-mission-control' + ELASTIC_SLACK_NOTIFICATIONS_ENABLED: 'true' + allow_rebuilds: true + branch_configuration: deploy-fix@* + default_branch: main + repository: elastic/kibana + pipeline_file: .buildkite/pipelines/es_serverless/emergency_release_branch_testing.yml + skip_intermediate_builds: false + provider_settings: + build_branches: true + build_pull_requests: false + publish_commit_status: true + trigger_mode: code + build_tags: false + prefix_pull_request_fork_branch_names: false + skip_pull_request_builds_for_existing_commits: true + teams: + everyone: + access_level: BUILD_AND_READ + kibana-operations: + access_level: MANAGE_BUILD_AND_READ + appex-qa: + access_level: MANAGE_BUILD_AND_READ + kibana-tech-leads: + access_level: MANAGE_BUILD_AND_READ diff --git a/.buildkite/pipeline-resource-definitions/locations.yml b/.buildkite/pipeline-resource-definitions/locations.yml index f9dc312a26582..55af40868bd4a 100644 --- a/.buildkite/pipeline-resource-definitions/locations.yml +++ b/.buildkite/pipeline-resource-definitions/locations.yml @@ -27,6 +27,7 @@ spec: - https://github.com/elastic/kibana/blob/main/.buildkite/pipeline-resource-definitions/kibana-performance-data-set-extraction-daily.yml - https://github.com/elastic/kibana/blob/main/.buildkite/pipeline-resource-definitions/kibana-pr.yml - https://github.com/elastic/kibana/blob/main/.buildkite/pipeline-resource-definitions/kibana-purge-cloud-deployments.yml + - https://github.com/elastic/kibana/blob/main/.buildkite/pipeline-resource-definitions/kibana-serverless-release-testing.yml - https://github.com/elastic/kibana/blob/main/.buildkite/pipeline-resource-definitions/kibana-serverless-release.yml - https://github.com/elastic/kibana/blob/main/.buildkite/pipeline-resource-definitions/scalability_testing-daily.yml - https://github.com/elastic/kibana/blob/main/.buildkite/pipeline-resource-definitions/security-solution-ess/security-solution-ess.yml diff --git a/.buildkite/pipelines/es_serverless/emergency_release_branch_testing.yml b/.buildkite/pipelines/es_serverless/emergency_release_branch_testing.yml index 1952900c1aab1..b0a79427f197a 100644 --- a/.buildkite/pipelines/es_serverless/emergency_release_branch_testing.yml +++ b/.buildkite/pipelines/es_serverless/emergency_release_branch_testing.yml @@ -2,7 +2,10 @@ ## Triggers the artifacts container image build for emergency releases agents: - queue: kibana-default + image: family/kibana-ubuntu-2004 + imageProject: elastic-images-prod + provider: gcp + machineType: n2-standard-2 notify: - slack: "#kibana-mission-control" From 96497f90f4565be9a0d18ffbce553929aad094bd Mon Sep 17 00:00:00 2001 From: Robert Austin Date: Fri, 21 Jun 2024 10:27:23 -0400 Subject: [PATCH 12/33] Mark stable entity-analytics MKI tests for quality gate 2 (#182618) ## Summary Mark stable entity-analytics MKI tests for quality gate 2. These tests have not had recent failures on MKI and they represent critical paths for our feature. ## Follow-up We should aim to continue enabling more of our tests. ### Checklist Delete any items that are not applicable to this PR. - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### Risk Matrix Delete this section if it is not applicable to this PR. Before closing this PR, invite QA, stakeholders, and other developers to identify risks that should be tested prior to the change/feature release. When forming the risk matrix, consider some of the following examples and how they may potentially impact the change: | Risk | Probability | Severity | Mitigation/Notes | |---------------------------|-------------|----------|-------------------------| | Multiple Spaces—unexpected behavior in non-default Kibana Space. | Low | High | Integration tests will verify that all features are still supported in non-default Kibana Space and when user switches between spaces. | | Multiple nodes—Elasticsearch polling might have race conditions when multiple Kibana nodes are polling for the same tasks. | High | Low | Tasks are idempotent, so executing them multiple times will not result in logical error, but will degrade performance. To test for this case we add plenty of unit tests around this logic and document manual testing procedure. | | Code should gracefully handle cases when feature X or plugin Y are disabled. | Medium | High | Unit tests will verify that any feature flag or plugin combination still results in our service operational. | | [See more potential risk examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx) | ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../trial_license_complete_tier/asset_criticality_csv_upload.ts | 2 +- .../trial_license_complete_tier/init_and_status_apis.ts | 2 +- .../risk_scoring_task/task_execution.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/asset_criticality_csv_upload.ts b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/asset_criticality_csv_upload.ts index 123fd4cecf0cb..3e443226542f1 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/asset_criticality_csv_upload.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/asset_criticality_csv_upload.ts @@ -15,7 +15,7 @@ import { } from '../../utils'; import { FtrProviderContext } from '../../../../ftr_provider_context'; export default ({ getService }: FtrProviderContext) => { - describe('@ess @serverless Entity Analytics - Asset Criticality CSV upload', () => { + describe('@ess @serverless @serverlessQA Entity Analytics - Asset Criticality CSV upload', () => { const esClient = getService('es'); const supertest = getService('supertest'); const assetCriticalityRoutes = assetCriticalityRouteHelpersFactory(supertest); diff --git a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/init_and_status_apis.ts b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/init_and_status_apis.ts index 62ef6eee01f4f..48c208e99fc96 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/init_and_status_apis.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/init_and_status_apis.ts @@ -27,7 +27,7 @@ export default ({ getService }: FtrProviderContext) => { const riskEngineRoutes = riskEngineRouteHelpersFactory(supertest); const log = getService('log'); - describe('@ess @serverless init_and_status_apis', () => { + describe('@ess @serverless @serverlessQA init_and_status_apis', () => { beforeEach(async () => { await cleanRiskEngine({ kibanaServer, es, log }); }); diff --git a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_scoring_task/task_execution.ts b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_scoring_task/task_execution.ts index d53ffc707b396..21de936b4ff3a 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_scoring_task/task_execution.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_scoring_task/task_execution.ts @@ -36,7 +36,7 @@ export default ({ getService }: FtrProviderContext): void => { const createAndSyncRuleAndAlerts = createAndSyncRuleAndAlertsFactory({ supertest, log }); const riskEngineRoutes = riskEngineRouteHelpersFactory(supertest); - describe('@ess @serverless Risk Scoring Task Execution', () => { + describe('@ess @serverless @serverlessQA Risk Scoring Task Execution', () => { context('with auditbeat data', () => { const { indexListOfDocuments } = dataGeneratorFactory({ es, From 4c3afc5f42036ace9964e3900b5f5a37418a95c7 Mon Sep 17 00:00:00 2001 From: Dima Arnautov Date: Fri, 21 Jun 2024 16:43:20 +0200 Subject: [PATCH 13/33] [ML] Update code editors for Transform, Data Frame and Anomaly Detection wizards (#184518) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Closes https://github.com/elastic/kibana/issues/66716 Improves code editors in Anomaly detection, Data frame analytics and Transform wizards with autocomplete, data types validation and inline documentation from elasticsearch specification. ![Jun-19-2024 15-33-00](https://github.com/elastic/kibana/assets/5236598/c230deae-962e-4295-8146-0bf3579a66bd) Adds a package with JSON schemas extracted from the [openapi output of elasticsearch-specification](https://github.com/elastic/elasticsearch-specification/tree/main/output/openapi). Schema file is generated per editor/endpoint, keeping only relevant components. To test the script locally, execute ``` yarn run jsonSchema ``` from `/x-pack/packages/ml/json_schemas`. By default it assumes that your `elasticsearch-specification` folder is located next to the `kibana` repo, but you can also provide a path to `openapi` file as a parameter, e.g. `yarn run jsonSchema /Users/my_user/dev/elasticsearch-specification/output/openapi/elasticsearch-serverless-openapi.json` #### How JSON files are served JSON files are asynchronously imported at the React component level and passed to the `CodeEditor` instances on mount. Initially I tried different approaches to take advantage of CDN, but unfortunately it didn't work out: ##### Using static assets I made an attempt to retrieve a URL to the JSON schema file as a static asset using Kibana service ```typescript const schemaJsonAsset = http?.staticAssets.getPluginAssetHref('my_schema.json') ?? ''; ``` and passing it as part of the schema definition, but the browser was blocking a request 🤔 ![image](https://github.com/elastic/kibana/assets/5236598/accf47b1-2a89-4408-9c5a-36bb269e8889) ![image](https://github.com/elastic/kibana/assets/5236598/aa64ae66-8749-4d4d-b645-6cd11b221c68) ##### Using raw loader Approach with a raw loader also didn't succeed. ```typescript import mySchema from '!!raw-loader!./my_schema.json'; ```
See error ``` ERROR in ./public/app/sections/create_transform/components/advanced_pivot_editor/my_schema.json (/Users/dimaarnautov/Repos/kibana/node_modules/raw-loader/dist/cjs.js!./public/app/sections/create_transform/components/advanced_pivot_editor/my_schema.json) │ Module parse failed: Unexpected token 'e', "export def"... is not valid JSON while parsing 'export default "{\n \"type\": \"object\' │ File was processed with these loaders: │ * ../../../node_modules/raw-loader/dist/cjs.js │ You may need an additional loader to handle the result of these loaders. │ SyntaxError: Unexpected token 'e', "export def"... is not valid JSON while parsing 'export default "{\n \"type\": \"object\' │ at JSON.parse () │ at parseJson (/Users/dimaarnautov/Repos/kibana/node_modules/json-parse-better-errors/index.js:7:17) │ at JsonParser.parse (/Users/dimaarnautov/Repos/kibana/node_modules/webpack/lib/JsonParser.js:16:16) │ at /Users/dimaarnautov/Repos/kibana/node_modules/webpack/lib/NormalModule.js:482:32 │ at /Users/dimaarnautov/Repos/kibana/node_modules/webpack/lib/NormalModule.js:358:12 │ at /Users/dimaarnautov/Repos/kibana/node_modules/loader-runner/lib/LoaderRunner.js:373:3 │ at iterateNormalLoaders (/Users/dimaarnautov/Repos/kibana/node_modules/loader-runner/lib/LoaderRunner.js:214:10) │ at iterateNormalLoaders (/Users/dimaarnautov/Repos/kibana/node_modules/loader-runner/lib/LoaderRunner.js:221:10) │ at /Users/dimaarnautov/Repos/kibana/node_modules/loader-runner/lib/LoaderRunner.js:236:3 │ at runSyncOrAsync (/Users/dimaarnautov/Repos/kibana/node_modules/loader-runner/lib/LoaderRunner.js:130:11) │ at iterateNormalLoaders (/Users/dimaarnautov/Repos/kibana/node_modules/loader-runner/lib/LoaderRunner.js:232:2) │ at /Users/dimaarnautov/Repos/kibana/node_modules/loader-runner/lib/LoaderRunner.js:205:4 │ at /Users/dimaarnautov/Repos/kibana/node_modules/webpack/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:85:15 │ at processTicksAndRejections (node:internal/process/task_queues:77:11) ```
### Checklist - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- .github/CODEOWNERS | 1 + package.json | 1 + tsconfig.base.json | 2 + x-pack/packages/ml/json_schemas/README.md | 3 + .../ml/json_schemas}/index.ts | 2 +- .../packages/ml/json_schemas/jest.config.js | 12 + x-pack/packages/ml/json_schemas/kibana.jsonc | 5 + x-pack/packages/ml/json_schemas/package.json | 9 + .../packages/ml/json_schemas/scripts/index.ts | 21 + .../json_schemas/src/json_schema_service.ts | 171 + ..._ml_anomaly_detectors__job_id__schema.json | 10887 ++++++++++++++++ ...__ml_data_frame_analytics__id__schema.json | 5016 +++++++ ...t___ml_datafeeds__datafeed_id__schema.json | 8054 ++++++++++++ ...ransform__transform_id___pivot_schema.json | 7852 +++++++++++ .../ml/json_schemas/src}/schema_overrides.ts | 4 +- .../ml/json_schemas/src}/types.ts | 0 x-pack/packages/ml/json_schemas/tsconfig.json | 20 + .../advanced_step/advanced_step_details.tsx | 2 +- .../advanced_step/advanced_step_form.tsx | 4 +- .../outlier_hyper_parameters.tsx | 4 +- .../create_analytics_advanced_editor.tsx | 37 +- .../editor_component.tsx | 70 + .../hooks/use_create_analytics_form/state.ts | 8 +- .../json_editor_flyout/json_editor_flyout.tsx | 45 +- .../apidoc_scripts/apidoc_config/apidoc.json | 5 +- .../json_schema_service.test.ts | 612 - .../json_schema_service.ts | 153 - .../models/json_schema_service/openapi.json | 1235 -- x-pack/plugins/ml/server/plugin.ts | 2 - .../plugins/ml/server/routes/json_schema.ts | 56 - x-pack/plugins/ml/tsconfig.json | 1 + .../advanced_pivot_editor.tsx | 24 +- x-pack/plugins/transform/tsconfig.json | 4 +- .../outlier_detection_creation.ts | 4 +- ...outlier_detection_creation_saved_search.ts | 16 +- yarn.lock | 4 + 36 files changed, 32192 insertions(+), 2154 deletions(-) create mode 100644 x-pack/packages/ml/json_schemas/README.md rename x-pack/{plugins/ml/server/models/json_schema_service => packages/ml/json_schemas}/index.ts (80%) create mode 100644 x-pack/packages/ml/json_schemas/jest.config.js create mode 100644 x-pack/packages/ml/json_schemas/kibana.jsonc create mode 100644 x-pack/packages/ml/json_schemas/package.json create mode 100644 x-pack/packages/ml/json_schemas/scripts/index.ts create mode 100644 x-pack/packages/ml/json_schemas/src/json_schema_service.ts create mode 100644 x-pack/packages/ml/json_schemas/src/put___ml_anomaly_detectors__job_id__schema.json create mode 100644 x-pack/packages/ml/json_schemas/src/put___ml_data_frame_analytics__id__schema.json create mode 100644 x-pack/packages/ml/json_schemas/src/put___ml_datafeeds__datafeed_id__schema.json create mode 100644 x-pack/packages/ml/json_schemas/src/put___transform__transform_id___pivot_schema.json rename x-pack/{plugins/ml/server/models/json_schema_service => packages/ml/json_schemas/src}/schema_overrides.ts (82%) rename x-pack/{plugins/ml/server/models/json_schema_service => packages/ml/json_schemas/src}/types.ts (100%) create mode 100644 x-pack/packages/ml/json_schemas/tsconfig.json create mode 100644 x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/create_analytics_advanced_editor/editor_component.tsx delete mode 100644 x-pack/plugins/ml/server/models/json_schema_service/json_schema_service.test.ts delete mode 100644 x-pack/plugins/ml/server/models/json_schema_service/json_schema_service.ts delete mode 100644 x-pack/plugins/ml/server/models/json_schema_service/openapi.json delete mode 100644 x-pack/plugins/ml/server/routes/json_schema.ts diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index a6a45a24266a8..bdffb0e7e350f 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -510,6 +510,7 @@ packages/kbn-ipynb @elastic/search-kibana packages/kbn-jest-serializers @elastic/kibana-operations packages/kbn-journeys @elastic/kibana-operations @elastic/appex-qa packages/kbn-json-ast @elastic/kibana-operations +x-pack/packages/ml/json_schemas @elastic/ml-ui test/health_gateway/plugins/status @elastic/kibana-core test/plugin_functional/plugins/kbn_sample_panel_action @elastic/appex-sharedux test/plugin_functional/plugins/kbn_top_nav @elastic/kibana-core diff --git a/package.json b/package.json index a0777e361b67c..ca627a150f9b1 100644 --- a/package.json +++ b/package.json @@ -544,6 +544,7 @@ "@kbn/investigate-plugin": "link:x-pack/plugins/observability_solution/investigate", "@kbn/io-ts-utils": "link:packages/kbn-io-ts-utils", "@kbn/ipynb": "link:packages/kbn-ipynb", + "@kbn/json-schemas": "link:x-pack/packages/ml/json_schemas", "@kbn/kbn-health-gateway-status-plugin": "link:test/health_gateway/plugins/status", "@kbn/kbn-sample-panel-action-plugin": "link:test/plugin_functional/plugins/kbn_sample_panel_action", "@kbn/kbn-top-nav-plugin": "link:test/plugin_functional/plugins/kbn_top_nav", diff --git a/tsconfig.base.json b/tsconfig.base.json index 0f8d9a11563e0..6939208fcf5b2 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1014,6 +1014,8 @@ "@kbn/journeys/*": ["packages/kbn-journeys/*"], "@kbn/json-ast": ["packages/kbn-json-ast"], "@kbn/json-ast/*": ["packages/kbn-json-ast/*"], + "@kbn/json-schemas": ["x-pack/packages/ml/json_schemas"], + "@kbn/json-schemas/*": ["x-pack/packages/ml/json_schemas/*"], "@kbn/kbn-health-gateway-status-plugin": ["test/health_gateway/plugins/status"], "@kbn/kbn-health-gateway-status-plugin/*": ["test/health_gateway/plugins/status/*"], "@kbn/kbn-sample-panel-action-plugin": ["test/plugin_functional/plugins/kbn_sample_panel_action"], diff --git a/x-pack/packages/ml/json_schemas/README.md b/x-pack/packages/ml/json_schemas/README.md new file mode 100644 index 0000000000000..1d8de910d38f7 --- /dev/null +++ b/x-pack/packages/ml/json_schemas/README.md @@ -0,0 +1,3 @@ +# @kbn/json-schemas + +JSON schema for code editors in Kibana diff --git a/x-pack/plugins/ml/server/models/json_schema_service/index.ts b/x-pack/packages/ml/json_schemas/index.ts similarity index 80% rename from x-pack/plugins/ml/server/models/json_schema_service/index.ts rename to x-pack/packages/ml/json_schemas/index.ts index 348fb5b0c46ea..a03ea607669e5 100644 --- a/x-pack/plugins/ml/server/models/json_schema_service/index.ts +++ b/x-pack/packages/ml/json_schemas/index.ts @@ -5,4 +5,4 @@ * 2.0. */ -export { JsonSchemaService } from './json_schema_service'; +export { JsonSchemaService } from './src/json_schema_service'; diff --git a/x-pack/packages/ml/json_schemas/jest.config.js b/x-pack/packages/ml/json_schemas/jest.config.js new file mode 100644 index 0000000000000..ee3bee9c626bf --- /dev/null +++ b/x-pack/packages/ml/json_schemas/jest.config.js @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +module.exports = { + preset: '@kbn/test/jest_node', + rootDir: '../../../..', + roots: ['/x-pack/packages/ml/json_schemas'], +}; diff --git a/x-pack/packages/ml/json_schemas/kibana.jsonc b/x-pack/packages/ml/json_schemas/kibana.jsonc new file mode 100644 index 0000000000000..4233a2938ecae --- /dev/null +++ b/x-pack/packages/ml/json_schemas/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-common", + "id": "@kbn/json-schemas", + "owner": "@elastic/ml-ui" +} diff --git a/x-pack/packages/ml/json_schemas/package.json b/x-pack/packages/ml/json_schemas/package.json new file mode 100644 index 0000000000000..62e2574b153a5 --- /dev/null +++ b/x-pack/packages/ml/json_schemas/package.json @@ -0,0 +1,9 @@ +{ + "name": "@kbn/json-schemas", + "private": true, + "version": "1.0.0", + "license": "Elastic License 2.0", + "scripts": { + "jsonSchema": "../../../../node_modules/ts-node/dist/bin.js scripts/index.ts" + } +} diff --git a/x-pack/packages/ml/json_schemas/scripts/index.ts b/x-pack/packages/ml/json_schemas/scripts/index.ts new file mode 100644 index 0000000000000..6203a95f9df5b --- /dev/null +++ b/x-pack/packages/ml/json_schemas/scripts/index.ts @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { run } from '@kbn/dev-cli-runner'; +import { JsonSchemaService } from '../src/json_schema_service'; + +const pathToOpenAPI = process.argv[2]; + +run(async ({ log }) => { + try { + await new JsonSchemaService(pathToOpenAPI).createSchemaFiles(); + log.success('Schema files created successfully.'); + } catch (e) { + log.error(`Error creating schema files: ${e}`); + process.exit(1); + } +}); diff --git a/x-pack/packages/ml/json_schemas/src/json_schema_service.ts b/x-pack/packages/ml/json_schemas/src/json_schema_service.ts new file mode 100644 index 0000000000000..e6974a5486f72 --- /dev/null +++ b/x-pack/packages/ml/json_schemas/src/json_schema_service.ts @@ -0,0 +1,171 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import Fs from 'fs'; +import Path from 'path'; +import { jsonSchemaOverrides } from './schema_overrides'; +import { type PropertyDefinition } from './types'; + +export type EditorEndpoints = typeof supportedEndpoints[number]['path']; + +const supportedEndpoints = [ + { + path: '/_ml/anomaly_detectors/{job_id}' as const, + method: 'put', + }, + { + path: '/_ml/datafeeds/{datafeed_id}' as const, + method: 'put', + }, + { + path: '/_transform/{transform_id}' as const, + method: 'put', + props: ['pivot'], + }, + { + path: '/_ml/data_frame/analytics/{id}' as const, + method: 'put', + }, +]; + +/** + * + */ +export class JsonSchemaService { + constructor( + // By default assume that openapi file is in the next to Kibana folder + private readonly pathToOpenAPI: string = Path.resolve( + __dirname, + '..', + '..', + '..', + '..', + '..', + '..', + 'elasticsearch-specification', + 'output', + 'openapi', + 'elasticsearch-serverless-openapi.json' + ) + ) {} + + private applyOverrides(path: EditorEndpoints, schema: PropertyDefinition): PropertyDefinition { + const overrides = jsonSchemaOverrides[path]; + + if (!overrides) return schema; + + return { + ...schema, + ...overrides, + properties: { + ...schema.properties, + ...overrides.properties, + }, + }; + } + + private allComponents: Record = {}; + private componentsDict = new Set(); + + /** + * Extracts only used components + */ + private extractComponents(bodySchema: object) { + for (const prop of Object.values(bodySchema)) { + if (typeof prop !== 'object' || !prop) { + continue; + } + + // Check if prop contains a $ref + if (prop.$ref) { + if (!this.componentsDict.has(prop.$ref)) { + this.componentsDict.add(prop.$ref); + // Check all references of this ref + const schemaKey: string = prop.$ref.split('/').pop()!; + // @ts-ignore + this.extractComponents(this.allComponents.schemas[schemaKey]); + } + } + + this.extractComponents(prop); + } + } + + public async resolveSchema( + path: EditorEndpoints, + method: string, + props?: string[], + schema?: object + ) { + const fileContent = + schema ?? JSON.parse(Fs.readFileSync(Path.resolve(__dirname, 'openapi.json'), 'utf8')); + + const definition = fileContent.paths[path][method]; + + if (!definition) { + throw new Error('Schema definition is not defined'); + } + + let bodySchema = definition.requestBody.content['application/json'].schema; + + // Store components for a later use, to extract only used components + this.allComponents = fileContent.components; + + if (props) { + // Only extract requested properties from the schema + const propDef = bodySchema.properties[props[0]]; + if (propDef.$ref) { + bodySchema = fileContent.components.schemas[propDef.$ref.split('/').pop()!]; + } + } + + bodySchema = this.applyOverrides(path, bodySchema); + + // Extract only used components + this.extractComponents(bodySchema); + + const components = Array.from(this.componentsDict).reduce( + (acc, ref) => { + // Split component path + const componentName = ref.split('/').pop()!; + // @ts-ignore + acc.schemas[componentName] = fileContent.components.schemas[componentName]; + return acc; + }, + { schemas: {} } + ); + + return { + ...bodySchema, + components, + }; + } + + /** + * Generates schema files for each supported endpoint from the openapi file. + */ + public async createSchemaFiles() { + const schema = JSON.parse(Fs.readFileSync(this.pathToOpenAPI, 'utf8')); + + await Promise.all( + supportedEndpoints.map(async (e) => { + // need to extract schema in order to keep required components + this.componentsDict.clear(); + const result = await this.resolveSchema(e.path, e.method, e.props, schema); + Fs.writeFileSync( + Path.resolve( + __dirname, + `${e.method}_${e.path.replace(/[\{\}\/]/g, '_')}${ + e.props ? '__' + e.props.join('_') : '' + }_schema.json` + ), + JSON.stringify(result, null, 2) + ); + }) + ); + } +} diff --git a/x-pack/packages/ml/json_schemas/src/put___ml_anomaly_detectors__job_id__schema.json b/x-pack/packages/ml/json_schemas/src/put___ml_anomaly_detectors__job_id__schema.json new file mode 100644 index 0000000000000..79a871f1ef3fa --- /dev/null +++ b/x-pack/packages/ml/json_schemas/src/put___ml_anomaly_detectors__job_id__schema.json @@ -0,0 +1,10887 @@ +{ + "type": "object", + "properties": { + "allow_lazy_open": { + "description": "Advanced configuration option. Specifies whether this job can open when there is insufficient machine learning node capacity for it to be immediately assigned to a node. By default, if a machine learning node with capacity to run the job cannot immediately be found, the open anomaly detection jobs API returns an error. However, this is also subject to the cluster-wide `xpack.ml.max_lazy_ml_nodes` setting. If this option is set to true, the open anomaly detection jobs API does not return an error and the job waits in the opening state until sufficient machine learning node capacity is available.", + "type": "boolean" + }, + "analysis_config": { + "$ref": "#/components/schemas/ml._types:AnalysisConfig" + }, + "analysis_limits": { + "$ref": "#/components/schemas/ml._types:AnalysisLimits" + }, + "background_persist_interval": { + "$ref": "#/components/schemas/_types:Duration" + }, + "custom_settings": { + "$ref": "#/components/schemas/ml._types:CustomSettings" + }, + "daily_model_snapshot_retention_after_days": { + "description": "Advanced configuration option, which affects the automatic removal of old model snapshots for this job. It specifies a period of time (in days) after which only the first snapshot per day is retained. This period is relative to the timestamp of the most recent snapshot for this job. Valid values range from 0 to `model_snapshot_retention_days`.", + "type": "number" + }, + "data_description": { + "$ref": "#/components/schemas/ml._types:DataDescription" + }, + "datafeed_config": { + "$ref": "#/components/schemas/ml._types:DatafeedConfig" + }, + "description": { + "description": "A description of the job.", + "type": "string" + }, + "groups": { + "description": "A list of job groups. A job can belong to no groups or many.", + "type": "array", + "items": { + "type": "string" + } + }, + "model_plot_config": { + "$ref": "#/components/schemas/ml._types:ModelPlotConfig" + }, + "model_snapshot_retention_days": { + "description": "Advanced configuration option, which affects the automatic removal of old model snapshots for this job. It specifies the maximum period of time (in days) that snapshots are retained. This period is relative to the timestamp of the most recent snapshot for this job. By default, snapshots ten days older than the newest snapshot are deleted.", + "type": "number" + }, + "renormalization_window_days": { + "description": "Advanced configuration option. The period over which adjustments to the score are applied, as new data is seen. The default value is the longer of 30 days or 100 bucket spans.", + "type": "number" + }, + "results_index_name": { + "$ref": "#/components/schemas/_types:IndexName" + }, + "results_retention_days": { + "description": "Advanced configuration option. The period of time (in days) that results are retained. Age is calculated relative to the timestamp of the latest bucket result. If this property has a non-null value, once per day at 00:30 (server time), results that are the specified number of days older than the latest bucket result are deleted from Elasticsearch. The default value is null, which means all results are retained. Annotations generated by the system also count as results for retention purposes; they are deleted after the same number of days as results. Annotations added by users are retained forever.", + "type": "number" + }, + "job_id": { + "type": "string", + "description": "Identifier for the anomaly detection job." + } + }, + "required": [ + "analysis_config", + "data_description" + ], + "components": { + "schemas": { + "ml._types:AnalysisConfig": { + "type": "object", + "properties": { + "bucket_span": { + "$ref": "#/components/schemas/_types:Duration" + }, + "categorization_analyzer": { + "$ref": "#/components/schemas/ml._types:CategorizationAnalyzer" + }, + "categorization_field_name": { + "$ref": "#/components/schemas/_types:Field" + }, + "categorization_filters": { + "description": "If `categorization_field_name` is specified, you can also define optional filters. This property expects an array of regular expressions. The expressions are used to filter out matching sequences from the categorization field values. You can use this functionality to fine tune the categorization by excluding sequences from consideration when categories are defined. For example, you can exclude SQL statements that appear in your log files. This property cannot be used at the same time as `categorization_analyzer`. If you only want to define simple regular expression filters that are applied prior to tokenization, setting this property is the easiest method. If you also want to customize the tokenizer or post-tokenization filtering, use the `categorization_analyzer` property instead and include the filters as pattern_replace character filters. The effect is exactly the same.", + "type": "array", + "items": { + "type": "string" + } + }, + "detectors": { + "description": "Detector configuration objects specify which data fields a job analyzes. They also specify which analytical functions are used. You can specify multiple detectors for a job. If the detectors array does not contain at least one detector, no analysis can occur and an error is returned.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ml._types:Detector" + } + }, + "influencers": { + "description": "A comma separated list of influencer field names. Typically these can be the by, over, or partition fields that are used in the detector configuration. You might also want to use a field name that is not specifically named in a detector, but is available as part of the input data. When you use multiple detectors, the use of influencers is recommended as it aggregates results for each influencer entity.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "latency": { + "$ref": "#/components/schemas/_types:Duration" + }, + "model_prune_window": { + "$ref": "#/components/schemas/_types:Duration" + }, + "multivariate_by_fields": { + "description": "This functionality is reserved for internal use. It is not supported for use in customer environments and is not subject to the support SLA of official GA features. If set to `true`, the analysis will automatically find correlations between metrics for a given by field value and report anomalies when those correlations cease to hold. For example, suppose CPU and memory usage on host A is usually highly correlated with the same metrics on host B. Perhaps this correlation occurs because they are running a load-balanced application. If you enable this property, anomalies will be reported when, for example, CPU usage on host A is high and the value of CPU usage on host B is low. That is to say, you’ll see an anomaly when the CPU of host A is unusual given the CPU of host B. To use the `multivariate_by_fields` property, you must also specify `by_field_name` in your detector.", + "type": "boolean" + }, + "per_partition_categorization": { + "$ref": "#/components/schemas/ml._types:PerPartitionCategorization" + }, + "summary_count_field_name": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "detectors" + ] + }, + "_types:Duration": { + "externalDocs": { + "url": "https://github.com/elastic/elasticsearch/blob/current/libs/core/src/main/java/org/elasticsearch/core/TimeValue.java" + }, + "description": "A duration. Units can be `nanos`, `micros`, `ms` (milliseconds), `s` (seconds), `m` (minutes), `h` (hours) and\n`d` (days). Also accepts \"0\" without a unit and \"-1\" to indicate an unspecified value.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "string", + "enum": [ + "-1" + ] + }, + { + "type": "string", + "enum": [ + "0" + ] + } + ] + }, + "ml._types:CategorizationAnalyzer": { + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/ml._types:CategorizationAnalyzerDefinition" + } + ] + }, + "ml._types:CategorizationAnalyzerDefinition": { + "type": "object", + "properties": { + "char_filter": { + "description": "One or more character filters. In addition to the built-in character filters, other plugins can provide more character filters. If this property is not specified, no character filters are applied prior to categorization. If you are customizing some other aspect of the analyzer and you need to achieve the equivalent of `categorization_filters` (which are not permitted when some other aspect of the analyzer is customized), add them here as pattern replace character filters.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.analysis:CharFilter" + } + }, + "filter": { + "description": "One or more token filters. In addition to the built-in token filters, other plugins can provide more token filters. If this property is not specified, no token filters are applied prior to categorization.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.analysis:TokenFilter" + } + }, + "tokenizer": { + "$ref": "#/components/schemas/_types.analysis:Tokenizer" + } + } + }, + "_types.analysis:CharFilter": { + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/_types.analysis:CharFilterDefinition" + } + ] + }, + "_types.analysis:CharFilterDefinition": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/_types.analysis:HtmlStripCharFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:MappingCharFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:PatternReplaceCharFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:IcuNormalizationCharFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:KuromojiIterationMarkCharFilter" + } + ] + }, + "_types.analysis:HtmlStripCharFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:CharFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "html_strip" + ] + }, + "escaped_tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:CharFilterBase": { + "type": "object", + "properties": { + "version": { + "$ref": "#/components/schemas/_types:VersionString" + } + } + }, + "_types:VersionString": { + "type": "string" + }, + "_types.analysis:MappingCharFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:CharFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "mapping" + ] + }, + "mappings": { + "type": "array", + "items": { + "type": "string" + } + }, + "mappings_path": { + "type": "string" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:PatternReplaceCharFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:CharFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "pattern_replace" + ] + }, + "flags": { + "type": "string" + }, + "pattern": { + "type": "string" + }, + "replacement": { + "type": "string" + } + }, + "required": [ + "type", + "pattern" + ] + } + ] + }, + "_types.analysis:IcuNormalizationCharFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:CharFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "icu_normalizer" + ] + }, + "mode": { + "$ref": "#/components/schemas/_types.analysis:IcuNormalizationMode" + }, + "name": { + "$ref": "#/components/schemas/_types.analysis:IcuNormalizationType" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:IcuNormalizationMode": { + "type": "string", + "enum": [ + "decompose", + "compose" + ] + }, + "_types.analysis:IcuNormalizationType": { + "type": "string", + "enum": [ + "nfc", + "nfkc", + "nfkc_cf" + ] + }, + "_types.analysis:KuromojiIterationMarkCharFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:CharFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "kuromoji_iteration_mark" + ] + }, + "normalize_kana": { + "type": "boolean" + }, + "normalize_kanji": { + "type": "boolean" + } + }, + "required": [ + "type", + "normalize_kana", + "normalize_kanji" + ] + } + ] + }, + "_types.analysis:TokenFilter": { + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterDefinition" + } + ] + }, + "_types.analysis:TokenFilterDefinition": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/_types.analysis:AsciiFoldingTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:CommonGramsTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:ConditionTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:DelimitedPayloadTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:EdgeNGramTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:ElisionTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:FingerprintTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:HunspellTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:HyphenationDecompounderTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:KeepTypesTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:KeepWordsTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:KeywordMarkerTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:KStemTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:LengthTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:LimitTokenCountTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:LowercaseTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:MultiplexerTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:NGramTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:NoriPartOfSpeechTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:PatternCaptureTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:PatternReplaceTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:PorterStemTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:PredicateTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:RemoveDuplicatesTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:ReverseTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:ShingleTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:SnowballTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:StemmerOverrideTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:StemmerTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:StopTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:SynonymGraphTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:SynonymTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:TrimTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:TruncateTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:UniqueTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:UppercaseTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:WordDelimiterGraphTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:WordDelimiterTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:KuromojiStemmerTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:KuromojiReadingFormTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:KuromojiPartOfSpeechTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:IcuCollationTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:IcuFoldingTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:IcuNormalizationTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:IcuTransformTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:PhoneticTokenFilter" + }, + { + "$ref": "#/components/schemas/_types.analysis:DictionaryDecompounderTokenFilter" + } + ] + }, + "_types.analysis:AsciiFoldingTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "asciifolding" + ] + }, + "preserve_original": { + "$ref": "#/components/schemas/_spec_utils:Stringifiedboolean" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:TokenFilterBase": { + "type": "object", + "properties": { + "version": { + "$ref": "#/components/schemas/_types:VersionString" + } + } + }, + "_spec_utils:Stringifiedboolean": { + "description": "Some APIs will return values such as numbers also as a string (notably epoch timestamps). This behavior\nis used to capture this behavior while keeping the semantics of the field type.\n\nDepending on the target language, code generators can keep the union or remove it and leniently parse\nstrings to the target type.", + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "string" + } + ] + }, + "_types.analysis:CommonGramsTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "common_grams" + ] + }, + "common_words": { + "type": "array", + "items": { + "type": "string" + } + }, + "common_words_path": { + "type": "string" + }, + "ignore_case": { + "type": "boolean" + }, + "query_mode": { + "type": "boolean" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:ConditionTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "condition" + ] + }, + "filter": { + "type": "array", + "items": { + "type": "string" + } + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + } + }, + "required": [ + "type", + "filter", + "script" + ] + } + ] + }, + "_types:Script": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:InlineScript" + }, + { + "$ref": "#/components/schemas/_types:StoredScriptId" + } + ] + }, + "_types:InlineScript": { + "allOf": [ + { + "$ref": "#/components/schemas/_types:ScriptBase" + }, + { + "type": "object", + "properties": { + "lang": { + "$ref": "#/components/schemas/_types:ScriptLanguage" + }, + "options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "source": { + "description": "The script source.", + "type": "string" + } + }, + "required": [ + "source" + ] + } + ] + }, + "_types:ScriptBase": { + "type": "object", + "properties": { + "params": { + "description": "Specifies any named parameters that are passed into the script as variables.\nUse parameters instead of hard-coded values to decrease compile time.", + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + }, + "_types:ScriptLanguage": { + "anyOf": [ + { + "type": "string", + "enum": [ + "painless", + "expression", + "mustache", + "java" + ] + }, + { + "type": "string" + } + ] + }, + "_types:StoredScriptId": { + "allOf": [ + { + "$ref": "#/components/schemas/_types:ScriptBase" + }, + { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/_types:Id" + } + }, + "required": [ + "id" + ] + } + ] + }, + "_types:Id": { + "type": "string" + }, + "_types.analysis:DelimitedPayloadTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "delimited_payload" + ] + }, + "delimiter": { + "type": "string" + }, + "encoding": { + "$ref": "#/components/schemas/_types.analysis:DelimitedPayloadEncoding" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:DelimitedPayloadEncoding": { + "type": "string", + "enum": [ + "int", + "float", + "identity" + ] + }, + "_types.analysis:EdgeNGramTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "edge_ngram" + ] + }, + "max_gram": { + "type": "number" + }, + "min_gram": { + "type": "number" + }, + "side": { + "$ref": "#/components/schemas/_types.analysis:EdgeNGramSide" + }, + "preserve_original": { + "$ref": "#/components/schemas/_spec_utils:Stringifiedboolean" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:EdgeNGramSide": { + "type": "string", + "enum": [ + "front", + "back" + ] + }, + "_types.analysis:ElisionTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "elision" + ] + }, + "articles": { + "type": "array", + "items": { + "type": "string" + } + }, + "articles_path": { + "type": "string" + }, + "articles_case": { + "$ref": "#/components/schemas/_spec_utils:Stringifiedboolean" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:FingerprintTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "fingerprint" + ] + }, + "max_output_size": { + "type": "number" + }, + "separator": { + "type": "string" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:HunspellTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "hunspell" + ] + }, + "dedup": { + "type": "boolean" + }, + "dictionary": { + "type": "string" + }, + "locale": { + "type": "string" + }, + "longest_only": { + "type": "boolean" + } + }, + "required": [ + "type", + "locale" + ] + } + ] + }, + "_types.analysis:HyphenationDecompounderTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:CompoundWordTokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "hyphenation_decompounder" + ] + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:CompoundWordTokenFilterBase": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "hyphenation_patterns_path": { + "type": "string" + }, + "max_subword_size": { + "type": "number" + }, + "min_subword_size": { + "type": "number" + }, + "min_word_size": { + "type": "number" + }, + "only_longest_match": { + "type": "boolean" + }, + "word_list": { + "type": "array", + "items": { + "type": "string" + } + }, + "word_list_path": { + "type": "string" + } + } + } + ] + }, + "_types.analysis:KeepTypesTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "keep_types" + ] + }, + "mode": { + "$ref": "#/components/schemas/_types.analysis:KeepTypesMode" + }, + "types": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:KeepTypesMode": { + "type": "string", + "enum": [ + "include", + "exclude" + ] + }, + "_types.analysis:KeepWordsTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "keep" + ] + }, + "keep_words": { + "type": "array", + "items": { + "type": "string" + } + }, + "keep_words_case": { + "type": "boolean" + }, + "keep_words_path": { + "type": "string" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:KeywordMarkerTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "keyword_marker" + ] + }, + "ignore_case": { + "type": "boolean" + }, + "keywords": { + "type": "array", + "items": { + "type": "string" + } + }, + "keywords_path": { + "type": "string" + }, + "keywords_pattern": { + "type": "string" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:KStemTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "kstem" + ] + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:LengthTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "length" + ] + }, + "max": { + "type": "number" + }, + "min": { + "type": "number" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:LimitTokenCountTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "limit" + ] + }, + "consume_all_tokens": { + "type": "boolean" + }, + "max_token_count": { + "$ref": "#/components/schemas/_spec_utils:Stringifiedinteger" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_spec_utils:Stringifiedinteger": { + "description": "Some APIs will return values such as numbers also as a string (notably epoch timestamps). This behavior\nis used to capture this behavior while keeping the semantics of the field type.\n\nDepending on the target language, code generators can keep the union or remove it and leniently parse\nstrings to the target type.", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "_types.analysis:LowercaseTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "lowercase" + ] + }, + "language": { + "type": "string" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:MultiplexerTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "multiplexer" + ] + }, + "filters": { + "type": "array", + "items": { + "type": "string" + } + }, + "preserve_original": { + "$ref": "#/components/schemas/_spec_utils:Stringifiedboolean" + } + }, + "required": [ + "type", + "filters" + ] + } + ] + }, + "_types.analysis:NGramTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ngram" + ] + }, + "max_gram": { + "type": "number" + }, + "min_gram": { + "type": "number" + }, + "preserve_original": { + "$ref": "#/components/schemas/_spec_utils:Stringifiedboolean" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:NoriPartOfSpeechTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "nori_part_of_speech" + ] + }, + "stoptags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:PatternCaptureTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "pattern_capture" + ] + }, + "patterns": { + "type": "array", + "items": { + "type": "string" + } + }, + "preserve_original": { + "$ref": "#/components/schemas/_spec_utils:Stringifiedboolean" + } + }, + "required": [ + "type", + "patterns" + ] + } + ] + }, + "_types.analysis:PatternReplaceTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "pattern_replace" + ] + }, + "all": { + "type": "boolean" + }, + "flags": { + "type": "string" + }, + "pattern": { + "type": "string" + }, + "replacement": { + "type": "string" + } + }, + "required": [ + "type", + "pattern" + ] + } + ] + }, + "_types.analysis:PorterStemTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "porter_stem" + ] + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:PredicateTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "predicate_token_filter" + ] + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + } + }, + "required": [ + "type", + "script" + ] + } + ] + }, + "_types.analysis:RemoveDuplicatesTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "remove_duplicates" + ] + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:ReverseTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "reverse" + ] + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:ShingleTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "shingle" + ] + }, + "filler_token": { + "type": "string" + }, + "max_shingle_size": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "min_shingle_size": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "output_unigrams": { + "type": "boolean" + }, + "output_unigrams_if_no_shingles": { + "type": "boolean" + }, + "token_separator": { + "type": "string" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:SnowballTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "snowball" + ] + }, + "language": { + "$ref": "#/components/schemas/_types.analysis:SnowballLanguage" + } + }, + "required": [ + "type", + "language" + ] + } + ] + }, + "_types.analysis:SnowballLanguage": { + "type": "string", + "enum": [ + "Armenian", + "Basque", + "Catalan", + "Danish", + "Dutch", + "English", + "Finnish", + "French", + "German", + "German2", + "Hungarian", + "Italian", + "Kp", + "Lovins", + "Norwegian", + "Porter", + "Portuguese", + "Romanian", + "Russian", + "Spanish", + "Swedish", + "Turkish" + ] + }, + "_types.analysis:StemmerOverrideTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "stemmer_override" + ] + }, + "rules": { + "type": "array", + "items": { + "type": "string" + } + }, + "rules_path": { + "type": "string" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:StemmerTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "stemmer" + ] + }, + "language": { + "type": "string" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:StopTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "stop" + ] + }, + "ignore_case": { + "type": "boolean" + }, + "remove_trailing": { + "type": "boolean" + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + }, + "stopwords_path": { + "type": "string" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:StopWords": { + "description": "Language value, such as _arabic_ or _thai_. Defaults to _english_.\nEach language value corresponds to a predefined list of stop words in Lucene. See Stop words by language for supported language values and their stop words.\nAlso accepts an array of stop words.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "_types.analysis:SynonymGraphTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "synonym_graph" + ] + }, + "expand": { + "type": "boolean" + }, + "format": { + "$ref": "#/components/schemas/_types.analysis:SynonymFormat" + }, + "lenient": { + "type": "boolean" + }, + "synonyms": { + "type": "array", + "items": { + "type": "string" + } + }, + "synonyms_path": { + "type": "string" + }, + "synonyms_set": { + "type": "string" + }, + "tokenizer": { + "type": "string" + }, + "updateable": { + "type": "boolean" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:SynonymFormat": { + "type": "string", + "enum": [ + "solr", + "wordnet" + ] + }, + "_types.analysis:SynonymTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "synonym" + ] + }, + "expand": { + "type": "boolean" + }, + "format": { + "$ref": "#/components/schemas/_types.analysis:SynonymFormat" + }, + "lenient": { + "type": "boolean" + }, + "synonyms": { + "type": "array", + "items": { + "type": "string" + } + }, + "synonyms_path": { + "type": "string" + }, + "synonyms_set": { + "type": "string" + }, + "tokenizer": { + "type": "string" + }, + "updateable": { + "type": "boolean" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:TrimTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "trim" + ] + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:TruncateTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "truncate" + ] + }, + "length": { + "type": "number" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:UniqueTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "unique" + ] + }, + "only_on_same_position": { + "type": "boolean" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:UppercaseTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "uppercase" + ] + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:WordDelimiterGraphTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "word_delimiter_graph" + ] + }, + "adjust_offsets": { + "type": "boolean" + }, + "catenate_all": { + "type": "boolean" + }, + "catenate_numbers": { + "type": "boolean" + }, + "catenate_words": { + "type": "boolean" + }, + "generate_number_parts": { + "type": "boolean" + }, + "generate_word_parts": { + "type": "boolean" + }, + "ignore_keywords": { + "type": "boolean" + }, + "preserve_original": { + "$ref": "#/components/schemas/_spec_utils:Stringifiedboolean" + }, + "protected_words": { + "type": "array", + "items": { + "type": "string" + } + }, + "protected_words_path": { + "type": "string" + }, + "split_on_case_change": { + "type": "boolean" + }, + "split_on_numerics": { + "type": "boolean" + }, + "stem_english_possessive": { + "type": "boolean" + }, + "type_table": { + "type": "array", + "items": { + "type": "string" + } + }, + "type_table_path": { + "type": "string" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:WordDelimiterTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "word_delimiter" + ] + }, + "catenate_all": { + "type": "boolean" + }, + "catenate_numbers": { + "type": "boolean" + }, + "catenate_words": { + "type": "boolean" + }, + "generate_number_parts": { + "type": "boolean" + }, + "generate_word_parts": { + "type": "boolean" + }, + "preserve_original": { + "$ref": "#/components/schemas/_spec_utils:Stringifiedboolean" + }, + "protected_words": { + "type": "array", + "items": { + "type": "string" + } + }, + "protected_words_path": { + "type": "string" + }, + "split_on_case_change": { + "type": "boolean" + }, + "split_on_numerics": { + "type": "boolean" + }, + "stem_english_possessive": { + "type": "boolean" + }, + "type_table": { + "type": "array", + "items": { + "type": "string" + } + }, + "type_table_path": { + "type": "string" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:KuromojiStemmerTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "kuromoji_stemmer" + ] + }, + "minimum_length": { + "type": "number" + } + }, + "required": [ + "type", + "minimum_length" + ] + } + ] + }, + "_types.analysis:KuromojiReadingFormTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "kuromoji_readingform" + ] + }, + "use_romaji": { + "type": "boolean" + } + }, + "required": [ + "type", + "use_romaji" + ] + } + ] + }, + "_types.analysis:KuromojiPartOfSpeechTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "kuromoji_part_of_speech" + ] + }, + "stoptags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "type", + "stoptags" + ] + } + ] + }, + "_types.analysis:IcuCollationTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "icu_collation" + ] + }, + "alternate": { + "$ref": "#/components/schemas/_types.analysis:IcuCollationAlternate" + }, + "caseFirst": { + "$ref": "#/components/schemas/_types.analysis:IcuCollationCaseFirst" + }, + "caseLevel": { + "type": "boolean" + }, + "country": { + "type": "string" + }, + "decomposition": { + "$ref": "#/components/schemas/_types.analysis:IcuCollationDecomposition" + }, + "hiraganaQuaternaryMode": { + "type": "boolean" + }, + "language": { + "type": "string" + }, + "numeric": { + "type": "boolean" + }, + "rules": { + "type": "string" + }, + "strength": { + "$ref": "#/components/schemas/_types.analysis:IcuCollationStrength" + }, + "variableTop": { + "type": "string" + }, + "variant": { + "type": "string" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:IcuCollationAlternate": { + "type": "string", + "enum": [ + "shifted", + "non-ignorable" + ] + }, + "_types.analysis:IcuCollationCaseFirst": { + "type": "string", + "enum": [ + "lower", + "upper" + ] + }, + "_types.analysis:IcuCollationDecomposition": { + "type": "string", + "enum": [ + "no", + "identical" + ] + }, + "_types.analysis:IcuCollationStrength": { + "type": "string", + "enum": [ + "primary", + "secondary", + "tertiary", + "quaternary", + "identical" + ] + }, + "_types.analysis:IcuFoldingTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "icu_folding" + ] + }, + "unicode_set_filter": { + "type": "string" + } + }, + "required": [ + "type", + "unicode_set_filter" + ] + } + ] + }, + "_types.analysis:IcuNormalizationTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "icu_normalizer" + ] + }, + "name": { + "$ref": "#/components/schemas/_types.analysis:IcuNormalizationType" + } + }, + "required": [ + "type", + "name" + ] + } + ] + }, + "_types.analysis:IcuTransformTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "icu_transform" + ] + }, + "dir": { + "$ref": "#/components/schemas/_types.analysis:IcuTransformDirection" + }, + "id": { + "type": "string" + } + }, + "required": [ + "type", + "id" + ] + } + ] + }, + "_types.analysis:IcuTransformDirection": { + "type": "string", + "enum": [ + "forward", + "reverse" + ] + }, + "_types.analysis:PhoneticTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "phonetic" + ] + }, + "encoder": { + "$ref": "#/components/schemas/_types.analysis:PhoneticEncoder" + }, + "languageset": { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.analysis:PhoneticLanguage" + } + }, + "max_code_len": { + "type": "number" + }, + "name_type": { + "$ref": "#/components/schemas/_types.analysis:PhoneticNameType" + }, + "replace": { + "type": "boolean" + }, + "rule_type": { + "$ref": "#/components/schemas/_types.analysis:PhoneticRuleType" + } + }, + "required": [ + "type", + "encoder", + "languageset", + "name_type", + "rule_type" + ] + } + ] + }, + "_types.analysis:PhoneticEncoder": { + "type": "string", + "enum": [ + "metaphone", + "double_metaphone", + "soundex", + "refined_soundex", + "caverphone1", + "caverphone2", + "cologne", + "nysiis", + "koelnerphonetik", + "haasephonetik", + "beider_morse", + "daitch_mokotoff" + ] + }, + "_types.analysis:PhoneticLanguage": { + "type": "string", + "enum": [ + "any", + "common", + "cyrillic", + "english", + "french", + "german", + "hebrew", + "hungarian", + "polish", + "romanian", + "russian", + "spanish" + ] + }, + "_types.analysis:PhoneticNameType": { + "type": "string", + "enum": [ + "generic", + "ashkenazi", + "sephardic" + ] + }, + "_types.analysis:PhoneticRuleType": { + "type": "string", + "enum": [ + "approx", + "exact" + ] + }, + "_types.analysis:DictionaryDecompounderTokenFilter": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:CompoundWordTokenFilterBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dictionary_decompounder" + ] + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:Tokenizer": { + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/_types.analysis:TokenizerDefinition" + } + ] + }, + "_types.analysis:TokenizerDefinition": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/_types.analysis:CharGroupTokenizer" + }, + { + "$ref": "#/components/schemas/_types.analysis:EdgeNGramTokenizer" + }, + { + "$ref": "#/components/schemas/_types.analysis:KeywordTokenizer" + }, + { + "$ref": "#/components/schemas/_types.analysis:LetterTokenizer" + }, + { + "$ref": "#/components/schemas/_types.analysis:LowercaseTokenizer" + }, + { + "$ref": "#/components/schemas/_types.analysis:NGramTokenizer" + }, + { + "$ref": "#/components/schemas/_types.analysis:NoriTokenizer" + }, + { + "$ref": "#/components/schemas/_types.analysis:PathHierarchyTokenizer" + }, + { + "$ref": "#/components/schemas/_types.analysis:StandardTokenizer" + }, + { + "$ref": "#/components/schemas/_types.analysis:UaxEmailUrlTokenizer" + }, + { + "$ref": "#/components/schemas/_types.analysis:WhitespaceTokenizer" + }, + { + "$ref": "#/components/schemas/_types.analysis:KuromojiTokenizer" + }, + { + "$ref": "#/components/schemas/_types.analysis:PatternTokenizer" + }, + { + "$ref": "#/components/schemas/_types.analysis:IcuTokenizer" + } + ] + }, + "_types.analysis:CharGroupTokenizer": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenizerBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "char_group" + ] + }, + "tokenize_on_chars": { + "type": "array", + "items": { + "type": "string" + } + }, + "max_token_length": { + "type": "number" + } + }, + "required": [ + "type", + "tokenize_on_chars" + ] + } + ] + }, + "_types.analysis:TokenizerBase": { + "type": "object", + "properties": { + "version": { + "$ref": "#/components/schemas/_types:VersionString" + } + } + }, + "_types.analysis:EdgeNGramTokenizer": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenizerBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "edge_ngram" + ] + }, + "custom_token_chars": { + "type": "string" + }, + "max_gram": { + "type": "number" + }, + "min_gram": { + "type": "number" + }, + "token_chars": { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.analysis:TokenChar" + } + } + }, + "required": [ + "type", + "max_gram", + "min_gram", + "token_chars" + ] + } + ] + }, + "_types.analysis:TokenChar": { + "type": "string", + "enum": [ + "letter", + "digit", + "whitespace", + "punctuation", + "symbol", + "custom" + ] + }, + "_types.analysis:KeywordTokenizer": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenizerBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "keyword" + ] + }, + "buffer_size": { + "type": "number" + } + }, + "required": [ + "type", + "buffer_size" + ] + } + ] + }, + "_types.analysis:LetterTokenizer": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenizerBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "letter" + ] + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:LowercaseTokenizer": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenizerBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "lowercase" + ] + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:NGramTokenizer": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenizerBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ngram" + ] + }, + "custom_token_chars": { + "type": "string" + }, + "max_gram": { + "type": "number" + }, + "min_gram": { + "type": "number" + }, + "token_chars": { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.analysis:TokenChar" + } + } + }, + "required": [ + "type", + "max_gram", + "min_gram", + "token_chars" + ] + } + ] + }, + "_types.analysis:NoriTokenizer": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenizerBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "nori_tokenizer" + ] + }, + "decompound_mode": { + "$ref": "#/components/schemas/_types.analysis:NoriDecompoundMode" + }, + "discard_punctuation": { + "type": "boolean" + }, + "user_dictionary": { + "type": "string" + }, + "user_dictionary_rules": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:NoriDecompoundMode": { + "type": "string", + "enum": [ + "discard", + "none", + "mixed" + ] + }, + "_types.analysis:PathHierarchyTokenizer": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenizerBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "path_hierarchy" + ] + }, + "buffer_size": { + "$ref": "#/components/schemas/_spec_utils:Stringifiedinteger" + }, + "delimiter": { + "type": "string" + }, + "replacement": { + "type": "string" + }, + "reverse": { + "$ref": "#/components/schemas/_spec_utils:Stringifiedboolean" + }, + "skip": { + "$ref": "#/components/schemas/_spec_utils:Stringifiedinteger" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:StandardTokenizer": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenizerBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "standard" + ] + }, + "max_token_length": { + "type": "number" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:UaxEmailUrlTokenizer": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenizerBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "uax_url_email" + ] + }, + "max_token_length": { + "type": "number" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:WhitespaceTokenizer": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenizerBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "whitespace" + ] + }, + "max_token_length": { + "type": "number" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:KuromojiTokenizer": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenizerBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "kuromoji_tokenizer" + ] + }, + "discard_punctuation": { + "type": "boolean" + }, + "mode": { + "$ref": "#/components/schemas/_types.analysis:KuromojiTokenizationMode" + }, + "nbest_cost": { + "type": "number" + }, + "nbest_examples": { + "type": "string" + }, + "user_dictionary": { + "type": "string" + }, + "user_dictionary_rules": { + "type": "array", + "items": { + "type": "string" + } + }, + "discard_compound_token": { + "type": "boolean" + } + }, + "required": [ + "type", + "mode" + ] + } + ] + }, + "_types.analysis:KuromojiTokenizationMode": { + "type": "string", + "enum": [ + "normal", + "search", + "extended" + ] + }, + "_types.analysis:PatternTokenizer": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenizerBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "pattern" + ] + }, + "flags": { + "type": "string" + }, + "group": { + "type": "number" + }, + "pattern": { + "type": "string" + } + }, + "required": [ + "type" + ] + } + ] + }, + "_types.analysis:IcuTokenizer": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.analysis:TokenizerBase" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "icu_tokenizer" + ] + }, + "rule_files": { + "type": "string" + } + }, + "required": [ + "type", + "rule_files" + ] + } + ] + }, + "_types:Field": { + "description": "Path to field or array of paths. Some API's support wildcards in the path to select multiple fields.", + "type": "string" + }, + "ml._types:Detector": { + "type": "object", + "properties": { + "by_field_name": { + "$ref": "#/components/schemas/_types:Field" + }, + "custom_rules": { + "description": "Custom rules enable you to customize the way detectors operate. For example, a rule may dictate conditions under which results should be skipped. Kibana refers to custom rules as job rules.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ml._types:DetectionRule" + } + }, + "detector_description": { + "description": "A description of the detector.", + "type": "string" + }, + "detector_index": { + "description": "A unique identifier for the detector. This identifier is based on the order of the detectors in the `analysis_config`, starting at zero. If you specify a value for this property, it is ignored.", + "type": "number" + }, + "exclude_frequent": { + "$ref": "#/components/schemas/ml._types:ExcludeFrequent" + }, + "field_name": { + "$ref": "#/components/schemas/_types:Field" + }, + "function": { + "description": "The analysis function that is used. For example, `count`, `rare`, `mean`, `min`, `max`, or `sum`.", + "type": "string" + }, + "over_field_name": { + "$ref": "#/components/schemas/_types:Field" + }, + "partition_field_name": { + "$ref": "#/components/schemas/_types:Field" + }, + "use_null": { + "description": "Defines whether a new series is used as the null series when there is no value for the by or partition fields.", + "type": "boolean" + } + } + }, + "ml._types:DetectionRule": { + "type": "object", + "properties": { + "actions": { + "description": "The set of actions to be triggered when the rule applies. If more than one action is specified the effects of all actions are combined.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ml._types:RuleAction" + } + }, + "conditions": { + "description": "An array of numeric conditions when the rule applies. A rule must either have a non-empty scope or at least one condition. Multiple conditions are combined together with a logical AND.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ml._types:RuleCondition" + } + }, + "scope": { + "description": "A scope of series where the rule applies. A rule must either have a non-empty scope or at least one condition. By default, the scope includes all series. Scoping is allowed for any of the fields that are also specified in `by_field_name`, `over_field_name`, or `partition_field_name`.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/ml._types:FilterRef" + } + } + } + }, + "ml._types:RuleAction": { + "type": "string", + "enum": [ + "skip_result", + "skip_model_update" + ] + }, + "ml._types:RuleCondition": { + "type": "object", + "properties": { + "applies_to": { + "$ref": "#/components/schemas/ml._types:AppliesTo" + }, + "operator": { + "$ref": "#/components/schemas/ml._types:ConditionOperator" + }, + "value": { + "description": "The value that is compared against the `applies_to` field using the operator.", + "type": "number" + } + }, + "required": [ + "applies_to", + "operator", + "value" + ] + }, + "ml._types:AppliesTo": { + "type": "string", + "enum": [ + "actual", + "typical", + "diff_from_typical", + "time" + ] + }, + "ml._types:ConditionOperator": { + "type": "string", + "enum": [ + "gt", + "gte", + "lt", + "lte" + ] + }, + "ml._types:FilterRef": { + "type": "object", + "properties": { + "filter_id": { + "$ref": "#/components/schemas/_types:Id" + }, + "filter_type": { + "$ref": "#/components/schemas/ml._types:FilterType" + } + }, + "required": [ + "filter_id" + ] + }, + "ml._types:FilterType": { + "type": "string", + "enum": [ + "include", + "exclude" + ] + }, + "ml._types:ExcludeFrequent": { + "type": "string", + "enum": [ + "all", + "none", + "by", + "over" + ] + }, + "ml._types:PerPartitionCategorization": { + "type": "object", + "properties": { + "enabled": { + "description": "To enable this setting, you must also set the `partition_field_name` property to the same value in every detector that uses the keyword `mlcategory`. Otherwise, job creation fails.", + "type": "boolean" + }, + "stop_on_warn": { + "description": "This setting can be set to true only if per-partition categorization is enabled. If true, both categorization and subsequent anomaly detection stops for partitions where the categorization status changes to warn. This setting makes it viable to have a job where it is expected that categorization works well for some partitions but not others; you do not pay the cost of bad categorization forever in the partitions where it works badly.", + "type": "boolean" + } + } + }, + "ml._types:AnalysisLimits": { + "type": "object", + "properties": { + "categorization_examples_limit": { + "description": "The maximum number of examples stored per category in memory and in the results data store. If you increase this value, more examples are available, however it requires that you have more storage available. If you set this value to 0, no examples are stored. NOTE: The `categorization_examples_limit` applies only to analysis that uses categorization.", + "type": "number" + }, + "model_memory_limit": { + "description": "The approximate maximum amount of memory resources that are required for analytical processing. Once this limit is approached, data pruning becomes more aggressive. Upon exceeding this limit, new entities are not modeled. If the `xpack.ml.max_model_memory_limit` setting has a value greater than 0 and less than 1024mb, that value is used instead of the default. The default value is relatively small to ensure that high resource usage is a conscious decision. If you have jobs that are expected to analyze high cardinality fields, you will likely need to use a higher value. If you specify a number instead of a string, the units are assumed to be MiB. Specifying a string is recommended for clarity. If you specify a byte size unit of `b` or `kb` and the number does not equate to a discrete number of megabytes, it is rounded down to the closest MiB. The minimum valid value is 1 MiB. If you specify a value less than 1 MiB, an error occurs. If you specify a value for the `xpack.ml.max_model_memory_limit` setting, an error occurs when you try to create jobs that have `model_memory_limit` values greater than that setting value.", + "type": "string" + } + } + }, + "ml._types:CustomSettings": { + "description": "Custom metadata about the job", + "type": "object" + }, + "ml._types:DataDescription": { + "type": "object", + "properties": { + "format": { + "description": "Only JSON format is supported at this time.", + "type": "string" + }, + "time_field": { + "$ref": "#/components/schemas/_types:Field" + }, + "time_format": { + "description": "The time format, which can be `epoch`, `epoch_ms`, or a custom pattern. The value `epoch` refers to UNIX or Epoch time (the number of seconds since 1 Jan 1970). The value `epoch_ms` indicates that time is measured in milliseconds since the epoch. The `epoch` and `epoch_ms` time formats accept either integer or real values. Custom patterns must conform to the Java DateTimeFormatter class. When you use date-time formatting patterns, it is recommended that you provide the full date, time and time zone. For example: `yyyy-MM-dd'T'HH:mm:ssX`. If the pattern that you specify is not sufficient to produce a complete timestamp, job creation fails.", + "type": "string" + }, + "field_delimiter": { + "type": "string" + } + } + }, + "ml._types:DatafeedConfig": { + "type": "object", + "properties": { + "aggregations": { + "description": "If set, the datafeed performs aggregation searches. Support for aggregations is limited and should be used only with low cardinality data.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.aggregations:AggregationContainer" + } + }, + "chunking_config": { + "$ref": "#/components/schemas/ml._types:ChunkingConfig" + }, + "datafeed_id": { + "$ref": "#/components/schemas/_types:Id" + }, + "delayed_data_check_config": { + "$ref": "#/components/schemas/ml._types:DelayedDataCheckConfig" + }, + "frequency": { + "$ref": "#/components/schemas/_types:Duration" + }, + "indices": { + "description": "An array of index names. Wildcards are supported. If any indices are in remote clusters, the machine learning nodes must have the `remote_cluster_client` role.", + "type": "array", + "items": { + "type": "string" + } + }, + "indices_options": { + "$ref": "#/components/schemas/_types:IndicesOptions" + }, + "job_id": { + "$ref": "#/components/schemas/_types:Id" + }, + "max_empty_searches": { + "description": "If a real-time datafeed has never seen any data (including during any initial training period) then it will automatically stop itself and close its associated job after this many real-time searches that return no documents. In other words, it will stop after `frequency` times `max_empty_searches` of real-time operation. If not set then a datafeed with no end time that sees no data will remain started until it is explicitly stopped.", + "type": "number" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "query_delay": { + "$ref": "#/components/schemas/_types:Duration" + }, + "runtime_mappings": { + "$ref": "#/components/schemas/_types.mapping:RuntimeFields" + }, + "script_fields": { + "description": "Specifies scripts that evaluate custom expressions and returns script fields to the datafeed. The detector configuration objects in a job can contain functions that use these script fields.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types:ScriptField" + } + }, + "scroll_size": { + "description": "The size parameter that is used in Elasticsearch searches when the datafeed does not use aggregations. The maximum value is the value of `index.max_result_window`, which is 10,000 by default.", + "type": "number" + } + } + }, + "_types.aggregations:AggregationContainer": { + "allOf": [ + { + "type": "object", + "properties": { + "aggregations": { + "description": "Sub-aggregations for this aggregation.\nOnly applies to bucket aggregations.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.aggregations:AggregationContainer" + } + }, + "meta": { + "$ref": "#/components/schemas/_types:Metadata" + } + } + }, + { + "type": "object", + "properties": { + "adjacency_matrix": { + "$ref": "#/components/schemas/_types.aggregations:AdjacencyMatrixAggregation" + }, + "auto_date_histogram": { + "$ref": "#/components/schemas/_types.aggregations:AutoDateHistogramAggregation" + }, + "avg": { + "$ref": "#/components/schemas/_types.aggregations:AverageAggregation" + }, + "avg_bucket": { + "$ref": "#/components/schemas/_types.aggregations:AverageBucketAggregation" + }, + "boxplot": { + "$ref": "#/components/schemas/_types.aggregations:BoxplotAggregation" + }, + "bucket_script": { + "$ref": "#/components/schemas/_types.aggregations:BucketScriptAggregation" + }, + "bucket_selector": { + "$ref": "#/components/schemas/_types.aggregations:BucketSelectorAggregation" + }, + "bucket_sort": { + "$ref": "#/components/schemas/_types.aggregations:BucketSortAggregation" + }, + "bucket_count_ks_test": { + "$ref": "#/components/schemas/_types.aggregations:BucketKsAggregation" + }, + "bucket_correlation": { + "$ref": "#/components/schemas/_types.aggregations:BucketCorrelationAggregation" + }, + "cardinality": { + "$ref": "#/components/schemas/_types.aggregations:CardinalityAggregation" + }, + "categorize_text": { + "$ref": "#/components/schemas/_types.aggregations:CategorizeTextAggregation" + }, + "children": { + "$ref": "#/components/schemas/_types.aggregations:ChildrenAggregation" + }, + "composite": { + "$ref": "#/components/schemas/_types.aggregations:CompositeAggregation" + }, + "cumulative_cardinality": { + "$ref": "#/components/schemas/_types.aggregations:CumulativeCardinalityAggregation" + }, + "cumulative_sum": { + "$ref": "#/components/schemas/_types.aggregations:CumulativeSumAggregation" + }, + "date_histogram": { + "$ref": "#/components/schemas/_types.aggregations:DateHistogramAggregation" + }, + "date_range": { + "$ref": "#/components/schemas/_types.aggregations:DateRangeAggregation" + }, + "derivative": { + "$ref": "#/components/schemas/_types.aggregations:DerivativeAggregation" + }, + "diversified_sampler": { + "$ref": "#/components/schemas/_types.aggregations:DiversifiedSamplerAggregation" + }, + "extended_stats": { + "$ref": "#/components/schemas/_types.aggregations:ExtendedStatsAggregation" + }, + "extended_stats_bucket": { + "$ref": "#/components/schemas/_types.aggregations:ExtendedStatsBucketAggregation" + }, + "frequent_item_sets": { + "$ref": "#/components/schemas/_types.aggregations:FrequentItemSetsAggregation" + }, + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "filters": { + "$ref": "#/components/schemas/_types.aggregations:FiltersAggregation" + }, + "geo_bounds": { + "$ref": "#/components/schemas/_types.aggregations:GeoBoundsAggregation" + }, + "geo_centroid": { + "$ref": "#/components/schemas/_types.aggregations:GeoCentroidAggregation" + }, + "geo_distance": { + "$ref": "#/components/schemas/_types.aggregations:GeoDistanceAggregation" + }, + "geohash_grid": { + "$ref": "#/components/schemas/_types.aggregations:GeoHashGridAggregation" + }, + "geo_line": { + "$ref": "#/components/schemas/_types.aggregations:GeoLineAggregation" + }, + "geotile_grid": { + "$ref": "#/components/schemas/_types.aggregations:GeoTileGridAggregation" + }, + "geohex_grid": { + "$ref": "#/components/schemas/_types.aggregations:GeohexGridAggregation" + }, + "global": { + "$ref": "#/components/schemas/_types.aggregations:GlobalAggregation" + }, + "histogram": { + "$ref": "#/components/schemas/_types.aggregations:HistogramAggregation" + }, + "ip_range": { + "$ref": "#/components/schemas/_types.aggregations:IpRangeAggregation" + }, + "ip_prefix": { + "$ref": "#/components/schemas/_types.aggregations:IpPrefixAggregation" + }, + "inference": { + "$ref": "#/components/schemas/_types.aggregations:InferenceAggregation" + }, + "line": { + "$ref": "#/components/schemas/_types.aggregations:GeoLineAggregation" + }, + "matrix_stats": { + "$ref": "#/components/schemas/_types.aggregations:MatrixStatsAggregation" + }, + "max": { + "$ref": "#/components/schemas/_types.aggregations:MaxAggregation" + }, + "max_bucket": { + "$ref": "#/components/schemas/_types.aggregations:MaxBucketAggregation" + }, + "median_absolute_deviation": { + "$ref": "#/components/schemas/_types.aggregations:MedianAbsoluteDeviationAggregation" + }, + "min": { + "$ref": "#/components/schemas/_types.aggregations:MinAggregation" + }, + "min_bucket": { + "$ref": "#/components/schemas/_types.aggregations:MinBucketAggregation" + }, + "missing": { + "$ref": "#/components/schemas/_types.aggregations:MissingAggregation" + }, + "moving_avg": { + "$ref": "#/components/schemas/_types.aggregations:MovingAverageAggregation" + }, + "moving_percentiles": { + "$ref": "#/components/schemas/_types.aggregations:MovingPercentilesAggregation" + }, + "moving_fn": { + "$ref": "#/components/schemas/_types.aggregations:MovingFunctionAggregation" + }, + "multi_terms": { + "$ref": "#/components/schemas/_types.aggregations:MultiTermsAggregation" + }, + "nested": { + "$ref": "#/components/schemas/_types.aggregations:NestedAggregation" + }, + "normalize": { + "$ref": "#/components/schemas/_types.aggregations:NormalizeAggregation" + }, + "parent": { + "$ref": "#/components/schemas/_types.aggregations:ParentAggregation" + }, + "percentile_ranks": { + "$ref": "#/components/schemas/_types.aggregations:PercentileRanksAggregation" + }, + "percentiles": { + "$ref": "#/components/schemas/_types.aggregations:PercentilesAggregation" + }, + "percentiles_bucket": { + "$ref": "#/components/schemas/_types.aggregations:PercentilesBucketAggregation" + }, + "range": { + "$ref": "#/components/schemas/_types.aggregations:RangeAggregation" + }, + "rare_terms": { + "$ref": "#/components/schemas/_types.aggregations:RareTermsAggregation" + }, + "rate": { + "$ref": "#/components/schemas/_types.aggregations:RateAggregation" + }, + "reverse_nested": { + "$ref": "#/components/schemas/_types.aggregations:ReverseNestedAggregation" + }, + "sampler": { + "$ref": "#/components/schemas/_types.aggregations:SamplerAggregation" + }, + "scripted_metric": { + "$ref": "#/components/schemas/_types.aggregations:ScriptedMetricAggregation" + }, + "serial_diff": { + "$ref": "#/components/schemas/_types.aggregations:SerialDifferencingAggregation" + }, + "significant_terms": { + "$ref": "#/components/schemas/_types.aggregations:SignificantTermsAggregation" + }, + "significant_text": { + "$ref": "#/components/schemas/_types.aggregations:SignificantTextAggregation" + }, + "stats": { + "$ref": "#/components/schemas/_types.aggregations:StatsAggregation" + }, + "stats_bucket": { + "$ref": "#/components/schemas/_types.aggregations:StatsBucketAggregation" + }, + "string_stats": { + "$ref": "#/components/schemas/_types.aggregations:StringStatsAggregation" + }, + "sum": { + "$ref": "#/components/schemas/_types.aggregations:SumAggregation" + }, + "sum_bucket": { + "$ref": "#/components/schemas/_types.aggregations:SumBucketAggregation" + }, + "terms": { + "$ref": "#/components/schemas/_types.aggregations:TermsAggregation" + }, + "top_hits": { + "$ref": "#/components/schemas/_types.aggregations:TopHitsAggregation" + }, + "t_test": { + "$ref": "#/components/schemas/_types.aggregations:TTestAggregation" + }, + "top_metrics": { + "$ref": "#/components/schemas/_types.aggregations:TopMetricsAggregation" + }, + "value_count": { + "$ref": "#/components/schemas/_types.aggregations:ValueCountAggregation" + }, + "weighted_avg": { + "$ref": "#/components/schemas/_types.aggregations:WeightedAverageAggregation" + }, + "variable_width_histogram": { + "$ref": "#/components/schemas/_types.aggregations:VariableWidthHistogramAggregation" + } + }, + "minProperties": 1, + "maxProperties": 1 + } + ] + }, + "_types:Metadata": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "_types.aggregations:AdjacencyMatrixAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "filters": { + "description": "Filters used to create buckets.\nAt least one filter is required.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "separator": { + "description": "Separator used to concatenate filter names. Defaults to &.", + "type": "string" + } + } + } + ] + }, + "_types.aggregations:BucketAggregationBase": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:Aggregation" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:Aggregation": { + "type": "object" + }, + "_types.query_dsl:QueryContainer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html" + }, + "type": "object", + "properties": { + "bool": { + "$ref": "#/components/schemas/_types.query_dsl:BoolQuery" + }, + "boosting": { + "$ref": "#/components/schemas/_types.query_dsl:BoostingQuery" + }, + "common": { + "deprecated": true, + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:CommonTermsQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "combined_fields": { + "$ref": "#/components/schemas/_types.query_dsl:CombinedFieldsQuery" + }, + "constant_score": { + "$ref": "#/components/schemas/_types.query_dsl:ConstantScoreQuery" + }, + "dis_max": { + "$ref": "#/components/schemas/_types.query_dsl:DisMaxQuery" + }, + "distance_feature": { + "$ref": "#/components/schemas/_types.query_dsl:DistanceFeatureQuery" + }, + "exists": { + "$ref": "#/components/schemas/_types.query_dsl:ExistsQuery" + }, + "function_score": { + "$ref": "#/components/schemas/_types.query_dsl:FunctionScoreQuery" + }, + "fuzzy": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html" + }, + "description": "Returns documents that contain terms similar to the search term, as measured by a Levenshtein edit distance.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:FuzzyQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "geo_bounding_box": { + "$ref": "#/components/schemas/_types.query_dsl:GeoBoundingBoxQuery" + }, + "geo_distance": { + "$ref": "#/components/schemas/_types.query_dsl:GeoDistanceQuery" + }, + "geo_polygon": { + "$ref": "#/components/schemas/_types.query_dsl:GeoPolygonQuery" + }, + "geo_shape": { + "$ref": "#/components/schemas/_types.query_dsl:GeoShapeQuery" + }, + "has_child": { + "$ref": "#/components/schemas/_types.query_dsl:HasChildQuery" + }, + "has_parent": { + "$ref": "#/components/schemas/_types.query_dsl:HasParentQuery" + }, + "ids": { + "$ref": "#/components/schemas/_types.query_dsl:IdsQuery" + }, + "intervals": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-intervals-query.html" + }, + "description": "Returns documents based on the order and proximity of matching terms.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "knn": { + "$ref": "#/components/schemas/_types:KnnQuery" + }, + "match": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html" + }, + "description": "Returns documents that match a provided text, number, date or boolean value.\nThe provided text is analyzed before matching.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:MatchQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "match_all": { + "$ref": "#/components/schemas/_types.query_dsl:MatchAllQuery" + }, + "match_bool_prefix": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-bool-prefix-query.html" + }, + "description": "Analyzes its input and constructs a `bool` query from the terms.\nEach term except the last is used in a `term` query.\nThe last term is used in a prefix query.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:MatchBoolPrefixQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "match_none": { + "$ref": "#/components/schemas/_types.query_dsl:MatchNoneQuery" + }, + "match_phrase": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query-phrase.html" + }, + "description": "Analyzes the text and creates a phrase query out of the analyzed text.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:MatchPhraseQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "match_phrase_prefix": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query-phrase-prefix.html" + }, + "description": "Returns documents that contain the words of a provided text, in the same order as provided.\nThe last term of the provided text is treated as a prefix, matching any words that begin with that term.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:MatchPhrasePrefixQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "more_like_this": { + "$ref": "#/components/schemas/_types.query_dsl:MoreLikeThisQuery" + }, + "multi_match": { + "$ref": "#/components/schemas/_types.query_dsl:MultiMatchQuery" + }, + "nested": { + "$ref": "#/components/schemas/_types.query_dsl:NestedQuery" + }, + "parent_id": { + "$ref": "#/components/schemas/_types.query_dsl:ParentIdQuery" + }, + "percolate": { + "$ref": "#/components/schemas/_types.query_dsl:PercolateQuery" + }, + "pinned": { + "$ref": "#/components/schemas/_types.query_dsl:PinnedQuery" + }, + "prefix": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-prefix-query.html" + }, + "description": "Returns documents that contain a specific prefix in a provided field.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:PrefixQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "query_string": { + "$ref": "#/components/schemas/_types.query_dsl:QueryStringQuery" + }, + "range": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html" + }, + "description": "Returns documents that contain terms within a provided range.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:RangeQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "rank_feature": { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureQuery" + }, + "regexp": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html" + }, + "description": "Returns documents that contain terms matching a regular expression.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:RegexpQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "rule_query": { + "$ref": "#/components/schemas/_types.query_dsl:RuleQuery" + }, + "script": { + "$ref": "#/components/schemas/_types.query_dsl:ScriptQuery" + }, + "script_score": { + "$ref": "#/components/schemas/_types.query_dsl:ScriptScoreQuery" + }, + "shape": { + "$ref": "#/components/schemas/_types.query_dsl:ShapeQuery" + }, + "simple_query_string": { + "$ref": "#/components/schemas/_types.query_dsl:SimpleQueryStringQuery" + }, + "span_containing": { + "$ref": "#/components/schemas/_types.query_dsl:SpanContainingQuery" + }, + "field_masking_span": { + "$ref": "#/components/schemas/_types.query_dsl:SpanFieldMaskingQuery" + }, + "span_first": { + "$ref": "#/components/schemas/_types.query_dsl:SpanFirstQuery" + }, + "span_multi": { + "$ref": "#/components/schemas/_types.query_dsl:SpanMultiTermQuery" + }, + "span_near": { + "$ref": "#/components/schemas/_types.query_dsl:SpanNearQuery" + }, + "span_not": { + "$ref": "#/components/schemas/_types.query_dsl:SpanNotQuery" + }, + "span_or": { + "$ref": "#/components/schemas/_types.query_dsl:SpanOrQuery" + }, + "span_term": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-span-term-query.html" + }, + "description": "Matches spans containing a term.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:SpanTermQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "span_within": { + "$ref": "#/components/schemas/_types.query_dsl:SpanWithinQuery" + }, + "term": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html" + }, + "description": "Returns documents that contain an exact term in a provided field.\nTo return a document, the query term must exactly match the queried field's value, including whitespace and capitalization.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:TermQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "terms": { + "$ref": "#/components/schemas/_types.query_dsl:TermsQuery" + }, + "terms_set": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-set-query.html" + }, + "description": "Returns documents that contain a minimum number of exact terms in a provided field.\nTo return a document, a required number of terms must exactly match the field values, including whitespace and capitalization.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:TermsSetQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "text_expansion": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-text-expansion-query.html" + }, + "description": "Uses a natural language processing model to convert the query text into a list of token-weight pairs which are then used in a query against a sparse vector or rank features field.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:TextExpansionQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "weighted_tokens": { + "description": "Supports returning text_expansion query results by sending in precomputed tokens with the query.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:WeightedTokensQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "wildcard": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html" + }, + "description": "Returns documents that contain terms matching a wildcard pattern.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:WildcardQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "wrapper": { + "$ref": "#/components/schemas/_types.query_dsl:WrapperQuery" + }, + "type": { + "$ref": "#/components/schemas/_types.query_dsl:TypeQuery" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types.query_dsl:BoolQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "filter": { + "description": "The clause (query) must appear in matching documents.\nHowever, unlike `must`, the score of the query will be ignored.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + } + ] + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "must": { + "description": "The clause (query) must appear in matching documents and will contribute to the score.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + } + ] + }, + "must_not": { + "description": "The clause (query) must not appear in the matching documents.\nBecause scoring is ignored, a score of `0` is returned for all documents.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + } + ] + }, + "should": { + "description": "The clause (query) should appear in the matching document.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + } + ] + } + } + } + ] + }, + "_types.query_dsl:QueryBase": { + "type": "object", + "properties": { + "boost": { + "description": "Floating point number used to decrease or increase the relevance scores of the query.\nBoost values are relative to the default value of 1.0.\nA boost value between 0 and 1.0 decreases the relevance score.\nA value greater than 1.0 increases the relevance score.", + "type": "number" + }, + "_name": { + "type": "string" + } + } + }, + "_types:MinimumShouldMatch": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-minimum-should-match.html" + }, + "description": "The minimum number of terms that should match as integer, percentage or range", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "_types.query_dsl:BoostingQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "negative_boost": { + "description": "Floating point number between 0 and 1.0 used to decrease the relevance scores of documents matching the `negative` query.", + "type": "number" + }, + "negative": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "positive": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "required": [ + "negative_boost", + "negative", + "positive" + ] + } + ] + }, + "_types.query_dsl:CommonTermsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "type": "string" + }, + "cutoff_frequency": { + "type": "number" + }, + "high_freq_operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "low_freq_operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "query": { + "type": "string" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:Operator": { + "type": "string", + "enum": [ + "and", + "AND", + "or", + "OR" + ] + }, + "_types.query_dsl:CombinedFieldsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "fields": { + "description": "List of fields to search. Field wildcard patterns are allowed. Only `text` fields are supported, and they must all have the same search `analyzer`.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "query": { + "description": "Text to search for in the provided `fields`.\nThe `combined_fields` query analyzes the provided text before performing a search.", + "type": "string" + }, + "auto_generate_synonyms_phrase_query": { + "description": "If true, match phrase queries are automatically created for multi-term synonyms.", + "type": "boolean" + }, + "operator": { + "$ref": "#/components/schemas/_types.query_dsl:CombinedFieldsOperator" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "zero_terms_query": { + "$ref": "#/components/schemas/_types.query_dsl:CombinedFieldsZeroTerms" + } + }, + "required": [ + "fields", + "query" + ] + } + ] + }, + "_types.query_dsl:CombinedFieldsOperator": { + "type": "string", + "enum": [ + "or", + "and" + ] + }, + "_types.query_dsl:CombinedFieldsZeroTerms": { + "type": "string", + "enum": [ + "none", + "all" + ] + }, + "_types.query_dsl:ConstantScoreQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "required": [ + "filter" + ] + } + ] + }, + "_types.query_dsl:DisMaxQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "queries": { + "description": "One or more query clauses.\nReturned documents must match one or more of these queries.\nIf a document matches multiple queries, Elasticsearch uses the highest relevance score.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "tie_breaker": { + "description": "Floating point number between 0 and 1.0 used to increase the relevance scores of documents matching multiple query clauses.", + "type": "number" + } + }, + "required": [ + "queries" + ] + } + ] + }, + "_types.query_dsl:DistanceFeatureQuery": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:GeoDistanceFeatureQuery" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:DateDistanceFeatureQuery" + } + ] + }, + "_types.query_dsl:GeoDistanceFeatureQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DistanceFeatureQueryBaseGeoLocationDistance" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:DistanceFeatureQueryBaseGeoLocationDistance": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "origin": { + "$ref": "#/components/schemas/_types:GeoLocation" + }, + "pivot": { + "$ref": "#/components/schemas/_types:Distance" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "origin", + "pivot", + "field" + ] + } + ] + }, + "_types:GeoLocation": { + "description": "A latitude/longitude as a 2 dimensional point. It can be represented in various ways:\n- as a `{lat, long}` object\n- as a geo hash value\n- as a `[lon, lat]` array\n- as a string in `\", \"` or WKT point formats", + "oneOf": [ + { + "$ref": "#/components/schemas/_types:LatLonGeoLocation" + }, + { + "$ref": "#/components/schemas/_types:GeoHashLocation" + }, + { + "type": "array", + "items": { + "type": "number" + } + }, + { + "type": "string" + } + ] + }, + "_types:LatLonGeoLocation": { + "type": "object", + "properties": { + "lat": { + "description": "Latitude", + "type": "number" + }, + "lon": { + "description": "Longitude", + "type": "number" + } + }, + "required": [ + "lat", + "lon" + ] + }, + "_types:GeoHashLocation": { + "type": "object", + "properties": { + "geohash": { + "$ref": "#/components/schemas/_types:GeoHash" + } + }, + "required": [ + "geohash" + ] + }, + "_types:GeoHash": { + "type": "string" + }, + "_types:Distance": { + "type": "string" + }, + "_types.query_dsl:DateDistanceFeatureQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DistanceFeatureQueryBaseDateMathDuration" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:DistanceFeatureQueryBaseDateMathDuration": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "origin": { + "$ref": "#/components/schemas/_types:DateMath" + }, + "pivot": { + "$ref": "#/components/schemas/_types:Duration" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "origin", + "pivot", + "field" + ] + } + ] + }, + "_types:DateMath": { + "type": "string" + }, + "_types.query_dsl:ExistsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "field" + ] + } + ] + }, + "_types.query_dsl:FunctionScoreQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "boost_mode": { + "$ref": "#/components/schemas/_types.query_dsl:FunctionBoostMode" + }, + "functions": { + "description": "One or more functions that compute a new score for each document returned by the query.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:FunctionScoreContainer" + } + }, + "max_boost": { + "description": "Restricts the new score to not exceed the provided limit.", + "type": "number" + }, + "min_score": { + "description": "Excludes documents that do not meet the provided score threshold.", + "type": "number" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "score_mode": { + "$ref": "#/components/schemas/_types.query_dsl:FunctionScoreMode" + } + } + } + ] + }, + "_types.query_dsl:FunctionBoostMode": { + "type": "string", + "enum": [ + "multiply", + "replace", + "sum", + "avg", + "max", + "min" + ] + }, + "_types.query_dsl:FunctionScoreContainer": { + "allOf": [ + { + "type": "object", + "properties": { + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "weight": { + "type": "number" + } + } + }, + { + "type": "object", + "properties": { + "exp": { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunction" + }, + "gauss": { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunction" + }, + "linear": { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunction" + }, + "field_value_factor": { + "$ref": "#/components/schemas/_types.query_dsl:FieldValueFactorScoreFunction" + }, + "random_score": { + "$ref": "#/components/schemas/_types.query_dsl:RandomScoreFunction" + }, + "script_score": { + "$ref": "#/components/schemas/_types.query_dsl:ScriptScoreFunction" + } + }, + "minProperties": 1, + "maxProperties": 1 + } + ] + }, + "_types.query_dsl:DecayFunction": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DateDecayFunction" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:NumericDecayFunction" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:GeoDecayFunction" + } + ] + }, + "_types.query_dsl:DateDecayFunction": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunctionBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:DecayFunctionBase": { + "type": "object", + "properties": { + "multi_value_mode": { + "$ref": "#/components/schemas/_types.query_dsl:MultiValueMode" + } + } + }, + "_types.query_dsl:MultiValueMode": { + "type": "string", + "enum": [ + "min", + "max", + "avg", + "sum" + ] + }, + "_types.query_dsl:NumericDecayFunction": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunctionBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:GeoDecayFunction": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunctionBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:FieldValueFactorScoreFunction": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "factor": { + "description": "Optional factor to multiply the field value with.", + "type": "number" + }, + "missing": { + "description": "Value used if the document doesn’t have that field.\nThe modifier and factor are still applied to it as though it were read from the document.", + "type": "number" + }, + "modifier": { + "$ref": "#/components/schemas/_types.query_dsl:FieldValueFactorModifier" + } + }, + "required": [ + "field" + ] + }, + "_types.query_dsl:FieldValueFactorModifier": { + "type": "string", + "enum": [ + "none", + "log", + "log1p", + "log2p", + "ln", + "ln1p", + "ln2p", + "square", + "sqrt", + "reciprocal" + ] + }, + "_types.query_dsl:RandomScoreFunction": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "seed": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + } + } + }, + "_types.query_dsl:ScriptScoreFunction": { + "type": "object", + "properties": { + "script": { + "$ref": "#/components/schemas/_types:Script" + } + }, + "required": [ + "script" + ] + }, + "_types.query_dsl:FunctionScoreMode": { + "type": "string", + "enum": [ + "multiply", + "sum", + "avg", + "first", + "max", + "min" + ] + }, + "_types.query_dsl:FuzzyQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "max_expansions": { + "description": "Maximum number of variations created.", + "type": "number" + }, + "prefix_length": { + "description": "Number of beginning characters left unchanged when creating expansions.", + "type": "number" + }, + "rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "transpositions": { + "description": "Indicates whether edits include transpositions of two adjacent characters (for example `ab` to `ba`).", + "type": "boolean" + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "value": { + "description": "Term you wish to find in the provided field.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ] + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types:MultiTermQueryRewrite": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-term-rewrite.html" + }, + "type": "string" + }, + "_types:Fuzziness": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#fuzziness" + }, + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "_types.query_dsl:GeoBoundingBoxQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/_types.query_dsl:GeoExecution" + }, + "validation_method": { + "$ref": "#/components/schemas/_types.query_dsl:GeoValidationMethod" + }, + "ignore_unmapped": { + "description": "Set to `true` to ignore an unmapped field and not match any documents for this query.\nSet to `false` to throw an exception if the field is not mapped.", + "type": "boolean" + } + } + } + ] + }, + "_types.query_dsl:GeoExecution": { + "type": "string", + "enum": [ + "memory", + "indexed" + ] + }, + "_types.query_dsl:GeoValidationMethod": { + "type": "string", + "enum": [ + "coerce", + "ignore_malformed", + "strict" + ] + }, + "_types.query_dsl:GeoDistanceQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "distance": { + "$ref": "#/components/schemas/_types:Distance" + }, + "distance_type": { + "$ref": "#/components/schemas/_types:GeoDistanceType" + }, + "validation_method": { + "$ref": "#/components/schemas/_types.query_dsl:GeoValidationMethod" + }, + "ignore_unmapped": { + "description": "Set to `true` to ignore an unmapped field and not match any documents for this query.\nSet to `false` to throw an exception if the field is not mapped.", + "type": "boolean" + } + }, + "required": [ + "distance" + ] + } + ] + }, + "_types:GeoDistanceType": { + "type": "string", + "enum": [ + "arc", + "plane" + ] + }, + "_types.query_dsl:GeoPolygonQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "validation_method": { + "$ref": "#/components/schemas/_types.query_dsl:GeoValidationMethod" + }, + "ignore_unmapped": { + "type": "boolean" + } + } + } + ] + }, + "_types.query_dsl:GeoShapeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "ignore_unmapped": { + "description": "Set to `true` to ignore an unmapped field and not match any documents for this query.\nSet to `false` to throw an exception if the field is not mapped.", + "type": "boolean" + } + } + } + ] + }, + "_types.query_dsl:HasChildQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "ignore_unmapped": { + "description": "Indicates whether to ignore an unmapped `type` and not return any documents instead of an error.", + "type": "boolean" + }, + "inner_hits": { + "$ref": "#/components/schemas/_global.search._types:InnerHits" + }, + "max_children": { + "description": "Maximum number of child documents that match the query allowed for a returned parent document.\nIf the parent document exceeds this limit, it is excluded from the search results.", + "type": "number" + }, + "min_children": { + "description": "Minimum number of child documents that match the query required to match the query for a returned parent document.\nIf the parent document does not meet this limit, it is excluded from the search results.", + "type": "number" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "score_mode": { + "$ref": "#/components/schemas/_types.query_dsl:ChildScoreMode" + }, + "type": { + "$ref": "#/components/schemas/_types:RelationName" + } + }, + "required": [ + "query", + "type" + ] + } + ] + }, + "_global.search._types:InnerHits": { + "type": "object", + "properties": { + "name": { + "$ref": "#/components/schemas/_types:Name" + }, + "size": { + "description": "The maximum number of hits to return per `inner_hits`.", + "type": "number" + }, + "from": { + "description": "Inner hit starting document offset.", + "type": "number" + }, + "collapse": { + "$ref": "#/components/schemas/_global.search._types:FieldCollapse" + }, + "docvalue_fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:FieldAndFormat" + } + }, + "explain": { + "type": "boolean" + }, + "highlight": { + "$ref": "#/components/schemas/_global.search._types:Highlight" + }, + "ignore_unmapped": { + "type": "boolean" + }, + "script_fields": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types:ScriptField" + } + }, + "seq_no_primary_term": { + "type": "boolean" + }, + "fields": { + "$ref": "#/components/schemas/_types:Fields" + }, + "sort": { + "$ref": "#/components/schemas/_types:Sort" + }, + "_source": { + "$ref": "#/components/schemas/_global.search._types:SourceConfig" + }, + "stored_fields": { + "$ref": "#/components/schemas/_types:Fields" + }, + "track_scores": { + "type": "boolean" + }, + "version": { + "type": "boolean" + } + } + }, + "_types:Name": { + "type": "string" + }, + "_global.search._types:FieldCollapse": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "inner_hits": { + "description": "The number of inner hits and their sort order", + "oneOf": [ + { + "$ref": "#/components/schemas/_global.search._types:InnerHits" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_global.search._types:InnerHits" + } + } + ] + }, + "max_concurrent_group_searches": { + "description": "The number of concurrent requests allowed to retrieve the inner_hits per group", + "type": "number" + }, + "collapse": { + "$ref": "#/components/schemas/_global.search._types:FieldCollapse" + } + }, + "required": [ + "field" + ] + }, + "_types.query_dsl:FieldAndFormat": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "format": { + "description": "Format in which the values are returned.", + "type": "string" + }, + "include_unmapped": { + "type": "boolean" + } + }, + "required": [ + "field" + ] + }, + "_global.search._types:Highlight": { + "allOf": [ + { + "$ref": "#/components/schemas/_global.search._types:HighlightBase" + }, + { + "type": "object", + "properties": { + "encoder": { + "$ref": "#/components/schemas/_global.search._types:HighlighterEncoder" + }, + "fields": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_global.search._types:HighlightField" + } + } + }, + "required": [ + "fields" + ] + } + ] + }, + "_global.search._types:HighlightBase": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/_global.search._types:HighlighterType" + }, + "boundary_chars": { + "description": "A string that contains each boundary character.", + "type": "string" + }, + "boundary_max_scan": { + "description": "How far to scan for boundary characters.", + "type": "number" + }, + "boundary_scanner": { + "$ref": "#/components/schemas/_global.search._types:BoundaryScanner" + }, + "boundary_scanner_locale": { + "description": "Controls which locale is used to search for sentence and word boundaries.\nThis parameter takes a form of a language tag, for example: `\"en-US\"`, `\"fr-FR\"`, `\"ja-JP\"`.", + "type": "string" + }, + "force_source": { + "deprecated": true, + "type": "boolean" + }, + "fragmenter": { + "$ref": "#/components/schemas/_global.search._types:HighlighterFragmenter" + }, + "fragment_size": { + "description": "The size of the highlighted fragment in characters.", + "type": "number" + }, + "highlight_filter": { + "type": "boolean" + }, + "highlight_query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "max_fragment_length": { + "type": "number" + }, + "max_analyzed_offset": { + "description": "If set to a non-negative value, highlighting stops at this defined maximum limit.\nThe rest of the text is not processed, thus not highlighted and no error is returned\nThe `max_analyzed_offset` query setting does not override the `index.highlight.max_analyzed_offset` setting, which prevails when it’s set to lower value than the query setting.", + "type": "number" + }, + "no_match_size": { + "description": "The amount of text you want to return from the beginning of the field if there are no matching fragments to highlight.", + "type": "number" + }, + "number_of_fragments": { + "description": "The maximum number of fragments to return.\nIf the number of fragments is set to `0`, no fragments are returned.\nInstead, the entire field contents are highlighted and returned.\nThis can be handy when you need to highlight short texts such as a title or address, but fragmentation is not required.\nIf `number_of_fragments` is `0`, `fragment_size` is ignored.", + "type": "number" + }, + "options": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "order": { + "$ref": "#/components/schemas/_global.search._types:HighlighterOrder" + }, + "phrase_limit": { + "description": "Controls the number of matching phrases in a document that are considered.\nPrevents the `fvh` highlighter from analyzing too many phrases and consuming too much memory.\nWhen using `matched_fields`, `phrase_limit` phrases per matched field are considered. Raising the limit increases query time and consumes more memory.\nOnly supported by the `fvh` highlighter.", + "type": "number" + }, + "post_tags": { + "description": "Use in conjunction with `pre_tags` to define the HTML tags to use for the highlighted text.\nBy default, highlighted text is wrapped in `` and `` tags.", + "type": "array", + "items": { + "type": "string" + } + }, + "pre_tags": { + "description": "Use in conjunction with `post_tags` to define the HTML tags to use for the highlighted text.\nBy default, highlighted text is wrapped in `` and `` tags.", + "type": "array", + "items": { + "type": "string" + } + }, + "require_field_match": { + "description": "By default, only fields that contains a query match are highlighted.\nSet to `false` to highlight all fields.", + "type": "boolean" + }, + "tags_schema": { + "$ref": "#/components/schemas/_global.search._types:HighlighterTagsSchema" + } + } + }, + "_global.search._types:HighlighterType": { + "anyOf": [ + { + "type": "string", + "enum": [ + "plain", + "fvh", + "unified" + ] + }, + { + "type": "string" + } + ] + }, + "_global.search._types:BoundaryScanner": { + "type": "string", + "enum": [ + "chars", + "sentence", + "word" + ] + }, + "_global.search._types:HighlighterFragmenter": { + "type": "string", + "enum": [ + "simple", + "span" + ] + }, + "_global.search._types:HighlighterOrder": { + "type": "string", + "enum": [ + "score" + ] + }, + "_global.search._types:HighlighterTagsSchema": { + "type": "string", + "enum": [ + "styled" + ] + }, + "_global.search._types:HighlighterEncoder": { + "type": "string", + "enum": [ + "default", + "html" + ] + }, + "_global.search._types:HighlightField": { + "allOf": [ + { + "$ref": "#/components/schemas/_global.search._types:HighlightBase" + }, + { + "type": "object", + "properties": { + "fragment_offset": { + "type": "number" + }, + "matched_fields": { + "$ref": "#/components/schemas/_types:Fields" + }, + "analyzer": { + "$ref": "#/components/schemas/_types.analysis:Analyzer" + } + } + } + ] + }, + "_types:Fields": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:Field" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + } + ] + }, + "_types.analysis:Analyzer": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/_types.analysis:CustomAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:FingerprintAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:KeywordAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:LanguageAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:NoriAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:PatternAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:SimpleAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:StandardAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:StopAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:WhitespaceAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:IcuAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:KuromojiAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:SnowballAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:DutchAnalyzer" + } + ] + }, + "_types.analysis:CustomAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "custom" + ] + }, + "char_filter": { + "type": "array", + "items": { + "type": "string" + } + }, + "filter": { + "type": "array", + "items": { + "type": "string" + } + }, + "position_increment_gap": { + "type": "number" + }, + "position_offset_gap": { + "type": "number" + }, + "tokenizer": { + "type": "string" + } + }, + "required": [ + "type", + "tokenizer" + ] + }, + "_types.analysis:FingerprintAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "fingerprint" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "max_output_size": { + "type": "number" + }, + "preserve_original": { + "type": "boolean" + }, + "separator": { + "type": "string" + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + }, + "stopwords_path": { + "type": "string" + } + }, + "required": [ + "type", + "max_output_size", + "preserve_original", + "separator" + ] + }, + "_types.analysis:KeywordAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "keyword" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:LanguageAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "language" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "language": { + "$ref": "#/components/schemas/_types.analysis:Language" + }, + "stem_exclusion": { + "type": "array", + "items": { + "type": "string" + } + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + }, + "stopwords_path": { + "type": "string" + } + }, + "required": [ + "type", + "language", + "stem_exclusion" + ] + }, + "_types.analysis:Language": { + "type": "string", + "enum": [ + "Arabic", + "Armenian", + "Basque", + "Brazilian", + "Bulgarian", + "Catalan", + "Chinese", + "Cjk", + "Czech", + "Danish", + "Dutch", + "English", + "Estonian", + "Finnish", + "French", + "Galician", + "German", + "Greek", + "Hindi", + "Hungarian", + "Indonesian", + "Irish", + "Italian", + "Latvian", + "Norwegian", + "Persian", + "Portuguese", + "Romanian", + "Russian", + "Sorani", + "Spanish", + "Swedish", + "Turkish", + "Thai" + ] + }, + "_types.analysis:NoriAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "nori" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "decompound_mode": { + "$ref": "#/components/schemas/_types.analysis:NoriDecompoundMode" + }, + "stoptags": { + "type": "array", + "items": { + "type": "string" + } + }, + "user_dictionary": { + "type": "string" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:PatternAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "pattern" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "flags": { + "type": "string" + }, + "lowercase": { + "type": "boolean" + }, + "pattern": { + "type": "string" + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + } + }, + "required": [ + "type", + "pattern" + ] + }, + "_types.analysis:SimpleAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "simple" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:StandardAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "standard" + ] + }, + "max_token_length": { + "type": "number" + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:StopAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "stop" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + }, + "stopwords_path": { + "type": "string" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:WhitespaceAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "whitespace" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:IcuAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "icu_analyzer" + ] + }, + "method": { + "$ref": "#/components/schemas/_types.analysis:IcuNormalizationType" + }, + "mode": { + "$ref": "#/components/schemas/_types.analysis:IcuNormalizationMode" + } + }, + "required": [ + "type", + "method", + "mode" + ] + }, + "_types.analysis:KuromojiAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "kuromoji" + ] + }, + "mode": { + "$ref": "#/components/schemas/_types.analysis:KuromojiTokenizationMode" + }, + "user_dictionary": { + "type": "string" + } + }, + "required": [ + "type", + "mode" + ] + }, + "_types.analysis:SnowballAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "snowball" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "language": { + "$ref": "#/components/schemas/_types.analysis:SnowballLanguage" + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + } + }, + "required": [ + "type", + "language" + ] + }, + "_types.analysis:DutchAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dutch" + ] + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + } + }, + "required": [ + "type" + ] + }, + "_types:ScriptField": { + "type": "object", + "properties": { + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "ignore_failure": { + "type": "boolean" + } + }, + "required": [ + "script" + ] + }, + "_types:Sort": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:SortCombinations" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:SortCombinations" + } + } + ] + }, + "_types:SortCombinations": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:Field" + }, + { + "$ref": "#/components/schemas/_types:SortOptions" + } + ] + }, + "_types:SortOptions": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/sort-search-results.html" + }, + "type": "object", + "properties": { + "_score": { + "$ref": "#/components/schemas/_types:ScoreSort" + }, + "_doc": { + "$ref": "#/components/schemas/_types:ScoreSort" + }, + "_geo_distance": { + "$ref": "#/components/schemas/_types:GeoDistanceSort" + }, + "_script": { + "$ref": "#/components/schemas/_types:ScriptSort" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types:ScoreSort": { + "type": "object", + "properties": { + "order": { + "$ref": "#/components/schemas/_types:SortOrder" + } + } + }, + "_types:SortOrder": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "_types:GeoDistanceSort": { + "type": "object", + "properties": { + "mode": { + "$ref": "#/components/schemas/_types:SortMode" + }, + "distance_type": { + "$ref": "#/components/schemas/_types:GeoDistanceType" + }, + "ignore_unmapped": { + "type": "boolean" + }, + "order": { + "$ref": "#/components/schemas/_types:SortOrder" + }, + "unit": { + "$ref": "#/components/schemas/_types:DistanceUnit" + } + } + }, + "_types:SortMode": { + "type": "string", + "enum": [ + "min", + "max", + "sum", + "avg", + "median" + ] + }, + "_types:DistanceUnit": { + "type": "string", + "enum": [ + "in", + "ft", + "yd", + "mi", + "nmi", + "km", + "m", + "cm", + "mm" + ] + }, + "_types:ScriptSort": { + "type": "object", + "properties": { + "order": { + "$ref": "#/components/schemas/_types:SortOrder" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "type": { + "$ref": "#/components/schemas/_types:ScriptSortType" + }, + "mode": { + "$ref": "#/components/schemas/_types:SortMode" + }, + "nested": { + "$ref": "#/components/schemas/_types:NestedSortValue" + } + }, + "required": [ + "script" + ] + }, + "_types:ScriptSortType": { + "type": "string", + "enum": [ + "string", + "number", + "version" + ] + }, + "_types:NestedSortValue": { + "type": "object", + "properties": { + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "max_children": { + "type": "number" + }, + "nested": { + "$ref": "#/components/schemas/_types:NestedSortValue" + }, + "path": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "path" + ] + }, + "_global.search._types:SourceConfig": { + "description": "Defines how to fetch a source. Fetching can be disabled entirely, or the source can be filtered.", + "oneOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/components/schemas/_global.search._types:SourceFilter" + } + ] + }, + "_global.search._types:SourceFilter": { + "type": "object", + "properties": { + "excludes": { + "$ref": "#/components/schemas/_types:Fields" + }, + "includes": { + "$ref": "#/components/schemas/_types:Fields" + } + } + }, + "_types.query_dsl:ChildScoreMode": { + "type": "string", + "enum": [ + "none", + "avg", + "sum", + "max", + "min" + ] + }, + "_types:RelationName": { + "type": "string" + }, + "_types.query_dsl:HasParentQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "ignore_unmapped": { + "description": "Indicates whether to ignore an unmapped `parent_type` and not return any documents instead of an error.\nYou can use this parameter to query multiple indices that may not contain the `parent_type`.", + "type": "boolean" + }, + "inner_hits": { + "$ref": "#/components/schemas/_global.search._types:InnerHits" + }, + "parent_type": { + "$ref": "#/components/schemas/_types:RelationName" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "score": { + "description": "Indicates whether the relevance score of a matching parent document is aggregated into its child documents.", + "type": "boolean" + } + }, + "required": [ + "parent_type", + "query" + ] + } + ] + }, + "_types.query_dsl:IdsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "values": { + "$ref": "#/components/schemas/_types:Ids" + } + } + } + ] + }, + "_types:Ids": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:Id" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Id" + } + } + ] + }, + "_types.query_dsl:IntervalsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "all_of": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsAllOf" + }, + "any_of": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsAnyOf" + }, + "fuzzy": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsFuzzy" + }, + "match": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsMatch" + }, + "prefix": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsPrefix" + }, + "wildcard": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsWildcard" + } + }, + "minProperties": 1, + "maxProperties": 1 + } + ] + }, + "_types.query_dsl:IntervalsAllOf": { + "type": "object", + "properties": { + "intervals": { + "description": "An array of rules to combine. All rules must produce a match in a document for the overall source to match.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + } + }, + "max_gaps": { + "description": "Maximum number of positions between the matching terms.\nIntervals produced by the rules further apart than this are not considered matches.", + "type": "number" + }, + "ordered": { + "description": "If `true`, intervals produced by the rules should appear in the order in which they are specified.", + "type": "boolean" + }, + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsFilter" + } + }, + "required": [ + "intervals" + ] + }, + "_types.query_dsl:IntervalsContainer": { + "type": "object", + "properties": { + "all_of": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsAllOf" + }, + "any_of": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsAnyOf" + }, + "fuzzy": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsFuzzy" + }, + "match": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsMatch" + }, + "prefix": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsPrefix" + }, + "wildcard": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsWildcard" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types.query_dsl:IntervalsAnyOf": { + "type": "object", + "properties": { + "intervals": { + "description": "An array of rules to match.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + } + }, + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsFilter" + } + }, + "required": [ + "intervals" + ] + }, + "_types.query_dsl:IntervalsFilter": { + "type": "object", + "properties": { + "after": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "before": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "contained_by": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "containing": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "not_contained_by": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "not_containing": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "not_overlapping": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "overlapping": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types.query_dsl:IntervalsFuzzy": { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to normalize the term.", + "type": "string" + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "prefix_length": { + "description": "Number of beginning characters left unchanged when creating expansions.", + "type": "number" + }, + "term": { + "description": "The term to match.", + "type": "string" + }, + "transpositions": { + "description": "Indicates whether edits include transpositions of two adjacent characters (for example, `ab` to `ba`).", + "type": "boolean" + }, + "use_field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "term" + ] + }, + "_types.query_dsl:IntervalsMatch": { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to analyze terms in the query.", + "type": "string" + }, + "max_gaps": { + "description": "Maximum number of positions between the matching terms.\nTerms further apart than this are not considered matches.", + "type": "number" + }, + "ordered": { + "description": "If `true`, matching terms must appear in their specified order.", + "type": "boolean" + }, + "query": { + "description": "Text you wish to find in the provided field.", + "type": "string" + }, + "use_field": { + "$ref": "#/components/schemas/_types:Field" + }, + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsFilter" + } + }, + "required": [ + "query" + ] + }, + "_types.query_dsl:IntervalsPrefix": { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to analyze the `prefix`.", + "type": "string" + }, + "prefix": { + "description": "Beginning characters of terms you wish to find in the top-level field.", + "type": "string" + }, + "use_field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "prefix" + ] + }, + "_types.query_dsl:IntervalsWildcard": { + "type": "object", + "properties": { + "analyzer": { + "description": "Analyzer used to analyze the `pattern`.\nDefaults to the top-level field's analyzer.", + "type": "string" + }, + "pattern": { + "description": "Wildcard pattern used to find matching terms.", + "type": "string" + }, + "use_field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "pattern" + ] + }, + "_types:KnnQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "query_vector": { + "$ref": "#/components/schemas/_types:QueryVector" + }, + "query_vector_builder": { + "$ref": "#/components/schemas/_types:QueryVectorBuilder" + }, + "num_candidates": { + "description": "The number of nearest neighbor candidates to consider per shard", + "type": "number" + }, + "filter": { + "description": "Filters for the kNN search query", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + } + ] + }, + "similarity": { + "description": "The minimum similarity for a vector to be considered a match", + "type": "number" + } + }, + "required": [ + "field" + ] + } + ] + }, + "_types:QueryVector": { + "type": "array", + "items": { + "type": "number" + } + }, + "_types:QueryVectorBuilder": { + "type": "object", + "properties": { + "text_embedding": { + "$ref": "#/components/schemas/_types:TextEmbedding" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types:TextEmbedding": { + "type": "object", + "properties": { + "model_id": { + "type": "string" + }, + "model_text": { + "type": "string" + } + }, + "required": [ + "model_id", + "model_text" + ] + }, + "_types.query_dsl:MatchQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert the text in the query value into tokens.", + "type": "string" + }, + "auto_generate_synonyms_phrase_query": { + "description": "If `true`, match phrase queries are automatically created for multi-term synonyms.", + "type": "boolean" + }, + "cutoff_frequency": { + "deprecated": true, + "type": "number" + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "fuzzy_rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "fuzzy_transpositions": { + "description": "If `true`, edits for fuzzy matching include transpositions of two adjacent characters (for example, `ab` to `ba`).", + "type": "boolean" + }, + "lenient": { + "description": "If `true`, format-based errors, such as providing a text query value for a numeric field, are ignored.", + "type": "boolean" + }, + "max_expansions": { + "description": "Maximum number of terms to which the query will expand.", + "type": "number" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "prefix_length": { + "description": "Number of beginning characters left unchanged for fuzzy matching.", + "type": "number" + }, + "query": { + "description": "Text, number, boolean value or date you wish to find in the provided field.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ] + }, + "zero_terms_query": { + "$ref": "#/components/schemas/_types.query_dsl:ZeroTermsQuery" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:ZeroTermsQuery": { + "type": "string", + "enum": [ + "all", + "none" + ] + }, + "_types.query_dsl:MatchAllQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:MatchBoolPrefixQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert the text in the query value into tokens.", + "type": "string" + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "fuzzy_rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "fuzzy_transpositions": { + "description": "If `true`, edits for fuzzy matching include transpositions of two adjacent characters (for example, `ab` to `ba`).\nCan be applied to the term subqueries constructed for all terms but the final term.", + "type": "boolean" + }, + "max_expansions": { + "description": "Maximum number of terms to which the query will expand.\nCan be applied to the term subqueries constructed for all terms but the final term.", + "type": "number" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "prefix_length": { + "description": "Number of beginning characters left unchanged for fuzzy matching.\nCan be applied to the term subqueries constructed for all terms but the final term.", + "type": "number" + }, + "query": { + "description": "Terms you wish to find in the provided field.\nThe last term is used in a prefix query.", + "type": "string" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:MatchNoneQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:MatchPhraseQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert the text in the query value into tokens.", + "type": "string" + }, + "query": { + "description": "Query terms that are analyzed and turned into a phrase query.", + "type": "string" + }, + "slop": { + "description": "Maximum number of positions allowed between matching tokens.", + "type": "number" + }, + "zero_terms_query": { + "$ref": "#/components/schemas/_types.query_dsl:ZeroTermsQuery" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:MatchPhrasePrefixQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert text in the query value into tokens.", + "type": "string" + }, + "max_expansions": { + "description": "Maximum number of terms to which the last provided term of the query value will expand.", + "type": "number" + }, + "query": { + "description": "Text you wish to find in the provided field.", + "type": "string" + }, + "slop": { + "description": "Maximum number of positions allowed between matching tokens.", + "type": "number" + }, + "zero_terms_query": { + "$ref": "#/components/schemas/_types.query_dsl:ZeroTermsQuery" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:MoreLikeThisQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "The analyzer that is used to analyze the free form text.\nDefaults to the analyzer associated with the first field in fields.", + "type": "string" + }, + "boost_terms": { + "description": "Each term in the formed query could be further boosted by their tf-idf score.\nThis sets the boost factor to use when using this feature.\nDefaults to deactivated (0).", + "type": "number" + }, + "fail_on_unsupported_field": { + "description": "Controls whether the query should fail (throw an exception) if any of the specified fields are not of the supported types (`text` or `keyword`).", + "type": "boolean" + }, + "fields": { + "description": "A list of fields to fetch and analyze the text from.\nDefaults to the `index.query.default_field` index setting, which has a default value of `*`.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "include": { + "description": "Specifies whether the input documents should also be included in the search results returned.", + "type": "boolean" + }, + "like": { + "description": "Specifies free form text and/or a single or multiple documents for which you want to find similar documents.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:Like" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:Like" + } + } + ] + }, + "max_doc_freq": { + "description": "The maximum document frequency above which the terms are ignored from the input document.", + "type": "number" + }, + "max_query_terms": { + "description": "The maximum number of query terms that can be selected.", + "type": "number" + }, + "max_word_length": { + "description": "The maximum word length above which the terms are ignored.\nDefaults to unbounded (`0`).", + "type": "number" + }, + "min_doc_freq": { + "description": "The minimum document frequency below which the terms are ignored from the input document.", + "type": "number" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "min_term_freq": { + "description": "The minimum term frequency below which the terms are ignored from the input document.", + "type": "number" + }, + "min_word_length": { + "description": "The minimum word length below which the terms are ignored.", + "type": "number" + }, + "routing": { + "$ref": "#/components/schemas/_types:Routing" + }, + "stop_words": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + }, + "unlike": { + "description": "Used in combination with `like` to exclude documents that match a set of terms.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:Like" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:Like" + } + } + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionNumber" + }, + "version_type": { + "$ref": "#/components/schemas/_types:VersionType" + } + }, + "required": [ + "like" + ] + } + ] + }, + "_types.query_dsl:Like": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-mlt-query.html#_document_input_parameters" + }, + "description": "Text that we want similar documents for or a lookup to a document's field for the text.", + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:LikeDocument" + } + ] + }, + "_types.query_dsl:LikeDocument": { + "type": "object", + "properties": { + "doc": { + "description": "A document not present in the index.", + "type": "object" + }, + "fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "_id": { + "$ref": "#/components/schemas/_types:Id" + }, + "_index": { + "$ref": "#/components/schemas/_types:IndexName" + }, + "per_field_analyzer": { + "description": "Overrides the default analyzer.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "routing": { + "$ref": "#/components/schemas/_types:Routing" + }, + "version": { + "$ref": "#/components/schemas/_types:VersionNumber" + }, + "version_type": { + "$ref": "#/components/schemas/_types:VersionType" + } + } + }, + "_types:IndexName": { + "type": "string" + }, + "_types:Routing": { + "type": "string" + }, + "_types:VersionNumber": { + "type": "number" + }, + "_types:VersionType": { + "type": "string", + "enum": [ + "internal", + "external", + "external_gte", + "force" + ] + }, + "_types.query_dsl:MultiMatchQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert the text in the query value into tokens.", + "type": "string" + }, + "auto_generate_synonyms_phrase_query": { + "description": "If `true`, match phrase queries are automatically created for multi-term synonyms.", + "type": "boolean" + }, + "cutoff_frequency": { + "deprecated": true, + "type": "number" + }, + "fields": { + "$ref": "#/components/schemas/_types:Fields" + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "fuzzy_rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "fuzzy_transpositions": { + "description": "If `true`, edits for fuzzy matching include transpositions of two adjacent characters (for example, `ab` to `ba`).\nCan be applied to the term subqueries constructed for all terms but the final term.", + "type": "boolean" + }, + "lenient": { + "description": "If `true`, format-based errors, such as providing a text query value for a numeric field, are ignored.", + "type": "boolean" + }, + "max_expansions": { + "description": "Maximum number of terms to which the query will expand.", + "type": "number" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "prefix_length": { + "description": "Number of beginning characters left unchanged for fuzzy matching.", + "type": "number" + }, + "query": { + "description": "Text, number, boolean value or date you wish to find in the provided field.", + "type": "string" + }, + "slop": { + "description": "Maximum number of positions allowed between matching tokens.", + "type": "number" + }, + "tie_breaker": { + "description": "Determines how scores for each per-term blended query and scores across groups are combined.", + "type": "number" + }, + "type": { + "$ref": "#/components/schemas/_types.query_dsl:TextQueryType" + }, + "zero_terms_query": { + "$ref": "#/components/schemas/_types.query_dsl:ZeroTermsQuery" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:TextQueryType": { + "type": "string", + "enum": [ + "best_fields", + "most_fields", + "cross_fields", + "phrase", + "phrase_prefix", + "bool_prefix" + ] + }, + "_types.query_dsl:NestedQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "ignore_unmapped": { + "description": "Indicates whether to ignore an unmapped path and not return any documents instead of an error.", + "type": "boolean" + }, + "inner_hits": { + "$ref": "#/components/schemas/_global.search._types:InnerHits" + }, + "path": { + "$ref": "#/components/schemas/_types:Field" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "score_mode": { + "$ref": "#/components/schemas/_types.query_dsl:ChildScoreMode" + } + }, + "required": [ + "path", + "query" + ] + } + ] + }, + "_types.query_dsl:ParentIdQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/_types:Id" + }, + "ignore_unmapped": { + "description": "Indicates whether to ignore an unmapped `type` and not return any documents instead of an error.", + "type": "boolean" + }, + "type": { + "$ref": "#/components/schemas/_types:RelationName" + } + } + } + ] + }, + "_types.query_dsl:PercolateQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "document": { + "description": "The source of the document being percolated.", + "type": "object" + }, + "documents": { + "description": "An array of sources of the documents being percolated.", + "type": "array", + "items": { + "type": "object" + } + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "id": { + "$ref": "#/components/schemas/_types:Id" + }, + "index": { + "$ref": "#/components/schemas/_types:IndexName" + }, + "name": { + "description": "The suffix used for the `_percolator_document_slot` field when multiple `percolate` queries are specified.", + "type": "string" + }, + "preference": { + "description": "Preference used to fetch document to percolate.", + "type": "string" + }, + "routing": { + "$ref": "#/components/schemas/_types:Routing" + }, + "version": { + "$ref": "#/components/schemas/_types:VersionNumber" + } + }, + "required": [ + "field" + ] + } + ] + }, + "_types.query_dsl:PinnedQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "allOf": [ + { + "type": "object", + "properties": { + "organic": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "required": [ + "organic" + ] + }, + { + "type": "object", + "properties": { + "ids": { + "description": "Document IDs listed in the order they are to appear in results.\nRequired if `docs` is not specified.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Id" + } + }, + "docs": { + "description": "Documents listed in the order they are to appear in results.\nRequired if `ids` is not specified.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:PinnedDoc" + } + } + }, + "minProperties": 1, + "maxProperties": 1 + } + ] + } + ] + }, + "_types.query_dsl:PinnedDoc": { + "type": "object", + "properties": { + "_id": { + "$ref": "#/components/schemas/_types:Id" + }, + "_index": { + "$ref": "#/components/schemas/_types:IndexName" + } + }, + "required": [ + "_id", + "_index" + ] + }, + "_types.query_dsl:PrefixQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "value": { + "description": "Beginning characters of terms you wish to find in the provided field.", + "type": "string" + }, + "case_insensitive": { + "description": "Allows ASCII case insensitive matching of the value with the indexed field values when set to `true`.\nDefault is `false` which means the case sensitivity of matching depends on the underlying field’s mapping.", + "type": "boolean" + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types.query_dsl:QueryStringQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "allow_leading_wildcard": { + "description": "If `true`, the wildcard characters `*` and `?` are allowed as the first character of the query string.", + "type": "boolean" + }, + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert text in the query string into tokens.", + "type": "string" + }, + "analyze_wildcard": { + "description": "If `true`, the query attempts to analyze wildcard terms in the query string.", + "type": "boolean" + }, + "auto_generate_synonyms_phrase_query": { + "description": "If `true`, match phrase queries are automatically created for multi-term synonyms.", + "type": "boolean" + }, + "default_field": { + "$ref": "#/components/schemas/_types:Field" + }, + "default_operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "enable_position_increments": { + "description": "If `true`, enable position increments in queries constructed from a `query_string` search.", + "type": "boolean" + }, + "escape": { + "type": "boolean" + }, + "fields": { + "description": "Array of fields to search. Supports wildcards (`*`).", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "fuzzy_max_expansions": { + "description": "Maximum number of terms to which the query expands for fuzzy matching.", + "type": "number" + }, + "fuzzy_prefix_length": { + "description": "Number of beginning characters left unchanged for fuzzy matching.", + "type": "number" + }, + "fuzzy_rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "fuzzy_transpositions": { + "description": "If `true`, edits for fuzzy matching include transpositions of two adjacent characters (for example, `ab` to `ba`).", + "type": "boolean" + }, + "lenient": { + "description": "If `true`, format-based errors, such as providing a text value for a numeric field, are ignored.", + "type": "boolean" + }, + "max_determinized_states": { + "description": "Maximum number of automaton states required for the query.", + "type": "number" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "phrase_slop": { + "description": "Maximum number of positions allowed between matching tokens for phrases.", + "type": "number" + }, + "query": { + "description": "Query string you wish to parse and use for search.", + "type": "string" + }, + "quote_analyzer": { + "description": "Analyzer used to convert quoted text in the query string into tokens.\nFor quoted text, this parameter overrides the analyzer specified in the `analyzer` parameter.", + "type": "string" + }, + "quote_field_suffix": { + "description": "Suffix appended to quoted text in the query string.\nYou can use this suffix to use a different analysis method for exact matches.", + "type": "string" + }, + "rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "tie_breaker": { + "description": "How to combine the queries generated from the individual search terms in the resulting `dis_max` query.", + "type": "number" + }, + "time_zone": { + "$ref": "#/components/schemas/_types:TimeZone" + }, + "type": { + "$ref": "#/components/schemas/_types.query_dsl:TextQueryType" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types:TimeZone": { + "type": "string" + }, + "_types.query_dsl:RangeQuery": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DateRangeQuery" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:NumberRangeQuery" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:TermsRangeQuery" + } + ] + }, + "_types.query_dsl:DateRangeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RangeQueryBase" + }, + { + "type": "object", + "properties": { + "gt": { + "$ref": "#/components/schemas/_types:DateMath" + }, + "gte": { + "$ref": "#/components/schemas/_types:DateMath" + }, + "lt": { + "$ref": "#/components/schemas/_types:DateMath" + }, + "lte": { + "$ref": "#/components/schemas/_types:DateMath" + }, + "from": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:DateMath" + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "to": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:DateMath" + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "format": { + "$ref": "#/components/schemas/_types:DateFormat" + }, + "time_zone": { + "$ref": "#/components/schemas/_types:TimeZone" + } + } + } + ] + }, + "_types.query_dsl:RangeQueryBase": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "relation": { + "$ref": "#/components/schemas/_types.query_dsl:RangeRelation" + } + } + } + ] + }, + "_types.query_dsl:RangeRelation": { + "type": "string", + "enum": [ + "within", + "contains", + "intersects" + ] + }, + "_types:DateFormat": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html" + }, + "type": "string" + }, + "_types.query_dsl:NumberRangeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RangeQueryBase" + }, + { + "type": "object", + "properties": { + "gt": { + "description": "Greater than.", + "type": "number" + }, + "gte": { + "description": "Greater than or equal to.", + "type": "number" + }, + "lt": { + "description": "Less than.", + "type": "number" + }, + "lte": { + "description": "Less than or equal to.", + "type": "number" + }, + "from": { + "oneOf": [ + { + "type": "number" + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "to": { + "oneOf": [ + { + "type": "number" + }, + { + "nullable": true, + "type": "string" + } + ] + } + } + } + ] + }, + "_types.query_dsl:TermsRangeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RangeQueryBase" + }, + { + "type": "object", + "properties": { + "gt": { + "description": "Greater than.", + "type": "string" + }, + "gte": { + "description": "Greater than or equal to.", + "type": "string" + }, + "lt": { + "description": "Less than.", + "type": "string" + }, + "lte": { + "description": "Less than or equal to.", + "type": "string" + }, + "from": { + "oneOf": [ + { + "type": "string" + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "to": { + "oneOf": [ + { + "type": "string" + }, + { + "nullable": true, + "type": "string" + } + ] + } + } + } + ] + }, + "_types.query_dsl:RankFeatureQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "saturation": { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunctionSaturation" + }, + "log": { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunctionLogarithm" + }, + "linear": { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunctionLinear" + }, + "sigmoid": { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunctionSigmoid" + } + }, + "required": [ + "field" + ] + } + ] + }, + "_types.query_dsl:RankFeatureFunctionSaturation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunction" + }, + { + "type": "object", + "properties": { + "pivot": { + "description": "Configurable pivot value so that the result will be less than 0.5.", + "type": "number" + } + } + } + ] + }, + "_types.query_dsl:RankFeatureFunction": { + "type": "object" + }, + "_types.query_dsl:RankFeatureFunctionLogarithm": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunction" + }, + { + "type": "object", + "properties": { + "scaling_factor": { + "description": "Configurable scaling factor.", + "type": "number" + } + }, + "required": [ + "scaling_factor" + ] + } + ] + }, + "_types.query_dsl:RankFeatureFunctionLinear": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunction" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:RankFeatureFunctionSigmoid": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunction" + }, + { + "type": "object", + "properties": { + "pivot": { + "description": "Configurable pivot value so that the result will be less than 0.5.", + "type": "number" + }, + "exponent": { + "description": "Configurable Exponent.", + "type": "number" + } + }, + "required": [ + "pivot", + "exponent" + ] + } + ] + }, + "_types.query_dsl:RegexpQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "case_insensitive": { + "description": "Allows case insensitive matching of the regular expression value with the indexed field values when set to `true`.\nWhen `false`, case sensitivity of matching depends on the underlying field’s mapping.", + "type": "boolean" + }, + "flags": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/regexp-syntax.html" + }, + "description": "Enables optional operators for the regular expression.", + "type": "string" + }, + "max_determinized_states": { + "description": "Maximum number of automaton states required for the query.", + "type": "number" + }, + "rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "value": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/regexp-syntax.html" + }, + "description": "Regular expression for terms you wish to find in the provided field.", + "type": "string" + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types.query_dsl:RuleQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "organic": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "ruleset_id": { + "$ref": "#/components/schemas/_types:Id" + }, + "match_criteria": { + "type": "object" + } + }, + "required": [ + "organic", + "ruleset_id", + "match_criteria" + ] + } + ] + }, + "_types.query_dsl:ScriptQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "script": { + "$ref": "#/components/schemas/_types:Script" + } + }, + "required": [ + "script" + ] + } + ] + }, + "_types.query_dsl:ScriptScoreQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "min_score": { + "description": "Documents with a score lower than this floating point number are excluded from the search results.", + "type": "number" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + } + }, + "required": [ + "query", + "script" + ] + } + ] + }, + "_types.query_dsl:ShapeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "ignore_unmapped": { + "description": "When set to `true` the query ignores an unmapped field and will not match any documents.", + "type": "boolean" + } + } + } + ] + }, + "_types.query_dsl:SimpleQueryStringQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert text in the query string into tokens.", + "type": "string" + }, + "analyze_wildcard": { + "description": "If `true`, the query attempts to analyze wildcard terms in the query string.", + "type": "boolean" + }, + "auto_generate_synonyms_phrase_query": { + "description": "If `true`, the parser creates a match_phrase query for each multi-position token.", + "type": "boolean" + }, + "default_operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "fields": { + "description": "Array of fields you wish to search.\nAccepts wildcard expressions.\nYou also can boost relevance scores for matches to particular fields using a caret (`^`) notation.\nDefaults to the `index.query.default_field index` setting, which has a default value of `*`.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "flags": { + "$ref": "#/components/schemas/_types.query_dsl:SimpleQueryStringFlags" + }, + "fuzzy_max_expansions": { + "description": "Maximum number of terms to which the query expands for fuzzy matching.", + "type": "number" + }, + "fuzzy_prefix_length": { + "description": "Number of beginning characters left unchanged for fuzzy matching.", + "type": "number" + }, + "fuzzy_transpositions": { + "description": "If `true`, edits for fuzzy matching include transpositions of two adjacent characters (for example, `ab` to `ba`).", + "type": "boolean" + }, + "lenient": { + "description": "If `true`, format-based errors, such as providing a text value for a numeric field, are ignored.", + "type": "boolean" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "query": { + "description": "Query string in the simple query string syntax you wish to parse and use for search.", + "type": "string" + }, + "quote_field_suffix": { + "description": "Suffix appended to quoted text in the query string.", + "type": "string" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:SimpleQueryStringFlags": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-simple-query-string-query.html#supported-flags" + }, + "description": "Query flags can be either a single flag or a combination of flags, e.g. `OR|AND|PREFIX`", + "allOf": [ + { + "$ref": "#/components/schemas/_spec_utils:PipeSeparatedFlagsSimpleQueryStringFlag" + } + ] + }, + "_spec_utils:PipeSeparatedFlagsSimpleQueryStringFlag": { + "description": "A set of flags that can be represented as a single enum value or a set of values that are encoded\nas a pipe-separated string\n\nDepending on the target language, code generators can use this hint to generate language specific\nflags enum constructs and the corresponding (de-)serialization code.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:SimpleQueryStringFlag" + }, + { + "type": "string" + } + ] + }, + "_types.query_dsl:SimpleQueryStringFlag": { + "type": "string", + "enum": [ + "NONE", + "AND", + "NOT", + "OR", + "PREFIX", + "PHRASE", + "PRECEDENCE", + "ESCAPE", + "WHITESPACE", + "FUZZY", + "NEAR", + "SLOP", + "ALL" + ] + }, + "_types.query_dsl:SpanContainingQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "big": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + }, + "little": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + }, + "required": [ + "big", + "little" + ] + } + ] + }, + "_types.query_dsl:SpanQuery": { + "type": "object", + "properties": { + "span_containing": { + "$ref": "#/components/schemas/_types.query_dsl:SpanContainingQuery" + }, + "field_masking_span": { + "$ref": "#/components/schemas/_types.query_dsl:SpanFieldMaskingQuery" + }, + "span_first": { + "$ref": "#/components/schemas/_types.query_dsl:SpanFirstQuery" + }, + "span_gap": { + "$ref": "#/components/schemas/_types.query_dsl:SpanGapQuery" + }, + "span_multi": { + "$ref": "#/components/schemas/_types.query_dsl:SpanMultiTermQuery" + }, + "span_near": { + "$ref": "#/components/schemas/_types.query_dsl:SpanNearQuery" + }, + "span_not": { + "$ref": "#/components/schemas/_types.query_dsl:SpanNotQuery" + }, + "span_or": { + "$ref": "#/components/schemas/_types.query_dsl:SpanOrQuery" + }, + "span_term": { + "description": "The equivalent of the `term` query but for use with other span queries.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:SpanTermQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "span_within": { + "$ref": "#/components/schemas/_types.query_dsl:SpanWithinQuery" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types.query_dsl:SpanFieldMaskingQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + }, + "required": [ + "field", + "query" + ] + } + ] + }, + "_types.query_dsl:SpanFirstQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "end": { + "description": "Controls the maximum end position permitted in a match.", + "type": "number" + }, + "match": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + }, + "required": [ + "end", + "match" + ] + } + ] + }, + "_types.query_dsl:SpanGapQuery": { + "description": "Can only be used as a clause in a span_near query.", + "type": "object", + "additionalProperties": { + "type": "number" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types.query_dsl:SpanMultiTermQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "match": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "required": [ + "match" + ] + } + ] + }, + "_types.query_dsl:SpanNearQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "clauses": { + "description": "Array of one or more other span type queries.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + }, + "in_order": { + "description": "Controls whether matches are required to be in-order.", + "type": "boolean" + }, + "slop": { + "description": "Controls the maximum number of intervening unmatched positions permitted.", + "type": "number" + } + }, + "required": [ + "clauses" + ] + } + ] + }, + "_types.query_dsl:SpanNotQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "dist": { + "description": "The number of tokens from within the include span that can’t have overlap with the exclude span.\nEquivalent to setting both `pre` and `post`.", + "type": "number" + }, + "exclude": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + }, + "include": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + }, + "post": { + "description": "The number of tokens after the include span that can’t have overlap with the exclude span.", + "type": "number" + }, + "pre": { + "description": "The number of tokens before the include span that can’t have overlap with the exclude span.", + "type": "number" + } + }, + "required": [ + "exclude", + "include" + ] + } + ] + }, + "_types.query_dsl:SpanOrQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "clauses": { + "description": "Array of one or more other span type queries.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + } + }, + "required": [ + "clauses" + ] + } + ] + }, + "_types.query_dsl:SpanTermQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types.query_dsl:SpanWithinQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "big": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + }, + "little": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + }, + "required": [ + "big", + "little" + ] + } + ] + }, + "_types.query_dsl:TermQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/_types:FieldValue" + }, + "case_insensitive": { + "description": "Allows ASCII case insensitive matching of the value with the indexed field values when set to `true`.\nWhen `false`, the case sensitivity of matching depends on the underlying field’s mapping.", + "type": "boolean" + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types:FieldValue": { + "description": "A field value.", + "oneOf": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "nullable": true, + "type": "string" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:TermsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:TermsSetQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "minimum_should_match_field": { + "$ref": "#/components/schemas/_types:Field" + }, + "minimum_should_match_script": { + "$ref": "#/components/schemas/_types:Script" + }, + "terms": { + "description": "Array of terms you wish to find in the provided field.", + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "terms" + ] + } + ] + }, + "_types.query_dsl:TextExpansionQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "model_id": { + "description": "The text expansion NLP model to use", + "type": "string" + }, + "model_text": { + "description": "The query text", + "type": "string" + }, + "pruning_config": { + "$ref": "#/components/schemas/_types.query_dsl:TokenPruningConfig" + } + }, + "required": [ + "model_id", + "model_text" + ] + } + ] + }, + "_types.query_dsl:TokenPruningConfig": { + "type": "object", + "properties": { + "tokens_freq_ratio_threshold": { + "description": "Tokens whose frequency is more than this threshold times the average frequency of all tokens in the specified field are considered outliers and pruned.", + "type": "number" + }, + "tokens_weight_threshold": { + "description": "Tokens whose weight is less than this threshold are considered nonsignificant and pruned.", + "type": "number" + }, + "only_score_pruned_tokens": { + "description": "Whether to only score pruned tokens, vs only scoring kept tokens.", + "type": "boolean" + } + } + }, + "_types.query_dsl:WeightedTokensQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "tokens": { + "description": "The tokens representing this query", + "type": "object", + "additionalProperties": { + "type": "number" + } + }, + "pruning_config": { + "$ref": "#/components/schemas/_types.query_dsl:TokenPruningConfig" + } + }, + "required": [ + "tokens" + ] + } + ] + }, + "_types.query_dsl:WildcardQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "case_insensitive": { + "description": "Allows case insensitive matching of the pattern with the indexed field values when set to true. Default is false which means the case sensitivity of matching depends on the underlying field’s mapping.", + "type": "boolean" + }, + "rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "value": { + "description": "Wildcard pattern for terms you wish to find in the provided field. Required, when wildcard is not set.", + "type": "string" + }, + "wildcard": { + "description": "Wildcard pattern for terms you wish to find in the provided field. Required, when value is not set.", + "type": "string" + } + } + } + ] + }, + "_types.query_dsl:WrapperQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "query": { + "description": "A base64 encoded query.\nThe binary data format can be any of JSON, YAML, CBOR or SMILE encodings", + "type": "string" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:TypeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types.aggregations:AutoDateHistogramAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "buckets": { + "description": "The target number of buckets.", + "type": "number" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "format": { + "description": "The date format used to format `key_as_string` in the response.\nIf no `format` is specified, the first date format specified in the field mapping is used.", + "type": "string" + }, + "minimum_interval": { + "$ref": "#/components/schemas/_types.aggregations:MinimumInterval" + }, + "missing": { + "$ref": "#/components/schemas/_types:DateTime" + }, + "offset": { + "description": "Time zone specified as a ISO 8601 UTC offset.", + "type": "string" + }, + "params": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "time_zone": { + "$ref": "#/components/schemas/_types:TimeZone" + } + } + } + ] + }, + "_types.aggregations:MinimumInterval": { + "type": "string", + "enum": [ + "second", + "minute", + "hour", + "day", + "month", + "year" + ] + }, + "_types:DateTime": { + "description": "A date and time, either as a string whose format can depend on the context (defaulting to ISO 8601), or a\nnumber of milliseconds since the Epoch. Elasticsearch accepts both as input, but will generally output a string\nrepresentation.", + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/_types:EpochTimeUnitMillis" + } + ] + }, + "_types:EpochTimeUnitMillis": { + "allOf": [ + { + "$ref": "#/components/schemas/_types:UnitMillis" + } + ] + }, + "_types:UnitMillis": { + "description": "Time unit for milliseconds", + "type": "number" + }, + "_types.aggregations:AverageAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:FormatMetricAggregationBase": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "format": { + "type": "string" + } + } + } + ] + }, + "_types.aggregations:MetricAggregationBase": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "missing": { + "$ref": "#/components/schemas/_types.aggregations:Missing" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + } + } + }, + "_types.aggregations:Missing": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ] + }, + "_types.aggregations:AverageBucketAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:PipelineAggregationBase": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketPathAggregation" + }, + { + "type": "object", + "properties": { + "format": { + "description": "`DecimalFormat` pattern for the output value.\nIf specified, the formatted value is returned in the aggregation’s `value_as_string` property.", + "type": "string" + }, + "gap_policy": { + "$ref": "#/components/schemas/_types.aggregations:GapPolicy" + } + } + } + ] + }, + "_types.aggregations:BucketPathAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:Aggregation" + }, + { + "type": "object", + "properties": { + "buckets_path": { + "$ref": "#/components/schemas/_types.aggregations:BucketsPath" + } + } + } + ] + }, + "_types.aggregations:BucketsPath": { + "description": "Buckets path can be expressed in different ways, and an aggregation may accept some or all of these\nforms depending on its type. Please refer to each aggregation's documentation to know what buckets\npath forms they accept.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + ] + }, + "_types.aggregations:GapPolicy": { + "type": "string", + "enum": [ + "skip", + "insert_zeros", + "keep_values" + ] + }, + "_types.aggregations:BoxplotAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "compression": { + "description": "Limits the maximum number of nodes used by the underlying TDigest algorithm to `20 * compression`, enabling control of memory usage and approximation error.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:BucketScriptAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "script": { + "$ref": "#/components/schemas/_types:Script" + } + } + } + ] + }, + "_types.aggregations:BucketSelectorAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "script": { + "$ref": "#/components/schemas/_types:Script" + } + } + } + ] + }, + "_types.aggregations:BucketSortAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:Aggregation" + }, + { + "type": "object", + "properties": { + "from": { + "description": "Buckets in positions prior to `from` will be truncated.", + "type": "number" + }, + "gap_policy": { + "$ref": "#/components/schemas/_types.aggregations:GapPolicy" + }, + "size": { + "description": "The number of buckets to return.\nDefaults to all buckets of the parent aggregation.", + "type": "number" + }, + "sort": { + "$ref": "#/components/schemas/_types:Sort" + } + } + } + ] + }, + "_types.aggregations:BucketKsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketPathAggregation" + }, + { + "type": "object", + "properties": { + "alternative": { + "description": "A list of string values indicating which K-S test alternative to calculate. The valid values\nare: \"greater\", \"less\", \"two_sided\". This parameter is key for determining the K-S statistic used\nwhen calculating the K-S test. Default value is all possible alternative hypotheses.", + "type": "array", + "items": { + "type": "string" + } + }, + "fractions": { + "description": "A list of doubles indicating the distribution of the samples with which to compare to the `buckets_path` results.\nIn typical usage this is the overall proportion of documents in each bucket, which is compared with the actual\ndocument proportions in each bucket from the sibling aggregation counts. The default is to assume that overall\ndocuments are uniformly distributed on these buckets, which they would be if one used equal percentiles of a\nmetric to define the bucket end points.", + "type": "array", + "items": { + "type": "number" + } + }, + "sampling_method": { + "description": "Indicates the sampling methodology when calculating the K-S test. Note, this is sampling of the returned values.\nThis determines the cumulative distribution function (CDF) points used comparing the two samples. Default is\n`upper_tail`, which emphasizes the upper end of the CDF points. Valid options are: `upper_tail`, `uniform`,\nand `lower_tail`.", + "type": "string" + } + } + } + ] + }, + "_types.aggregations:BucketCorrelationAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketPathAggregation" + }, + { + "type": "object", + "properties": { + "function": { + "$ref": "#/components/schemas/_types.aggregations:BucketCorrelationFunction" + } + }, + "required": [ + "function" + ] + } + ] + }, + "_types.aggregations:BucketCorrelationFunction": { + "type": "object", + "properties": { + "count_correlation": { + "$ref": "#/components/schemas/_types.aggregations:BucketCorrelationFunctionCountCorrelation" + } + }, + "required": [ + "count_correlation" + ] + }, + "_types.aggregations:BucketCorrelationFunctionCountCorrelation": { + "type": "object", + "properties": { + "indicator": { + "$ref": "#/components/schemas/_types.aggregations:BucketCorrelationFunctionCountCorrelationIndicator" + } + }, + "required": [ + "indicator" + ] + }, + "_types.aggregations:BucketCorrelationFunctionCountCorrelationIndicator": { + "type": "object", + "properties": { + "doc_count": { + "description": "The total number of documents that initially created the expectations. It’s required to be greater\nthan or equal to the sum of all values in the buckets_path as this is the originating superset of data\nto which the term values are correlated.", + "type": "number" + }, + "expectations": { + "description": "An array of numbers with which to correlate the configured `bucket_path` values.\nThe length of this value must always equal the number of buckets returned by the `bucket_path`.", + "type": "array", + "items": { + "type": "number" + } + }, + "fractions": { + "description": "An array of fractions to use when averaging and calculating variance. This should be used if\nthe pre-calculated data and the buckets_path have known gaps. The length of fractions, if provided,\nmust equal expectations.", + "type": "array", + "items": { + "type": "number" + } + } + }, + "required": [ + "doc_count", + "expectations" + ] + }, + "_types.aggregations:CardinalityAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "precision_threshold": { + "description": "A unique count below which counts are expected to be close to accurate.\nThis allows to trade memory for accuracy.", + "type": "number" + }, + "rehash": { + "type": "boolean" + }, + "execution_hint": { + "$ref": "#/components/schemas/_types.aggregations:CardinalityExecutionMode" + } + } + } + ] + }, + "_types.aggregations:CardinalityExecutionMode": { + "type": "string", + "enum": [ + "global_ordinals", + "segment_ordinals", + "direct", + "save_memory_heuristic", + "save_time_heuristic" + ] + }, + "_types.aggregations:CategorizeTextAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:Aggregation" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "max_unique_tokens": { + "description": "The maximum number of unique tokens at any position up to max_matched_tokens. Must be larger than 1.\nSmaller values use less memory and create fewer categories. Larger values will use more memory and\ncreate narrower categories. Max allowed value is 100.", + "type": "number" + }, + "max_matched_tokens": { + "description": "The maximum number of token positions to match on before attempting to merge categories. Larger\nvalues will use more memory and create narrower categories. Max allowed value is 100.", + "type": "number" + }, + "similarity_threshold": { + "description": "The minimum percentage of tokens that must match for text to be added to the category bucket. Must\nbe between 1 and 100. The larger the value the narrower the categories. Larger values will increase memory\nusage and create narrower categories.", + "type": "number" + }, + "categorization_filters": { + "description": "This property expects an array of regular expressions. The expressions are used to filter out matching\nsequences from the categorization field values. You can use this functionality to fine tune the categorization\nby excluding sequences from consideration when categories are defined. For example, you can exclude SQL\nstatements that appear in your log files. This property cannot be used at the same time as categorization_analyzer.\nIf you only want to define simple regular expression filters that are applied prior to tokenization, setting\nthis property is the easiest method. If you also want to customize the tokenizer or post-tokenization filtering,\nuse the categorization_analyzer property instead and include the filters as pattern_replace character filters.", + "type": "array", + "items": { + "type": "string" + } + }, + "categorization_analyzer": { + "$ref": "#/components/schemas/_types.aggregations:CategorizeTextAnalyzer" + }, + "shard_size": { + "description": "The number of categorization buckets to return from each shard before merging all the results.", + "type": "number" + }, + "size": { + "description": "The number of buckets to return.", + "type": "number" + }, + "min_doc_count": { + "description": "The minimum number of documents in a bucket to be returned to the results.", + "type": "number" + }, + "shard_min_doc_count": { + "description": "The minimum number of documents in a bucket to be returned from the shard before merging.", + "type": "number" + } + }, + "required": [ + "field" + ] + } + ] + }, + "_types.aggregations:CategorizeTextAnalyzer": { + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/_types.aggregations:CustomCategorizeTextAnalyzer" + } + ] + }, + "_types.aggregations:CustomCategorizeTextAnalyzer": { + "type": "object", + "properties": { + "char_filter": { + "type": "array", + "items": { + "type": "string" + } + }, + "tokenizer": { + "type": "string" + }, + "filter": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "_types.aggregations:ChildrenAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/_types:RelationName" + } + } + } + ] + }, + "_types.aggregations:CompositeAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "after": { + "$ref": "#/components/schemas/_types.aggregations:CompositeAggregateKey" + }, + "size": { + "description": "The number of composite buckets that should be returned.", + "type": "number" + }, + "sources": { + "description": "The value sources used to build composite buckets.\nKeys are returned in the order of the `sources` definition.", + "type": "array", + "items": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.aggregations:CompositeAggregationSource" + } + } + } + } + } + ] + }, + "_types.aggregations:CompositeAggregateKey": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types:FieldValue" + } + }, + "_types.aggregations:CompositeAggregationSource": { + "type": "object", + "properties": { + "terms": { + "$ref": "#/components/schemas/_types.aggregations:CompositeTermsAggregation" + }, + "histogram": { + "$ref": "#/components/schemas/_types.aggregations:CompositeHistogramAggregation" + }, + "date_histogram": { + "$ref": "#/components/schemas/_types.aggregations:CompositeDateHistogramAggregation" + }, + "geotile_grid": { + "$ref": "#/components/schemas/_types.aggregations:CompositeGeoTileGridAggregation" + } + } + }, + "_types.aggregations:CompositeTermsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:CompositeAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:CompositeAggregationBase": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "missing_bucket": { + "type": "boolean" + }, + "missing_order": { + "$ref": "#/components/schemas/_types.aggregations:MissingOrder" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "value_type": { + "$ref": "#/components/schemas/_types.aggregations:ValueType" + }, + "order": { + "$ref": "#/components/schemas/_types:SortOrder" + } + } + }, + "_types.aggregations:MissingOrder": { + "type": "string", + "enum": [ + "first", + "last", + "default" + ] + }, + "_types.aggregations:ValueType": { + "type": "string", + "enum": [ + "string", + "long", + "double", + "number", + "date", + "date_nanos", + "ip", + "numeric", + "geo_point", + "boolean" + ] + }, + "_types.aggregations:CompositeHistogramAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:CompositeAggregationBase" + }, + { + "type": "object", + "properties": { + "interval": { + "type": "number" + } + }, + "required": [ + "interval" + ] + } + ] + }, + "_types.aggregations:CompositeDateHistogramAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:CompositeAggregationBase" + }, + { + "type": "object", + "properties": { + "format": { + "type": "string" + }, + "calendar_interval": { + "$ref": "#/components/schemas/_types:DurationLarge" + }, + "fixed_interval": { + "$ref": "#/components/schemas/_types:DurationLarge" + }, + "offset": { + "$ref": "#/components/schemas/_types:Duration" + }, + "time_zone": { + "$ref": "#/components/schemas/_types:TimeZone" + } + } + } + ] + }, + "_types:DurationLarge": { + "description": "A date histogram interval. Similar to `Duration` with additional units: `w` (week), `M` (month), `q` (quarter) and\n`y` (year)", + "type": "string" + }, + "_types.aggregations:CompositeGeoTileGridAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:CompositeAggregationBase" + }, + { + "type": "object", + "properties": { + "precision": { + "type": "number" + }, + "bounds": { + "$ref": "#/components/schemas/_types:GeoBounds" + } + } + } + ] + }, + "_types:GeoBounds": { + "description": "A geo bounding box. It can be represented in various ways:\n- as 4 top/bottom/left/right coordinates\n- as 2 top_left / bottom_right points\n- as 2 top_right / bottom_left points\n- as a WKT bounding box", + "oneOf": [ + { + "$ref": "#/components/schemas/_types:CoordsGeoBounds" + }, + { + "$ref": "#/components/schemas/_types:TopLeftBottomRightGeoBounds" + }, + { + "$ref": "#/components/schemas/_types:TopRightBottomLeftGeoBounds" + }, + { + "$ref": "#/components/schemas/_types:WktGeoBounds" + } + ] + }, + "_types:CoordsGeoBounds": { + "type": "object", + "properties": { + "top": { + "type": "number" + }, + "bottom": { + "type": "number" + }, + "left": { + "type": "number" + }, + "right": { + "type": "number" + } + }, + "required": [ + "top", + "bottom", + "left", + "right" + ] + }, + "_types:TopLeftBottomRightGeoBounds": { + "type": "object", + "properties": { + "top_left": { + "$ref": "#/components/schemas/_types:GeoLocation" + }, + "bottom_right": { + "$ref": "#/components/schemas/_types:GeoLocation" + } + }, + "required": [ + "top_left", + "bottom_right" + ] + }, + "_types:TopRightBottomLeftGeoBounds": { + "type": "object", + "properties": { + "top_right": { + "$ref": "#/components/schemas/_types:GeoLocation" + }, + "bottom_left": { + "$ref": "#/components/schemas/_types:GeoLocation" + } + }, + "required": [ + "top_right", + "bottom_left" + ] + }, + "_types:WktGeoBounds": { + "type": "object", + "properties": { + "wkt": { + "type": "string" + } + }, + "required": [ + "wkt" + ] + }, + "_types.aggregations:CumulativeCardinalityAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:CumulativeSumAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:DateHistogramAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "calendar_interval": { + "$ref": "#/components/schemas/_types.aggregations:CalendarInterval" + }, + "extended_bounds": { + "$ref": "#/components/schemas/_types.aggregations:ExtendedBoundsFieldDateMath" + }, + "hard_bounds": { + "$ref": "#/components/schemas/_types.aggregations:ExtendedBoundsFieldDateMath" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "fixed_interval": { + "$ref": "#/components/schemas/_types:Duration" + }, + "format": { + "description": "The date format used to format `key_as_string` in the response.\nIf no `format` is specified, the first date format specified in the field mapping is used.", + "type": "string" + }, + "interval": { + "$ref": "#/components/schemas/_types:Duration" + }, + "min_doc_count": { + "description": "Only returns buckets that have `min_doc_count` number of documents.\nBy default, all buckets between the first bucket that matches documents and the last one are returned.", + "type": "number" + }, + "missing": { + "$ref": "#/components/schemas/_types:DateTime" + }, + "offset": { + "$ref": "#/components/schemas/_types:Duration" + }, + "order": { + "$ref": "#/components/schemas/_types.aggregations:AggregateOrder" + }, + "params": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "time_zone": { + "$ref": "#/components/schemas/_types:TimeZone" + }, + "keyed": { + "description": "Set to `true` to associate a unique string key with each bucket and return the ranges as a hash rather than an array.", + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:CalendarInterval": { + "type": "string", + "enum": [ + "second", + "1s", + "minute", + "1m", + "hour", + "1h", + "day", + "1d", + "week", + "1w", + "month", + "1M", + "quarter", + "1q", + "year", + "1Y" + ] + }, + "_types.aggregations:ExtendedBoundsFieldDateMath": { + "type": "object", + "properties": { + "max": { + "$ref": "#/components/schemas/_types.aggregations:FieldDateMath" + }, + "min": { + "$ref": "#/components/schemas/_types.aggregations:FieldDateMath" + } + } + }, + "_types.aggregations:FieldDateMath": { + "description": "A date range limit, represented either as a DateMath expression or a number expressed\naccording to the target field's precision.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types:DateMath" + }, + { + "type": "number" + } + ] + }, + "_types.aggregations:AggregateOrder": { + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types:SortOrder" + }, + "minProperties": 1, + "maxProperties": 1 + }, + { + "type": "array", + "items": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types:SortOrder" + }, + "minProperties": 1, + "maxProperties": 1 + } + } + ] + }, + "_types.aggregations:DateRangeAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "format": { + "description": "The date format used to format `from` and `to` in the response.", + "type": "string" + }, + "missing": { + "$ref": "#/components/schemas/_types.aggregations:Missing" + }, + "ranges": { + "description": "Array of date ranges.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.aggregations:DateRangeExpression" + } + }, + "time_zone": { + "$ref": "#/components/schemas/_types:TimeZone" + }, + "keyed": { + "description": "Set to `true` to associate a unique string key with each bucket and returns the ranges as a hash rather than an array.", + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:DateRangeExpression": { + "type": "object", + "properties": { + "from": { + "$ref": "#/components/schemas/_types.aggregations:FieldDateMath" + }, + "key": { + "description": "Custom key to return the range with.", + "type": "string" + }, + "to": { + "$ref": "#/components/schemas/_types.aggregations:FieldDateMath" + } + } + }, + "_types.aggregations:DerivativeAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:DiversifiedSamplerAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "execution_hint": { + "$ref": "#/components/schemas/_types.aggregations:SamplerAggregationExecutionHint" + }, + "max_docs_per_value": { + "description": "Limits how many documents are permitted per choice of de-duplicating value.", + "type": "number" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "shard_size": { + "description": "Limits how many top-scoring documents are collected in the sample processed on each shard.", + "type": "number" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + } + } + } + ] + }, + "_types.aggregations:SamplerAggregationExecutionHint": { + "type": "string", + "enum": [ + "map", + "global_ordinals", + "bytes_hash" + ] + }, + "_types.aggregations:ExtendedStatsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object", + "properties": { + "sigma": { + "description": "The number of standard deviations above/below the mean to display.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:ExtendedStatsBucketAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "sigma": { + "description": "The number of standard deviations above/below the mean to display.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:FrequentItemSetsAggregation": { + "type": "object", + "properties": { + "fields": { + "description": "Fields to analyze.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.aggregations:FrequentItemSetsField" + } + }, + "minimum_set_size": { + "description": "The minimum size of one item set.", + "type": "number" + }, + "minimum_support": { + "description": "The minimum support of one item set.", + "type": "number" + }, + "size": { + "description": "The number of top item sets to return.", + "type": "number" + }, + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "required": [ + "fields" + ] + }, + "_types.aggregations:FrequentItemSetsField": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "exclude": { + "$ref": "#/components/schemas/_types.aggregations:TermsExclude" + }, + "include": { + "$ref": "#/components/schemas/_types.aggregations:TermsInclude" + } + }, + "required": [ + "field" + ] + }, + "_types.aggregations:TermsExclude": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "_types.aggregations:TermsInclude": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "$ref": "#/components/schemas/_types.aggregations:TermsPartition" + } + ] + }, + "_types.aggregations:TermsPartition": { + "type": "object", + "properties": { + "num_partitions": { + "description": "The number of partitions.", + "type": "number" + }, + "partition": { + "description": "The partition number for this request.", + "type": "number" + } + }, + "required": [ + "num_partitions", + "partition" + ] + }, + "_types.aggregations:FiltersAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "filters": { + "$ref": "#/components/schemas/_types.aggregations:BucketsQueryContainer" + }, + "other_bucket": { + "description": "Set to `true` to add a bucket to the response which will contain all documents that do not match any of the given filters.", + "type": "boolean" + }, + "other_bucket_key": { + "description": "The key with which the other bucket is returned.", + "type": "string" + }, + "keyed": { + "description": "By default, the named filters aggregation returns the buckets as an object.\nSet to `false` to return the buckets as an array of objects.", + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:BucketsQueryContainer": { + "description": "Aggregation buckets. By default they are returned as an array, but if the aggregation has keys configured for\nthe different buckets, the result is a dictionary.", + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + } + ] + }, + "_types.aggregations:GeoBoundsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "wrap_longitude": { + "description": "Specifies whether the bounding box should be allowed to overlap the international date line.", + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:GeoCentroidAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "count": { + "type": "number" + }, + "location": { + "$ref": "#/components/schemas/_types:GeoLocation" + } + } + } + ] + }, + "_types.aggregations:GeoDistanceAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "distance_type": { + "$ref": "#/components/schemas/_types:GeoDistanceType" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "origin": { + "$ref": "#/components/schemas/_types:GeoLocation" + }, + "ranges": { + "description": "An array of ranges used to bucket documents.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.aggregations:AggregationRange" + } + }, + "unit": { + "$ref": "#/components/schemas/_types:DistanceUnit" + } + } + } + ] + }, + "_types.aggregations:AggregationRange": { + "type": "object", + "properties": { + "from": { + "description": "Start of the range (inclusive).", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "key": { + "description": "Custom key to return the range with.", + "type": "string" + }, + "to": { + "description": "End of the range (exclusive).", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "nullable": true, + "type": "string" + } + ] + } + } + }, + "_types.aggregations:GeoHashGridAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "bounds": { + "$ref": "#/components/schemas/_types:GeoBounds" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "precision": { + "$ref": "#/components/schemas/_types:GeoHashPrecision" + }, + "shard_size": { + "description": "Allows for more accurate counting of the top cells returned in the final result the aggregation.\nDefaults to returning `max(10,(size x number-of-shards))` buckets from each shard.", + "type": "number" + }, + "size": { + "description": "The maximum number of geohash buckets to return.", + "type": "number" + } + } + } + ] + }, + "_types:GeoHashPrecision": { + "description": "A precision that can be expressed as a geohash length between 1 and 12, or a distance measure like \"1km\", \"10m\".", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "_types.aggregations:GeoLineAggregation": { + "type": "object", + "properties": { + "point": { + "$ref": "#/components/schemas/_types.aggregations:GeoLinePoint" + }, + "sort": { + "$ref": "#/components/schemas/_types.aggregations:GeoLineSort" + }, + "include_sort": { + "description": "When `true`, returns an additional array of the sort values in the feature properties.", + "type": "boolean" + }, + "sort_order": { + "$ref": "#/components/schemas/_types:SortOrder" + }, + "size": { + "description": "The maximum length of the line represented in the aggregation.\nValid sizes are between 1 and 10000.", + "type": "number" + } + }, + "required": [ + "point", + "sort" + ] + }, + "_types.aggregations:GeoLinePoint": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "field" + ] + }, + "_types.aggregations:GeoLineSort": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "field" + ] + }, + "_types.aggregations:GeoTileGridAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "precision": { + "$ref": "#/components/schemas/_types:GeoTilePrecision" + }, + "shard_size": { + "description": "Allows for more accurate counting of the top cells returned in the final result the aggregation.\nDefaults to returning `max(10,(size x number-of-shards))` buckets from each shard.", + "type": "number" + }, + "size": { + "description": "The maximum number of buckets to return.", + "type": "number" + }, + "bounds": { + "$ref": "#/components/schemas/_types:GeoBounds" + } + } + } + ] + }, + "_types:GeoTilePrecision": { + "type": "number" + }, + "_types.aggregations:GeohexGridAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "precision": { + "description": "Integer zoom of the key used to defined cells or buckets\nin the results. Value should be between 0-15.", + "type": "number" + }, + "bounds": { + "$ref": "#/components/schemas/_types:GeoBounds" + }, + "size": { + "description": "Maximum number of buckets to return.", + "type": "number" + }, + "shard_size": { + "description": "Number of buckets returned from each shard.", + "type": "number" + } + }, + "required": [ + "field" + ] + } + ] + }, + "_types.aggregations:GlobalAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:HistogramAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "extended_bounds": { + "$ref": "#/components/schemas/_types.aggregations:ExtendedBoundsdouble" + }, + "hard_bounds": { + "$ref": "#/components/schemas/_types.aggregations:ExtendedBoundsdouble" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "interval": { + "description": "The interval for the buckets.\nMust be a positive decimal.", + "type": "number" + }, + "min_doc_count": { + "description": "Only returns buckets that have `min_doc_count` number of documents.\nBy default, the response will fill gaps in the histogram with empty buckets.", + "type": "number" + }, + "missing": { + "description": "The value to apply to documents that do not have a value.\nBy default, documents without a value are ignored.", + "type": "number" + }, + "offset": { + "description": "By default, the bucket keys start with 0 and then continue in even spaced steps of `interval`.\nThe bucket boundaries can be shifted by using the `offset` option.", + "type": "number" + }, + "order": { + "$ref": "#/components/schemas/_types.aggregations:AggregateOrder" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "format": { + "type": "string" + }, + "keyed": { + "description": "If `true`, returns buckets as a hash instead of an array, keyed by the bucket keys.", + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:ExtendedBoundsdouble": { + "type": "object", + "properties": { + "max": { + "description": "Maximum value for the bound.", + "type": "number" + }, + "min": { + "description": "Minimum value for the bound.", + "type": "number" + } + } + }, + "_types.aggregations:IpRangeAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "ranges": { + "description": "Array of IP ranges.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.aggregations:IpRangeAggregationRange" + } + } + } + } + ] + }, + "_types.aggregations:IpRangeAggregationRange": { + "type": "object", + "properties": { + "from": { + "description": "Start of the range.", + "oneOf": [ + { + "type": "string" + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "mask": { + "description": "IP range defined as a CIDR mask.", + "type": "string" + }, + "to": { + "description": "End of the range.", + "oneOf": [ + { + "type": "string" + }, + { + "nullable": true, + "type": "string" + } + ] + } + } + }, + "_types.aggregations:IpPrefixAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "prefix_length": { + "description": "Length of the network prefix. For IPv4 addresses the accepted range is [0, 32].\nFor IPv6 addresses the accepted range is [0, 128].", + "type": "number" + }, + "is_ipv6": { + "description": "Defines whether the prefix applies to IPv6 addresses.", + "type": "boolean" + }, + "append_prefix_length": { + "description": "Defines whether the prefix length is appended to IP address keys in the response.", + "type": "boolean" + }, + "keyed": { + "description": "Defines whether buckets are returned as a hash rather than an array in the response.", + "type": "boolean" + }, + "min_doc_count": { + "description": "Minimum number of documents in a bucket for it to be included in the response.", + "type": "number" + } + }, + "required": [ + "field", + "prefix_length" + ] + } + ] + }, + "_types.aggregations:InferenceAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "model_id": { + "$ref": "#/components/schemas/_types:Name" + }, + "inference_config": { + "$ref": "#/components/schemas/_types.aggregations:InferenceConfigContainer" + } + }, + "required": [ + "model_id" + ] + } + ] + }, + "_types.aggregations:InferenceConfigContainer": { + "type": "object", + "properties": { + "regression": { + "$ref": "#/components/schemas/ml._types:RegressionInferenceOptions" + }, + "classification": { + "$ref": "#/components/schemas/ml._types:ClassificationInferenceOptions" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "ml._types:RegressionInferenceOptions": { + "type": "object", + "properties": { + "results_field": { + "$ref": "#/components/schemas/_types:Field" + }, + "num_top_feature_importance_values": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/machine-learning/current/ml-feature-importance.html" + }, + "description": "Specifies the maximum number of feature importance values per document.", + "type": "number" + } + } + }, + "ml._types:ClassificationInferenceOptions": { + "type": "object", + "properties": { + "num_top_classes": { + "description": "Specifies the number of top class predictions to return. Defaults to 0.", + "type": "number" + }, + "num_top_feature_importance_values": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/machine-learning/current/ml-feature-importance.html" + }, + "description": "Specifies the maximum number of feature importance values per document.", + "type": "number" + }, + "prediction_field_type": { + "description": "Specifies the type of the predicted field to write. Acceptable values are: string, number, boolean. When boolean is provided 1.0 is transformed to true and 0.0 to false.", + "type": "string" + }, + "results_field": { + "description": "The field that is added to incoming documents to contain the inference prediction. Defaults to predicted_value.", + "type": "string" + }, + "top_classes_results_field": { + "description": "Specifies the field to which the top classes are written. Defaults to top_classes.", + "type": "string" + } + } + }, + "_types.aggregations:MatrixStatsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MatrixAggregation" + }, + { + "type": "object", + "properties": { + "mode": { + "$ref": "#/components/schemas/_types:SortMode" + } + } + } + ] + }, + "_types.aggregations:MatrixAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:Aggregation" + }, + { + "type": "object", + "properties": { + "fields": { + "$ref": "#/components/schemas/_types:Fields" + }, + "missing": { + "description": "The value to apply to documents that do not have a value.\nBy default, documents without a value are ignored.", + "type": "object", + "additionalProperties": { + "type": "number" + } + } + } + } + ] + }, + "_types.aggregations:MaxAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:MaxBucketAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:MedianAbsoluteDeviationAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object", + "properties": { + "compression": { + "description": "Limits the maximum number of nodes used by the underlying TDigest algorithm to `20 * compression`, enabling control of memory usage and approximation error.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:MinAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:MinBucketAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:MissingAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "missing": { + "$ref": "#/components/schemas/_types.aggregations:Missing" + } + } + } + ] + }, + "_types.aggregations:MovingAverageAggregation": { + "discriminator": { + "propertyName": "model" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:LinearMovingAverageAggregation" + }, + { + "$ref": "#/components/schemas/_types.aggregations:SimpleMovingAverageAggregation" + }, + { + "$ref": "#/components/schemas/_types.aggregations:EwmaMovingAverageAggregation" + }, + { + "$ref": "#/components/schemas/_types.aggregations:HoltMovingAverageAggregation" + }, + { + "$ref": "#/components/schemas/_types.aggregations:HoltWintersMovingAverageAggregation" + } + ] + }, + "_types.aggregations:LinearMovingAverageAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MovingAverageAggregationBase" + }, + { + "type": "object", + "properties": { + "model": { + "type": "string", + "enum": [ + "linear" + ] + }, + "settings": { + "$ref": "#/components/schemas/_types:EmptyObject" + } + }, + "required": [ + "model", + "settings" + ] + } + ] + }, + "_types.aggregations:MovingAverageAggregationBase": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "minimize": { + "type": "boolean" + }, + "predict": { + "type": "number" + }, + "window": { + "type": "number" + } + } + } + ] + }, + "_types:EmptyObject": { + "type": "object" + }, + "_types.aggregations:SimpleMovingAverageAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MovingAverageAggregationBase" + }, + { + "type": "object", + "properties": { + "model": { + "type": "string", + "enum": [ + "simple" + ] + }, + "settings": { + "$ref": "#/components/schemas/_types:EmptyObject" + } + }, + "required": [ + "model", + "settings" + ] + } + ] + }, + "_types.aggregations:EwmaMovingAverageAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MovingAverageAggregationBase" + }, + { + "type": "object", + "properties": { + "model": { + "type": "string", + "enum": [ + "ewma" + ] + }, + "settings": { + "$ref": "#/components/schemas/_types.aggregations:EwmaModelSettings" + } + }, + "required": [ + "model", + "settings" + ] + } + ] + }, + "_types.aggregations:EwmaModelSettings": { + "type": "object", + "properties": { + "alpha": { + "type": "number" + } + } + }, + "_types.aggregations:HoltMovingAverageAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MovingAverageAggregationBase" + }, + { + "type": "object", + "properties": { + "model": { + "type": "string", + "enum": [ + "holt" + ] + }, + "settings": { + "$ref": "#/components/schemas/_types.aggregations:HoltLinearModelSettings" + } + }, + "required": [ + "model", + "settings" + ] + } + ] + }, + "_types.aggregations:HoltLinearModelSettings": { + "type": "object", + "properties": { + "alpha": { + "type": "number" + }, + "beta": { + "type": "number" + } + } + }, + "_types.aggregations:HoltWintersMovingAverageAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MovingAverageAggregationBase" + }, + { + "type": "object", + "properties": { + "model": { + "type": "string", + "enum": [ + "holt_winters" + ] + }, + "settings": { + "$ref": "#/components/schemas/_types.aggregations:HoltWintersModelSettings" + } + }, + "required": [ + "model", + "settings" + ] + } + ] + }, + "_types.aggregations:HoltWintersModelSettings": { + "type": "object", + "properties": { + "alpha": { + "type": "number" + }, + "beta": { + "type": "number" + }, + "gamma": { + "type": "number" + }, + "pad": { + "type": "boolean" + }, + "period": { + "type": "number" + }, + "type": { + "$ref": "#/components/schemas/_types.aggregations:HoltWintersType" + } + } + }, + "_types.aggregations:HoltWintersType": { + "type": "string", + "enum": [ + "add", + "mult" + ] + }, + "_types.aggregations:MovingPercentilesAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "window": { + "description": "The size of window to \"slide\" across the histogram.", + "type": "number" + }, + "shift": { + "description": "By default, the window consists of the last n values excluding the current bucket.\nIncreasing `shift` by 1, moves the starting window position by 1 to the right.", + "type": "number" + }, + "keyed": { + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:MovingFunctionAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "script": { + "description": "The script that should be executed on each window of data.", + "type": "string" + }, + "shift": { + "description": "By default, the window consists of the last n values excluding the current bucket.\nIncreasing `shift` by 1, moves the starting window position by 1 to the right.", + "type": "number" + }, + "window": { + "description": "The size of window to \"slide\" across the histogram.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:MultiTermsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "collect_mode": { + "$ref": "#/components/schemas/_types.aggregations:TermsAggregationCollectMode" + }, + "order": { + "$ref": "#/components/schemas/_types.aggregations:AggregateOrder" + }, + "min_doc_count": { + "description": "The minimum number of documents in a bucket for it to be returned.", + "type": "number" + }, + "shard_min_doc_count": { + "description": "The minimum number of documents in a bucket on each shard for it to be returned.", + "type": "number" + }, + "shard_size": { + "description": "The number of candidate terms produced by each shard.\nBy default, `shard_size` will be automatically estimated based on the number of shards and the `size` parameter.", + "type": "number" + }, + "show_term_doc_count_error": { + "description": "Calculates the doc count error on per term basis.", + "type": "boolean" + }, + "size": { + "description": "The number of term buckets should be returned out of the overall terms list.", + "type": "number" + }, + "terms": { + "description": "The field from which to generate sets of terms.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.aggregations:MultiTermLookup" + } + } + }, + "required": [ + "terms" + ] + } + ] + }, + "_types.aggregations:TermsAggregationCollectMode": { + "type": "string", + "enum": [ + "depth_first", + "breadth_first" + ] + }, + "_types.aggregations:MultiTermLookup": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "missing": { + "$ref": "#/components/schemas/_types.aggregations:Missing" + } + }, + "required": [ + "field" + ] + }, + "_types.aggregations:NestedAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "path": { + "$ref": "#/components/schemas/_types:Field" + } + } + } + ] + }, + "_types.aggregations:NormalizeAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "method": { + "$ref": "#/components/schemas/_types.aggregations:NormalizeMethod" + } + } + } + ] + }, + "_types.aggregations:NormalizeMethod": { + "type": "string", + "enum": [ + "rescale_0_1", + "rescale_0_100", + "percent_of_sum", + "mean", + "z-score", + "softmax" + ] + }, + "_types.aggregations:ParentAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/_types:RelationName" + } + } + } + ] + }, + "_types.aggregations:PercentileRanksAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object", + "properties": { + "keyed": { + "description": "By default, the aggregation associates a unique string key with each bucket and returns the ranges as a hash rather than an array.\nSet to `false` to disable this behavior.", + "type": "boolean" + }, + "values": { + "description": "An array of values for which to calculate the percentile ranks.", + "oneOf": [ + { + "type": "array", + "items": { + "type": "number" + } + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "hdr": { + "$ref": "#/components/schemas/_types.aggregations:HdrMethod" + }, + "tdigest": { + "$ref": "#/components/schemas/_types.aggregations:TDigest" + } + } + } + ] + }, + "_types.aggregations:HdrMethod": { + "type": "object", + "properties": { + "number_of_significant_value_digits": { + "description": "Specifies the resolution of values for the histogram in number of significant digits.", + "type": "number" + } + } + }, + "_types.aggregations:TDigest": { + "type": "object", + "properties": { + "compression": { + "description": "Limits the maximum number of nodes used by the underlying TDigest algorithm to `20 * compression`, enabling control of memory usage and approximation error.", + "type": "number" + } + } + }, + "_types.aggregations:PercentilesAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object", + "properties": { + "keyed": { + "description": "By default, the aggregation associates a unique string key with each bucket and returns the ranges as a hash rather than an array.\nSet to `false` to disable this behavior.", + "type": "boolean" + }, + "percents": { + "description": "The percentiles to calculate.", + "type": "array", + "items": { + "type": "number" + } + }, + "hdr": { + "$ref": "#/components/schemas/_types.aggregations:HdrMethod" + }, + "tdigest": { + "$ref": "#/components/schemas/_types.aggregations:TDigest" + } + } + } + ] + }, + "_types.aggregations:PercentilesBucketAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "percents": { + "description": "The list of percentiles to calculate.", + "type": "array", + "items": { + "type": "number" + } + } + } + } + ] + }, + "_types.aggregations:RangeAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "missing": { + "description": "The value to apply to documents that do not have a value.\nBy default, documents without a value are ignored.", + "type": "number" + }, + "ranges": { + "description": "An array of ranges used to bucket documents.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.aggregations:AggregationRange" + } + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "keyed": { + "description": "Set to `true` to associate a unique string key with each bucket and return the ranges as a hash rather than an array.", + "type": "boolean" + }, + "format": { + "type": "string" + } + } + } + ] + }, + "_types.aggregations:RareTermsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "exclude": { + "$ref": "#/components/schemas/_types.aggregations:TermsExclude" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "include": { + "$ref": "#/components/schemas/_types.aggregations:TermsInclude" + }, + "max_doc_count": { + "description": "The maximum number of documents a term should appear in.", + "type": "number" + }, + "missing": { + "$ref": "#/components/schemas/_types.aggregations:Missing" + }, + "precision": { + "description": "The precision of the internal CuckooFilters.\nSmaller precision leads to better approximation, but higher memory usage.", + "type": "number" + }, + "value_type": { + "type": "string" + } + } + } + ] + }, + "_types.aggregations:RateAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object", + "properties": { + "unit": { + "$ref": "#/components/schemas/_types.aggregations:CalendarInterval" + }, + "mode": { + "$ref": "#/components/schemas/_types.aggregations:RateMode" + } + } + } + ] + }, + "_types.aggregations:RateMode": { + "type": "string", + "enum": [ + "sum", + "value_count" + ] + }, + "_types.aggregations:ReverseNestedAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "path": { + "$ref": "#/components/schemas/_types:Field" + } + } + } + ] + }, + "_types.aggregations:SamplerAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "shard_size": { + "description": "Limits how many top-scoring documents are collected in the sample processed on each shard.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:ScriptedMetricAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "combine_script": { + "$ref": "#/components/schemas/_types:Script" + }, + "init_script": { + "$ref": "#/components/schemas/_types:Script" + }, + "map_script": { + "$ref": "#/components/schemas/_types:Script" + }, + "params": { + "description": "A global object with script parameters for `init`, `map` and `combine` scripts.\nIt is shared between the scripts.", + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "reduce_script": { + "$ref": "#/components/schemas/_types:Script" + } + } + } + ] + }, + "_types.aggregations:SerialDifferencingAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "lag": { + "description": "The historical bucket to subtract from the current value.\nMust be a positive, non-zero integer.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:SignificantTermsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "background_filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "chi_square": { + "$ref": "#/components/schemas/_types.aggregations:ChiSquareHeuristic" + }, + "exclude": { + "$ref": "#/components/schemas/_types.aggregations:TermsExclude" + }, + "execution_hint": { + "$ref": "#/components/schemas/_types.aggregations:TermsAggregationExecutionHint" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "gnd": { + "$ref": "#/components/schemas/_types.aggregations:GoogleNormalizedDistanceHeuristic" + }, + "include": { + "$ref": "#/components/schemas/_types.aggregations:TermsInclude" + }, + "jlh": { + "$ref": "#/components/schemas/_types:EmptyObject" + }, + "min_doc_count": { + "description": "Only return terms that are found in more than `min_doc_count` hits.", + "type": "number" + }, + "mutual_information": { + "$ref": "#/components/schemas/_types.aggregations:MutualInformationHeuristic" + }, + "percentage": { + "$ref": "#/components/schemas/_types.aggregations:PercentageScoreHeuristic" + }, + "script_heuristic": { + "$ref": "#/components/schemas/_types.aggregations:ScriptedHeuristic" + }, + "shard_min_doc_count": { + "description": "Regulates the certainty a shard has if the term should actually be added to the candidate list or not with respect to the `min_doc_count`.\nTerms will only be considered if their local shard frequency within the set is higher than the `shard_min_doc_count`.", + "type": "number" + }, + "shard_size": { + "description": "Can be used to control the volumes of candidate terms produced by each shard.\nBy default, `shard_size` will be automatically estimated based on the number of shards and the `size` parameter.", + "type": "number" + }, + "size": { + "description": "The number of buckets returned out of the overall terms list.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:ChiSquareHeuristic": { + "type": "object", + "properties": { + "background_is_superset": { + "description": "Set to `false` if you defined a custom background filter that represents a different set of documents that you want to compare to.", + "type": "boolean" + }, + "include_negatives": { + "description": "Set to `false` to filter out the terms that appear less often in the subset than in documents outside the subset.", + "type": "boolean" + } + }, + "required": [ + "background_is_superset", + "include_negatives" + ] + }, + "_types.aggregations:TermsAggregationExecutionHint": { + "type": "string", + "enum": [ + "map", + "global_ordinals", + "global_ordinals_hash", + "global_ordinals_low_cardinality" + ] + }, + "_types.aggregations:GoogleNormalizedDistanceHeuristic": { + "type": "object", + "properties": { + "background_is_superset": { + "description": "Set to `false` if you defined a custom background filter that represents a different set of documents that you want to compare to.", + "type": "boolean" + } + } + }, + "_types.aggregations:MutualInformationHeuristic": { + "type": "object", + "properties": { + "background_is_superset": { + "description": "Set to `false` if you defined a custom background filter that represents a different set of documents that you want to compare to.", + "type": "boolean" + }, + "include_negatives": { + "description": "Set to `false` to filter out the terms that appear less often in the subset than in documents outside the subset.", + "type": "boolean" + } + } + }, + "_types.aggregations:PercentageScoreHeuristic": { + "type": "object" + }, + "_types.aggregations:ScriptedHeuristic": { + "type": "object", + "properties": { + "script": { + "$ref": "#/components/schemas/_types:Script" + } + }, + "required": [ + "script" + ] + }, + "_types.aggregations:SignificantTextAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "background_filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "chi_square": { + "$ref": "#/components/schemas/_types.aggregations:ChiSquareHeuristic" + }, + "exclude": { + "$ref": "#/components/schemas/_types.aggregations:TermsExclude" + }, + "execution_hint": { + "$ref": "#/components/schemas/_types.aggregations:TermsAggregationExecutionHint" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "filter_duplicate_text": { + "description": "Whether to out duplicate text to deal with noisy data.", + "type": "boolean" + }, + "gnd": { + "$ref": "#/components/schemas/_types.aggregations:GoogleNormalizedDistanceHeuristic" + }, + "include": { + "$ref": "#/components/schemas/_types.aggregations:TermsInclude" + }, + "jlh": { + "$ref": "#/components/schemas/_types:EmptyObject" + }, + "min_doc_count": { + "description": "Only return values that are found in more than `min_doc_count` hits.", + "type": "number" + }, + "mutual_information": { + "$ref": "#/components/schemas/_types.aggregations:MutualInformationHeuristic" + }, + "percentage": { + "$ref": "#/components/schemas/_types.aggregations:PercentageScoreHeuristic" + }, + "script_heuristic": { + "$ref": "#/components/schemas/_types.aggregations:ScriptedHeuristic" + }, + "shard_min_doc_count": { + "description": "Regulates the certainty a shard has if the values should actually be added to the candidate list or not with respect to the min_doc_count.\nValues will only be considered if their local shard frequency within the set is higher than the `shard_min_doc_count`.", + "type": "number" + }, + "shard_size": { + "description": "The number of candidate terms produced by each shard.\nBy default, `shard_size` will be automatically estimated based on the number of shards and the `size` parameter.", + "type": "number" + }, + "size": { + "description": "The number of buckets returned out of the overall terms list.", + "type": "number" + }, + "source_fields": { + "$ref": "#/components/schemas/_types:Fields" + } + } + } + ] + }, + "_types.aggregations:StatsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:StatsBucketAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:StringStatsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "show_distribution": { + "description": "Shows the probability distribution for all characters.", + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:SumAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:SumBucketAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:TermsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "collect_mode": { + "$ref": "#/components/schemas/_types.aggregations:TermsAggregationCollectMode" + }, + "exclude": { + "$ref": "#/components/schemas/_types.aggregations:TermsExclude" + }, + "execution_hint": { + "$ref": "#/components/schemas/_types.aggregations:TermsAggregationExecutionHint" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "include": { + "$ref": "#/components/schemas/_types.aggregations:TermsInclude" + }, + "min_doc_count": { + "description": "Only return values that are found in more than `min_doc_count` hits.", + "type": "number" + }, + "missing": { + "$ref": "#/components/schemas/_types.aggregations:Missing" + }, + "missing_order": { + "$ref": "#/components/schemas/_types.aggregations:MissingOrder" + }, + "missing_bucket": { + "type": "boolean" + }, + "value_type": { + "description": "Coerced unmapped fields into the specified type.", + "type": "string" + }, + "order": { + "$ref": "#/components/schemas/_types.aggregations:AggregateOrder" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "shard_size": { + "description": "The number of candidate terms produced by each shard.\nBy default, `shard_size` will be automatically estimated based on the number of shards and the `size` parameter.", + "type": "number" + }, + "show_term_doc_count_error": { + "description": "Set to `true` to return the `doc_count_error_upper_bound`, which is an upper bound to the error on the `doc_count` returned by each shard.", + "type": "boolean" + }, + "size": { + "description": "The number of buckets returned out of the overall terms list.", + "type": "number" + }, + "format": { + "type": "string" + } + } + } + ] + }, + "_types.aggregations:TopHitsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "docvalue_fields": { + "description": "Fields for which to return doc values.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:FieldAndFormat" + } + }, + "explain": { + "description": "If `true`, returns detailed information about score computation as part of a hit.", + "type": "boolean" + }, + "fields": { + "description": "Array of wildcard (*) patterns. The request returns values for field names\nmatching these patterns in the hits.fields property of the response.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:FieldAndFormat" + } + }, + "from": { + "description": "Starting document offset.", + "type": "number" + }, + "highlight": { + "$ref": "#/components/schemas/_global.search._types:Highlight" + }, + "script_fields": { + "description": "Returns the result of one or more script evaluations for each hit.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types:ScriptField" + } + }, + "size": { + "description": "The maximum number of top matching hits to return per bucket.", + "type": "number" + }, + "sort": { + "$ref": "#/components/schemas/_types:Sort" + }, + "_source": { + "$ref": "#/components/schemas/_global.search._types:SourceConfig" + }, + "stored_fields": { + "$ref": "#/components/schemas/_types:Fields" + }, + "track_scores": { + "description": "If `true`, calculates and returns document scores, even if the scores are not used for sorting.", + "type": "boolean" + }, + "version": { + "description": "If `true`, returns document version as part of a hit.", + "type": "boolean" + }, + "seq_no_primary_term": { + "description": "If `true`, returns sequence number and primary term of the last modification of each hit.", + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:TTestAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:Aggregation" + }, + { + "type": "object", + "properties": { + "a": { + "$ref": "#/components/schemas/_types.aggregations:TestPopulation" + }, + "b": { + "$ref": "#/components/schemas/_types.aggregations:TestPopulation" + }, + "type": { + "$ref": "#/components/schemas/_types.aggregations:TTestType" + } + } + } + ] + }, + "_types.aggregations:TestPopulation": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "required": [ + "field" + ] + }, + "_types.aggregations:TTestType": { + "type": "string", + "enum": [ + "paired", + "homoscedastic", + "heteroscedastic" + ] + }, + "_types.aggregations:TopMetricsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "metrics": { + "description": "The fields of the top document to return.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:TopMetricsValue" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.aggregations:TopMetricsValue" + } + } + ] + }, + "size": { + "description": "The number of top documents from which to return metrics.", + "type": "number" + }, + "sort": { + "$ref": "#/components/schemas/_types:Sort" + } + } + } + ] + }, + "_types.aggregations:TopMetricsValue": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "field" + ] + }, + "_types.aggregations:ValueCountAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormattableMetricAggregation" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:FormattableMetricAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "format": { + "type": "string" + } + } + } + ] + }, + "_types.aggregations:WeightedAverageAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:Aggregation" + }, + { + "type": "object", + "properties": { + "format": { + "description": "A numeric response formatter.", + "type": "string" + }, + "value": { + "$ref": "#/components/schemas/_types.aggregations:WeightedAverageValue" + }, + "value_type": { + "$ref": "#/components/schemas/_types.aggregations:ValueType" + }, + "weight": { + "$ref": "#/components/schemas/_types.aggregations:WeightedAverageValue" + } + } + } + ] + }, + "_types.aggregations:WeightedAverageValue": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "missing": { + "description": "A value or weight to use if the field is missing.", + "type": "number" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + } + } + }, + "_types.aggregations:VariableWidthHistogramAggregation": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "buckets": { + "description": "The target number of buckets.", + "type": "number" + }, + "shard_size": { + "description": "The number of buckets that the coordinating node will request from each shard.\nDefaults to `buckets * 50`.", + "type": "number" + }, + "initial_buffer": { + "description": "Specifies the number of individual documents that will be stored in memory on a shard before the initial bucketing algorithm is run.\nDefaults to `min(10 * shard_size, 50000)`.", + "type": "number" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + } + } + }, + "ml._types:ChunkingConfig": { + "type": "object", + "properties": { + "mode": { + "$ref": "#/components/schemas/ml._types:ChunkingMode" + }, + "time_span": { + "$ref": "#/components/schemas/_types:Duration" + } + }, + "required": [ + "mode" + ] + }, + "ml._types:ChunkingMode": { + "type": "string", + "enum": [ + "auto", + "manual", + "off" + ] + }, + "ml._types:DelayedDataCheckConfig": { + "type": "object", + "properties": { + "check_window": { + "$ref": "#/components/schemas/_types:Duration" + }, + "enabled": { + "description": "Specifies whether the datafeed periodically checks for delayed data.", + "type": "boolean" + } + }, + "required": [ + "enabled" + ] + }, + "_types:IndicesOptions": { + "type": "object", + "properties": { + "allow_no_indices": { + "description": "If false, the request returns an error if any wildcard expression, index alias, or `_all` value targets only\nmissing or closed indices. This behavior applies even if the request targets other open indices. For example,\na request targeting `foo*,bar*` returns an error if an index starts with `foo` but no index starts with `bar`.", + "type": "boolean" + }, + "expand_wildcards": { + "$ref": "#/components/schemas/_types:ExpandWildcards" + }, + "ignore_unavailable": { + "description": "If true, missing or closed indices are not included in the response.", + "type": "boolean" + }, + "ignore_throttled": { + "description": "If true, concrete, expanded or aliased indices are ignored when frozen.", + "type": "boolean" + } + } + }, + "_types:ExpandWildcards": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:ExpandWildcard" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:ExpandWildcard" + } + } + ] + }, + "_types:ExpandWildcard": { + "type": "string", + "enum": [ + "all", + "open", + "closed", + "hidden", + "none" + ] + }, + "_types.mapping:RuntimeFields": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.mapping:RuntimeField" + } + }, + "_types.mapping:RuntimeField": { + "type": "object", + "properties": { + "fetch_fields": { + "description": "For type `lookup`", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.mapping:RuntimeFieldFetchFields" + } + }, + "format": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html" + }, + "description": "A custom format for `date` type runtime fields.", + "type": "string" + }, + "input_field": { + "$ref": "#/components/schemas/_types:Field" + }, + "target_field": { + "$ref": "#/components/schemas/_types:Field" + }, + "target_index": { + "$ref": "#/components/schemas/_types:IndexName" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "type": { + "$ref": "#/components/schemas/_types.mapping:RuntimeFieldType" + } + }, + "required": [ + "type" + ] + }, + "_types.mapping:RuntimeFieldFetchFields": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "format": { + "type": "string" + } + }, + "required": [ + "field" + ] + }, + "_types.mapping:RuntimeFieldType": { + "type": "string", + "enum": [ + "boolean", + "composite", + "date", + "double", + "geo_point", + "ip", + "keyword", + "long", + "lookup" + ] + }, + "ml._types:ModelPlotConfig": { + "type": "object", + "properties": { + "annotations_enabled": { + "description": "If true, enables calculation and storage of the model change annotations for each entity that is being analyzed.", + "type": "boolean" + }, + "enabled": { + "description": "If true, enables calculation and storage of the model bounds for each entity that is being analyzed.", + "type": "boolean" + }, + "terms": { + "$ref": "#/components/schemas/_types:Field" + } + } + } + } + } +} \ No newline at end of file diff --git a/x-pack/packages/ml/json_schemas/src/put___ml_data_frame_analytics__id__schema.json b/x-pack/packages/ml/json_schemas/src/put___ml_data_frame_analytics__id__schema.json new file mode 100644 index 0000000000000..7c87a07ce0bae --- /dev/null +++ b/x-pack/packages/ml/json_schemas/src/put___ml_data_frame_analytics__id__schema.json @@ -0,0 +1,5016 @@ +{ + "type": "object", + "properties": { + "allow_lazy_start": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/ml-settings.html" + }, + "description": "Specifies whether this job can start when there is insufficient machine\nlearning node capacity for it to be immediately assigned to a node. If\nset to `false` and a machine learning node with capacity to run the job\ncannot be immediately found, the API returns an error. If set to `true`,\nthe API does not return an error; the job waits in the `starting` state\nuntil sufficient machine learning node capacity is available. This\nbehavior is also affected by the cluster-wide\n`xpack.ml.max_lazy_ml_nodes` setting.", + "type": "boolean" + }, + "analysis": { + "$ref": "#/components/schemas/ml._types:DataframeAnalysisContainer" + }, + "analyzed_fields": { + "$ref": "#/components/schemas/ml._types:DataframeAnalysisAnalyzedFields" + }, + "description": { + "description": "A description of the job.", + "type": "string" + }, + "dest": { + "$ref": "#/components/schemas/ml._types:DataframeAnalyticsDestination" + }, + "max_num_threads": { + "description": "The maximum number of threads to be used by the analysis. Using more\nthreads may decrease the time necessary to complete the analysis at the\ncost of using more CPU. Note that the process may use additional threads\nfor operational functionality other than the analysis itself.", + "type": "number" + }, + "model_memory_limit": { + "description": "The approximate maximum amount of memory resources that are permitted for\nanalytical processing. If your `elasticsearch.yml` file contains an\n`xpack.ml.max_model_memory_limit` setting, an error occurs when you try\nto create data frame analytics jobs that have `model_memory_limit` values\ngreater than that setting.", + "type": "string" + }, + "source": { + "$ref": "#/components/schemas/ml._types:DataframeAnalyticsSource" + }, + "headers": { + "$ref": "#/components/schemas/_types:HttpHeaders" + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + } + }, + "required": [ + "analysis", + "dest", + "source" + ], + "components": { + "schemas": { + "ml._types:DataframeAnalysisContainer": { + "type": "object", + "properties": { + "classification": { + "$ref": "#/components/schemas/ml._types:DataframeAnalysisClassification" + }, + "outlier_detection": { + "$ref": "#/components/schemas/ml._types:DataframeAnalysisOutlierDetection" + }, + "regression": { + "$ref": "#/components/schemas/ml._types:DataframeAnalysisRegression" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "ml._types:DataframeAnalysisClassification": { + "allOf": [ + { + "$ref": "#/components/schemas/ml._types:DataframeAnalysis" + }, + { + "type": "object", + "properties": { + "class_assignment_objective": { + "type": "string" + }, + "num_top_classes": { + "description": "Defines the number of categories for which the predicted probabilities are reported. It must be non-negative or -1. If it is -1 or greater than the total number of categories, probabilities are reported for all categories; if you have a large number of categories, there could be a significant effect on the size of your destination index. NOTE: To use the AUC ROC evaluation method, `num_top_classes` must be set to -1 or a value greater than or equal to the total number of categories.", + "type": "number" + } + } + } + ] + }, + "ml._types:DataframeAnalysis": { + "type": "object", + "properties": { + "alpha": { + "description": "Advanced configuration option. Machine learning uses loss guided tree growing, which means that the decision trees grow where the regularized loss decreases most quickly. This parameter affects loss calculations by acting as a multiplier of the tree depth. Higher alpha values result in shallower trees and faster training times. By default, this value is calculated during hyperparameter optimization. It must be greater than or equal to zero.", + "type": "number" + }, + "dependent_variable": { + "description": "Defines which field of the document is to be predicted. It must match one of the fields in the index being used to train. If this field is missing from a document, then that document will not be used for training, but a prediction with the trained model will be generated for it. It is also known as continuous target variable.\nFor classification analysis, the data type of the field must be numeric (`integer`, `short`, `long`, `byte`), categorical (`ip` or `keyword`), or `boolean`. There must be no more than 30 different values in this field.\nFor regression analysis, the data type of the field must be numeric.", + "type": "string" + }, + "downsample_factor": { + "description": "Advanced configuration option. Controls the fraction of data that is used to compute the derivatives of the loss function for tree training. A small value results in the use of a small fraction of the data. If this value is set to be less than 1, accuracy typically improves. However, too small a value may result in poor convergence for the ensemble and so require more trees. By default, this value is calculated during hyperparameter optimization. It must be greater than zero and less than or equal to 1.", + "type": "number" + }, + "early_stopping_enabled": { + "description": "Advanced configuration option. Specifies whether the training process should finish if it is not finding any better performing models. If disabled, the training process can take significantly longer and the chance of finding a better performing model is unremarkable.", + "type": "boolean" + }, + "eta": { + "description": "Advanced configuration option. The shrinkage applied to the weights. Smaller values result in larger forests which have a better generalization error. However, larger forests cause slower training. By default, this value is calculated during hyperparameter optimization. It must be a value between 0.001 and 1.", + "type": "number" + }, + "eta_growth_rate_per_tree": { + "description": "Advanced configuration option. Specifies the rate at which `eta` increases for each new tree that is added to the forest. For example, a rate of 1.05 increases `eta` by 5% for each extra tree. By default, this value is calculated during hyperparameter optimization. It must be between 0.5 and 2.", + "type": "number" + }, + "feature_bag_fraction": { + "description": "Advanced configuration option. Defines the fraction of features that will be used when selecting a random bag for each candidate split. By default, this value is calculated during hyperparameter optimization.", + "type": "number" + }, + "feature_processors": { + "description": "Advanced configuration option. A collection of feature preprocessors that modify one or more included fields. The analysis uses the resulting one or more features instead of the original document field. However, these features are ephemeral; they are not stored in the destination index. Multiple `feature_processors` entries can refer to the same document fields. Automatic categorical feature encoding still occurs for the fields that are unprocessed by a custom processor or that have categorical values. Use this property only if you want to override the automatic feature encoding of the specified fields.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ml._types:DataframeAnalysisFeatureProcessor" + } + }, + "gamma": { + "description": "Advanced configuration option. Regularization parameter to prevent overfitting on the training data set. Multiplies a linear penalty associated with the size of individual trees in the forest. A high gamma value causes training to prefer small trees. A small gamma value results in larger individual trees and slower training. By default, this value is calculated during hyperparameter optimization. It must be a nonnegative value.", + "type": "number" + }, + "lambda": { + "description": "Advanced configuration option. Regularization parameter to prevent overfitting on the training data set. Multiplies an L2 regularization term which applies to leaf weights of the individual trees in the forest. A high lambda value causes training to favor small leaf weights. This behavior makes the prediction function smoother at the expense of potentially not being able to capture relevant relationships between the features and the dependent variable. A small lambda value results in large individual trees and slower training. By default, this value is calculated during hyperparameter optimization. It must be a nonnegative value.", + "type": "number" + }, + "max_optimization_rounds_per_hyperparameter": { + "description": "Advanced configuration option. A multiplier responsible for determining the maximum number of hyperparameter optimization steps in the Bayesian optimization procedure. The maximum number of steps is determined based on the number of undefined hyperparameters times the maximum optimization rounds per hyperparameter. By default, this value is calculated during hyperparameter optimization.", + "type": "number" + }, + "max_trees": { + "description": "Advanced configuration option. Defines the maximum number of decision trees in the forest. The maximum value is 2000. By default, this value is calculated during hyperparameter optimization.", + "type": "number" + }, + "num_top_feature_importance_values": { + "description": "Advanced configuration option. Specifies the maximum number of feature importance values per document to return. By default, no feature importance calculation occurs.", + "type": "number" + }, + "prediction_field_name": { + "$ref": "#/components/schemas/_types:Field" + }, + "randomize_seed": { + "description": "Defines the seed for the random generator that is used to pick training data. By default, it is randomly generated. Set it to a specific value to use the same training data each time you start a job (assuming other related parameters such as `source` and `analyzed_fields` are the same).", + "type": "number" + }, + "soft_tree_depth_limit": { + "description": "Advanced configuration option. Machine learning uses loss guided tree growing, which means that the decision trees grow where the regularized loss decreases most quickly. This soft limit combines with the `soft_tree_depth_tolerance` to penalize trees that exceed the specified depth; the regularized loss increases quickly beyond this depth. By default, this value is calculated during hyperparameter optimization. It must be greater than or equal to 0.", + "type": "number" + }, + "soft_tree_depth_tolerance": { + "description": "Advanced configuration option. This option controls how quickly the regularized loss increases when the tree depth exceeds `soft_tree_depth_limit`. By default, this value is calculated during hyperparameter optimization. It must be greater than or equal to 0.01.", + "type": "number" + }, + "training_percent": { + "$ref": "#/components/schemas/_types:Percentage" + } + }, + "required": [ + "dependent_variable" + ] + }, + "ml._types:DataframeAnalysisFeatureProcessor": { + "type": "object", + "properties": { + "frequency_encoding": { + "$ref": "#/components/schemas/ml._types:DataframeAnalysisFeatureProcessorFrequencyEncoding" + }, + "multi_encoding": { + "$ref": "#/components/schemas/ml._types:DataframeAnalysisFeatureProcessorMultiEncoding" + }, + "n_gram_encoding": { + "$ref": "#/components/schemas/ml._types:DataframeAnalysisFeatureProcessorNGramEncoding" + }, + "one_hot_encoding": { + "$ref": "#/components/schemas/ml._types:DataframeAnalysisFeatureProcessorOneHotEncoding" + }, + "target_mean_encoding": { + "$ref": "#/components/schemas/ml._types:DataframeAnalysisFeatureProcessorTargetMeanEncoding" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "ml._types:DataframeAnalysisFeatureProcessorFrequencyEncoding": { + "type": "object", + "properties": { + "feature_name": { + "$ref": "#/components/schemas/_types:Name" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "frequency_map": { + "description": "The resulting frequency map for the field value. If the field value is missing from the frequency_map, the resulting value is 0.", + "type": "object", + "additionalProperties": { + "type": "number" + } + } + }, + "required": [ + "feature_name", + "field", + "frequency_map" + ] + }, + "_types:Name": { + "type": "string" + }, + "_types:Field": { + "description": "Path to field or array of paths. Some API's support wildcards in the path to select multiple fields.", + "type": "string" + }, + "ml._types:DataframeAnalysisFeatureProcessorMultiEncoding": { + "type": "object", + "properties": { + "processors": { + "description": "The ordered array of custom processors to execute. Must be more than 1.", + "type": "array", + "items": { + "type": "number" + } + } + }, + "required": [ + "processors" + ] + }, + "ml._types:DataframeAnalysisFeatureProcessorNGramEncoding": { + "type": "object", + "properties": { + "feature_prefix": { + "description": "The feature name prefix. Defaults to ngram__.", + "type": "string" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "length": { + "description": "Specifies the length of the n-gram substring. Defaults to 50. Must be greater than 0.", + "type": "number" + }, + "n_grams": { + "description": "Specifies which n-grams to gather. It’s an array of integer values where the minimum value is 1, and a maximum value is 5.", + "type": "array", + "items": { + "type": "number" + } + }, + "start": { + "description": "Specifies the zero-indexed start of the n-gram substring. Negative values are allowed for encoding n-grams of string suffixes. Defaults to 0.", + "type": "number" + }, + "custom": { + "type": "boolean" + } + }, + "required": [ + "field", + "n_grams" + ] + }, + "ml._types:DataframeAnalysisFeatureProcessorOneHotEncoding": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "hot_map": { + "description": "The one hot map mapping the field value with the column name.", + "type": "string" + } + }, + "required": [ + "field", + "hot_map" + ] + }, + "ml._types:DataframeAnalysisFeatureProcessorTargetMeanEncoding": { + "type": "object", + "properties": { + "default_value": { + "description": "The default value if field value is not found in the target_map.", + "type": "number" + }, + "feature_name": { + "$ref": "#/components/schemas/_types:Name" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "target_map": { + "description": "The field value to target mean transition map.", + "type": "object", + "additionalProperties": { + "type": "object" + } + } + }, + "required": [ + "default_value", + "feature_name", + "field", + "target_map" + ] + }, + "_types:Percentage": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "ml._types:DataframeAnalysisOutlierDetection": { + "type": "object", + "properties": { + "compute_feature_influence": { + "description": "Specifies whether the feature influence calculation is enabled.", + "type": "boolean" + }, + "feature_influence_threshold": { + "description": "The minimum outlier score that a document needs to have in order to calculate its feature influence score. Value range: 0-1.", + "type": "number" + }, + "method": { + "description": "The method that outlier detection uses. Available methods are `lof`, `ldof`, `distance_kth_nn`, `distance_knn`, and `ensemble`. The default value is ensemble, which means that outlier detection uses an ensemble of different methods and normalises and combines their individual outlier scores to obtain the overall outlier score.", + "type": "string" + }, + "n_neighbors": { + "description": "Defines the value for how many nearest neighbors each method of outlier detection uses to calculate its outlier score. When the value is not set, different values are used for different ensemble members. This default behavior helps improve the diversity in the ensemble; only override it if you are confident that the value you choose is appropriate for the data set.", + "type": "number" + }, + "outlier_fraction": { + "description": "The proportion of the data set that is assumed to be outlying prior to outlier detection. For example, 0.05 means it is assumed that 5% of values are real outliers and 95% are inliers.", + "type": "number" + }, + "standardization_enabled": { + "description": "If true, the following operation is performed on the columns before computing outlier scores: `(x_i - mean(x_i)) / sd(x_i)`.", + "type": "boolean" + } + } + }, + "ml._types:DataframeAnalysisRegression": { + "allOf": [ + { + "$ref": "#/components/schemas/ml._types:DataframeAnalysis" + }, + { + "type": "object", + "properties": { + "loss_function": { + "description": "The loss function used during regression. Available options are `mse` (mean squared error), `msle` (mean squared logarithmic error), `huber` (Pseudo-Huber loss).", + "type": "string" + }, + "loss_function_parameter": { + "description": "A positive number that is used as a parameter to the `loss_function`.", + "type": "number" + } + } + } + ] + }, + "ml._types:DataframeAnalysisAnalyzedFields": { + "type": "object", + "properties": { + "includes": { + "description": "An array of strings that defines the fields that will be excluded from the analysis. You do not need to add fields with unsupported data types to excludes, these fields are excluded from the analysis automatically.", + "type": "array", + "items": { + "type": "string" + } + }, + "excludes": { + "description": "An array of strings that defines the fields that will be included in the analysis.", + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "includes", + "excludes" + ] + }, + "ml._types:DataframeAnalyticsDestination": { + "type": "object", + "properties": { + "index": { + "$ref": "#/components/schemas/_types:IndexName" + }, + "results_field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "index" + ] + }, + "_types:IndexName": { + "type": "string" + }, + "ml._types:DataframeAnalyticsSource": { + "type": "object", + "properties": { + "index": { + "$ref": "#/components/schemas/_types:Indices" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "runtime_mappings": { + "$ref": "#/components/schemas/_types.mapping:RuntimeFields" + }, + "_source": { + "$ref": "#/components/schemas/ml._types:DataframeAnalysisAnalyzedFields" + } + }, + "required": [ + "index" + ] + }, + "_types:Indices": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:IndexName" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:IndexName" + } + } + ] + }, + "_types.query_dsl:QueryContainer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html" + }, + "type": "object", + "properties": { + "bool": { + "$ref": "#/components/schemas/_types.query_dsl:BoolQuery" + }, + "boosting": { + "$ref": "#/components/schemas/_types.query_dsl:BoostingQuery" + }, + "common": { + "deprecated": true, + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:CommonTermsQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "combined_fields": { + "$ref": "#/components/schemas/_types.query_dsl:CombinedFieldsQuery" + }, + "constant_score": { + "$ref": "#/components/schemas/_types.query_dsl:ConstantScoreQuery" + }, + "dis_max": { + "$ref": "#/components/schemas/_types.query_dsl:DisMaxQuery" + }, + "distance_feature": { + "$ref": "#/components/schemas/_types.query_dsl:DistanceFeatureQuery" + }, + "exists": { + "$ref": "#/components/schemas/_types.query_dsl:ExistsQuery" + }, + "function_score": { + "$ref": "#/components/schemas/_types.query_dsl:FunctionScoreQuery" + }, + "fuzzy": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html" + }, + "description": "Returns documents that contain terms similar to the search term, as measured by a Levenshtein edit distance.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:FuzzyQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "geo_bounding_box": { + "$ref": "#/components/schemas/_types.query_dsl:GeoBoundingBoxQuery" + }, + "geo_distance": { + "$ref": "#/components/schemas/_types.query_dsl:GeoDistanceQuery" + }, + "geo_polygon": { + "$ref": "#/components/schemas/_types.query_dsl:GeoPolygonQuery" + }, + "geo_shape": { + "$ref": "#/components/schemas/_types.query_dsl:GeoShapeQuery" + }, + "has_child": { + "$ref": "#/components/schemas/_types.query_dsl:HasChildQuery" + }, + "has_parent": { + "$ref": "#/components/schemas/_types.query_dsl:HasParentQuery" + }, + "ids": { + "$ref": "#/components/schemas/_types.query_dsl:IdsQuery" + }, + "intervals": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-intervals-query.html" + }, + "description": "Returns documents based on the order and proximity of matching terms.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "knn": { + "$ref": "#/components/schemas/_types:KnnQuery" + }, + "match": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html" + }, + "description": "Returns documents that match a provided text, number, date or boolean value.\nThe provided text is analyzed before matching.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:MatchQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "match_all": { + "$ref": "#/components/schemas/_types.query_dsl:MatchAllQuery" + }, + "match_bool_prefix": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-bool-prefix-query.html" + }, + "description": "Analyzes its input and constructs a `bool` query from the terms.\nEach term except the last is used in a `term` query.\nThe last term is used in a prefix query.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:MatchBoolPrefixQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "match_none": { + "$ref": "#/components/schemas/_types.query_dsl:MatchNoneQuery" + }, + "match_phrase": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query-phrase.html" + }, + "description": "Analyzes the text and creates a phrase query out of the analyzed text.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:MatchPhraseQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "match_phrase_prefix": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query-phrase-prefix.html" + }, + "description": "Returns documents that contain the words of a provided text, in the same order as provided.\nThe last term of the provided text is treated as a prefix, matching any words that begin with that term.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:MatchPhrasePrefixQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "more_like_this": { + "$ref": "#/components/schemas/_types.query_dsl:MoreLikeThisQuery" + }, + "multi_match": { + "$ref": "#/components/schemas/_types.query_dsl:MultiMatchQuery" + }, + "nested": { + "$ref": "#/components/schemas/_types.query_dsl:NestedQuery" + }, + "parent_id": { + "$ref": "#/components/schemas/_types.query_dsl:ParentIdQuery" + }, + "percolate": { + "$ref": "#/components/schemas/_types.query_dsl:PercolateQuery" + }, + "pinned": { + "$ref": "#/components/schemas/_types.query_dsl:PinnedQuery" + }, + "prefix": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-prefix-query.html" + }, + "description": "Returns documents that contain a specific prefix in a provided field.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:PrefixQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "query_string": { + "$ref": "#/components/schemas/_types.query_dsl:QueryStringQuery" + }, + "range": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html" + }, + "description": "Returns documents that contain terms within a provided range.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:RangeQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "rank_feature": { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureQuery" + }, + "regexp": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html" + }, + "description": "Returns documents that contain terms matching a regular expression.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:RegexpQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "rule_query": { + "$ref": "#/components/schemas/_types.query_dsl:RuleQuery" + }, + "script": { + "$ref": "#/components/schemas/_types.query_dsl:ScriptQuery" + }, + "script_score": { + "$ref": "#/components/schemas/_types.query_dsl:ScriptScoreQuery" + }, + "shape": { + "$ref": "#/components/schemas/_types.query_dsl:ShapeQuery" + }, + "simple_query_string": { + "$ref": "#/components/schemas/_types.query_dsl:SimpleQueryStringQuery" + }, + "span_containing": { + "$ref": "#/components/schemas/_types.query_dsl:SpanContainingQuery" + }, + "field_masking_span": { + "$ref": "#/components/schemas/_types.query_dsl:SpanFieldMaskingQuery" + }, + "span_first": { + "$ref": "#/components/schemas/_types.query_dsl:SpanFirstQuery" + }, + "span_multi": { + "$ref": "#/components/schemas/_types.query_dsl:SpanMultiTermQuery" + }, + "span_near": { + "$ref": "#/components/schemas/_types.query_dsl:SpanNearQuery" + }, + "span_not": { + "$ref": "#/components/schemas/_types.query_dsl:SpanNotQuery" + }, + "span_or": { + "$ref": "#/components/schemas/_types.query_dsl:SpanOrQuery" + }, + "span_term": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-span-term-query.html" + }, + "description": "Matches spans containing a term.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:SpanTermQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "span_within": { + "$ref": "#/components/schemas/_types.query_dsl:SpanWithinQuery" + }, + "term": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html" + }, + "description": "Returns documents that contain an exact term in a provided field.\nTo return a document, the query term must exactly match the queried field's value, including whitespace and capitalization.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:TermQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "terms": { + "$ref": "#/components/schemas/_types.query_dsl:TermsQuery" + }, + "terms_set": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-set-query.html" + }, + "description": "Returns documents that contain a minimum number of exact terms in a provided field.\nTo return a document, a required number of terms must exactly match the field values, including whitespace and capitalization.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:TermsSetQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "text_expansion": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-text-expansion-query.html" + }, + "description": "Uses a natural language processing model to convert the query text into a list of token-weight pairs which are then used in a query against a sparse vector or rank features field.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:TextExpansionQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "weighted_tokens": { + "description": "Supports returning text_expansion query results by sending in precomputed tokens with the query.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:WeightedTokensQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "wildcard": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html" + }, + "description": "Returns documents that contain terms matching a wildcard pattern.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:WildcardQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "wrapper": { + "$ref": "#/components/schemas/_types.query_dsl:WrapperQuery" + }, + "type": { + "$ref": "#/components/schemas/_types.query_dsl:TypeQuery" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types.query_dsl:BoolQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "filter": { + "description": "The clause (query) must appear in matching documents.\nHowever, unlike `must`, the score of the query will be ignored.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + } + ] + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "must": { + "description": "The clause (query) must appear in matching documents and will contribute to the score.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + } + ] + }, + "must_not": { + "description": "The clause (query) must not appear in the matching documents.\nBecause scoring is ignored, a score of `0` is returned for all documents.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + } + ] + }, + "should": { + "description": "The clause (query) should appear in the matching document.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + } + ] + } + } + } + ] + }, + "_types.query_dsl:QueryBase": { + "type": "object", + "properties": { + "boost": { + "description": "Floating point number used to decrease or increase the relevance scores of the query.\nBoost values are relative to the default value of 1.0.\nA boost value between 0 and 1.0 decreases the relevance score.\nA value greater than 1.0 increases the relevance score.", + "type": "number" + }, + "_name": { + "type": "string" + } + } + }, + "_types:MinimumShouldMatch": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-minimum-should-match.html" + }, + "description": "The minimum number of terms that should match as integer, percentage or range", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "_types.query_dsl:BoostingQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "negative_boost": { + "description": "Floating point number between 0 and 1.0 used to decrease the relevance scores of documents matching the `negative` query.", + "type": "number" + }, + "negative": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "positive": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "required": [ + "negative_boost", + "negative", + "positive" + ] + } + ] + }, + "_types.query_dsl:CommonTermsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "type": "string" + }, + "cutoff_frequency": { + "type": "number" + }, + "high_freq_operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "low_freq_operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "query": { + "type": "string" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:Operator": { + "type": "string", + "enum": [ + "and", + "AND", + "or", + "OR" + ] + }, + "_types.query_dsl:CombinedFieldsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "fields": { + "description": "List of fields to search. Field wildcard patterns are allowed. Only `text` fields are supported, and they must all have the same search `analyzer`.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "query": { + "description": "Text to search for in the provided `fields`.\nThe `combined_fields` query analyzes the provided text before performing a search.", + "type": "string" + }, + "auto_generate_synonyms_phrase_query": { + "description": "If true, match phrase queries are automatically created for multi-term synonyms.", + "type": "boolean" + }, + "operator": { + "$ref": "#/components/schemas/_types.query_dsl:CombinedFieldsOperator" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "zero_terms_query": { + "$ref": "#/components/schemas/_types.query_dsl:CombinedFieldsZeroTerms" + } + }, + "required": [ + "fields", + "query" + ] + } + ] + }, + "_types.query_dsl:CombinedFieldsOperator": { + "type": "string", + "enum": [ + "or", + "and" + ] + }, + "_types.query_dsl:CombinedFieldsZeroTerms": { + "type": "string", + "enum": [ + "none", + "all" + ] + }, + "_types.query_dsl:ConstantScoreQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "required": [ + "filter" + ] + } + ] + }, + "_types.query_dsl:DisMaxQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "queries": { + "description": "One or more query clauses.\nReturned documents must match one or more of these queries.\nIf a document matches multiple queries, Elasticsearch uses the highest relevance score.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "tie_breaker": { + "description": "Floating point number between 0 and 1.0 used to increase the relevance scores of documents matching multiple query clauses.", + "type": "number" + } + }, + "required": [ + "queries" + ] + } + ] + }, + "_types.query_dsl:DistanceFeatureQuery": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:GeoDistanceFeatureQuery" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:DateDistanceFeatureQuery" + } + ] + }, + "_types.query_dsl:GeoDistanceFeatureQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DistanceFeatureQueryBaseGeoLocationDistance" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:DistanceFeatureQueryBaseGeoLocationDistance": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "origin": { + "$ref": "#/components/schemas/_types:GeoLocation" + }, + "pivot": { + "$ref": "#/components/schemas/_types:Distance" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "origin", + "pivot", + "field" + ] + } + ] + }, + "_types:GeoLocation": { + "description": "A latitude/longitude as a 2 dimensional point. It can be represented in various ways:\n- as a `{lat, long}` object\n- as a geo hash value\n- as a `[lon, lat]` array\n- as a string in `\", \"` or WKT point formats", + "oneOf": [ + { + "$ref": "#/components/schemas/_types:LatLonGeoLocation" + }, + { + "$ref": "#/components/schemas/_types:GeoHashLocation" + }, + { + "type": "array", + "items": { + "type": "number" + } + }, + { + "type": "string" + } + ] + }, + "_types:LatLonGeoLocation": { + "type": "object", + "properties": { + "lat": { + "description": "Latitude", + "type": "number" + }, + "lon": { + "description": "Longitude", + "type": "number" + } + }, + "required": [ + "lat", + "lon" + ] + }, + "_types:GeoHashLocation": { + "type": "object", + "properties": { + "geohash": { + "$ref": "#/components/schemas/_types:GeoHash" + } + }, + "required": [ + "geohash" + ] + }, + "_types:GeoHash": { + "type": "string" + }, + "_types:Distance": { + "type": "string" + }, + "_types.query_dsl:DateDistanceFeatureQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DistanceFeatureQueryBaseDateMathDuration" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:DistanceFeatureQueryBaseDateMathDuration": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "origin": { + "$ref": "#/components/schemas/_types:DateMath" + }, + "pivot": { + "$ref": "#/components/schemas/_types:Duration" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "origin", + "pivot", + "field" + ] + } + ] + }, + "_types:DateMath": { + "type": "string" + }, + "_types:Duration": { + "externalDocs": { + "url": "https://github.com/elastic/elasticsearch/blob/current/libs/core/src/main/java/org/elasticsearch/core/TimeValue.java" + }, + "description": "A duration. Units can be `nanos`, `micros`, `ms` (milliseconds), `s` (seconds), `m` (minutes), `h` (hours) and\n`d` (days). Also accepts \"0\" without a unit and \"-1\" to indicate an unspecified value.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "string", + "enum": [ + "-1" + ] + }, + { + "type": "string", + "enum": [ + "0" + ] + } + ] + }, + "_types.query_dsl:ExistsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "field" + ] + } + ] + }, + "_types.query_dsl:FunctionScoreQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "boost_mode": { + "$ref": "#/components/schemas/_types.query_dsl:FunctionBoostMode" + }, + "functions": { + "description": "One or more functions that compute a new score for each document returned by the query.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:FunctionScoreContainer" + } + }, + "max_boost": { + "description": "Restricts the new score to not exceed the provided limit.", + "type": "number" + }, + "min_score": { + "description": "Excludes documents that do not meet the provided score threshold.", + "type": "number" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "score_mode": { + "$ref": "#/components/schemas/_types.query_dsl:FunctionScoreMode" + } + } + } + ] + }, + "_types.query_dsl:FunctionBoostMode": { + "type": "string", + "enum": [ + "multiply", + "replace", + "sum", + "avg", + "max", + "min" + ] + }, + "_types.query_dsl:FunctionScoreContainer": { + "allOf": [ + { + "type": "object", + "properties": { + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "weight": { + "type": "number" + } + } + }, + { + "type": "object", + "properties": { + "exp": { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunction" + }, + "gauss": { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunction" + }, + "linear": { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunction" + }, + "field_value_factor": { + "$ref": "#/components/schemas/_types.query_dsl:FieldValueFactorScoreFunction" + }, + "random_score": { + "$ref": "#/components/schemas/_types.query_dsl:RandomScoreFunction" + }, + "script_score": { + "$ref": "#/components/schemas/_types.query_dsl:ScriptScoreFunction" + } + }, + "minProperties": 1, + "maxProperties": 1 + } + ] + }, + "_types.query_dsl:DecayFunction": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DateDecayFunction" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:NumericDecayFunction" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:GeoDecayFunction" + } + ] + }, + "_types.query_dsl:DateDecayFunction": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunctionBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:DecayFunctionBase": { + "type": "object", + "properties": { + "multi_value_mode": { + "$ref": "#/components/schemas/_types.query_dsl:MultiValueMode" + } + } + }, + "_types.query_dsl:MultiValueMode": { + "type": "string", + "enum": [ + "min", + "max", + "avg", + "sum" + ] + }, + "_types.query_dsl:NumericDecayFunction": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunctionBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:GeoDecayFunction": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunctionBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:FieldValueFactorScoreFunction": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "factor": { + "description": "Optional factor to multiply the field value with.", + "type": "number" + }, + "missing": { + "description": "Value used if the document doesn’t have that field.\nThe modifier and factor are still applied to it as though it were read from the document.", + "type": "number" + }, + "modifier": { + "$ref": "#/components/schemas/_types.query_dsl:FieldValueFactorModifier" + } + }, + "required": [ + "field" + ] + }, + "_types.query_dsl:FieldValueFactorModifier": { + "type": "string", + "enum": [ + "none", + "log", + "log1p", + "log2p", + "ln", + "ln1p", + "ln2p", + "square", + "sqrt", + "reciprocal" + ] + }, + "_types.query_dsl:RandomScoreFunction": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "seed": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + } + } + }, + "_types.query_dsl:ScriptScoreFunction": { + "type": "object", + "properties": { + "script": { + "$ref": "#/components/schemas/_types:Script" + } + }, + "required": [ + "script" + ] + }, + "_types:Script": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:InlineScript" + }, + { + "$ref": "#/components/schemas/_types:StoredScriptId" + } + ] + }, + "_types:InlineScript": { + "allOf": [ + { + "$ref": "#/components/schemas/_types:ScriptBase" + }, + { + "type": "object", + "properties": { + "lang": { + "$ref": "#/components/schemas/_types:ScriptLanguage" + }, + "options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "source": { + "description": "The script source.", + "type": "string" + } + }, + "required": [ + "source" + ] + } + ] + }, + "_types:ScriptBase": { + "type": "object", + "properties": { + "params": { + "description": "Specifies any named parameters that are passed into the script as variables.\nUse parameters instead of hard-coded values to decrease compile time.", + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + }, + "_types:ScriptLanguage": { + "anyOf": [ + { + "type": "string", + "enum": [ + "painless", + "expression", + "mustache", + "java" + ] + }, + { + "type": "string" + } + ] + }, + "_types:StoredScriptId": { + "allOf": [ + { + "$ref": "#/components/schemas/_types:ScriptBase" + }, + { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/_types:Id" + } + }, + "required": [ + "id" + ] + } + ] + }, + "_types:Id": { + "type": "string" + }, + "_types.query_dsl:FunctionScoreMode": { + "type": "string", + "enum": [ + "multiply", + "sum", + "avg", + "first", + "max", + "min" + ] + }, + "_types.query_dsl:FuzzyQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "max_expansions": { + "description": "Maximum number of variations created.", + "type": "number" + }, + "prefix_length": { + "description": "Number of beginning characters left unchanged when creating expansions.", + "type": "number" + }, + "rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "transpositions": { + "description": "Indicates whether edits include transpositions of two adjacent characters (for example `ab` to `ba`).", + "type": "boolean" + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "value": { + "description": "Term you wish to find in the provided field.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ] + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types:MultiTermQueryRewrite": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-term-rewrite.html" + }, + "type": "string" + }, + "_types:Fuzziness": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#fuzziness" + }, + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "_types.query_dsl:GeoBoundingBoxQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/_types.query_dsl:GeoExecution" + }, + "validation_method": { + "$ref": "#/components/schemas/_types.query_dsl:GeoValidationMethod" + }, + "ignore_unmapped": { + "description": "Set to `true` to ignore an unmapped field and not match any documents for this query.\nSet to `false` to throw an exception if the field is not mapped.", + "type": "boolean" + } + } + } + ] + }, + "_types.query_dsl:GeoExecution": { + "type": "string", + "enum": [ + "memory", + "indexed" + ] + }, + "_types.query_dsl:GeoValidationMethod": { + "type": "string", + "enum": [ + "coerce", + "ignore_malformed", + "strict" + ] + }, + "_types.query_dsl:GeoDistanceQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "distance": { + "$ref": "#/components/schemas/_types:Distance" + }, + "distance_type": { + "$ref": "#/components/schemas/_types:GeoDistanceType" + }, + "validation_method": { + "$ref": "#/components/schemas/_types.query_dsl:GeoValidationMethod" + }, + "ignore_unmapped": { + "description": "Set to `true` to ignore an unmapped field and not match any documents for this query.\nSet to `false` to throw an exception if the field is not mapped.", + "type": "boolean" + } + }, + "required": [ + "distance" + ] + } + ] + }, + "_types:GeoDistanceType": { + "type": "string", + "enum": [ + "arc", + "plane" + ] + }, + "_types.query_dsl:GeoPolygonQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "validation_method": { + "$ref": "#/components/schemas/_types.query_dsl:GeoValidationMethod" + }, + "ignore_unmapped": { + "type": "boolean" + } + } + } + ] + }, + "_types.query_dsl:GeoShapeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "ignore_unmapped": { + "description": "Set to `true` to ignore an unmapped field and not match any documents for this query.\nSet to `false` to throw an exception if the field is not mapped.", + "type": "boolean" + } + } + } + ] + }, + "_types.query_dsl:HasChildQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "ignore_unmapped": { + "description": "Indicates whether to ignore an unmapped `type` and not return any documents instead of an error.", + "type": "boolean" + }, + "inner_hits": { + "$ref": "#/components/schemas/_global.search._types:InnerHits" + }, + "max_children": { + "description": "Maximum number of child documents that match the query allowed for a returned parent document.\nIf the parent document exceeds this limit, it is excluded from the search results.", + "type": "number" + }, + "min_children": { + "description": "Minimum number of child documents that match the query required to match the query for a returned parent document.\nIf the parent document does not meet this limit, it is excluded from the search results.", + "type": "number" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "score_mode": { + "$ref": "#/components/schemas/_types.query_dsl:ChildScoreMode" + }, + "type": { + "$ref": "#/components/schemas/_types:RelationName" + } + }, + "required": [ + "query", + "type" + ] + } + ] + }, + "_global.search._types:InnerHits": { + "type": "object", + "properties": { + "name": { + "$ref": "#/components/schemas/_types:Name" + }, + "size": { + "description": "The maximum number of hits to return per `inner_hits`.", + "type": "number" + }, + "from": { + "description": "Inner hit starting document offset.", + "type": "number" + }, + "collapse": { + "$ref": "#/components/schemas/_global.search._types:FieldCollapse" + }, + "docvalue_fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:FieldAndFormat" + } + }, + "explain": { + "type": "boolean" + }, + "highlight": { + "$ref": "#/components/schemas/_global.search._types:Highlight" + }, + "ignore_unmapped": { + "type": "boolean" + }, + "script_fields": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types:ScriptField" + } + }, + "seq_no_primary_term": { + "type": "boolean" + }, + "fields": { + "$ref": "#/components/schemas/_types:Fields" + }, + "sort": { + "$ref": "#/components/schemas/_types:Sort" + }, + "_source": { + "$ref": "#/components/schemas/_global.search._types:SourceConfig" + }, + "stored_fields": { + "$ref": "#/components/schemas/_types:Fields" + }, + "track_scores": { + "type": "boolean" + }, + "version": { + "type": "boolean" + } + } + }, + "_global.search._types:FieldCollapse": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "inner_hits": { + "description": "The number of inner hits and their sort order", + "oneOf": [ + { + "$ref": "#/components/schemas/_global.search._types:InnerHits" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_global.search._types:InnerHits" + } + } + ] + }, + "max_concurrent_group_searches": { + "description": "The number of concurrent requests allowed to retrieve the inner_hits per group", + "type": "number" + }, + "collapse": { + "$ref": "#/components/schemas/_global.search._types:FieldCollapse" + } + }, + "required": [ + "field" + ] + }, + "_types.query_dsl:FieldAndFormat": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "format": { + "description": "Format in which the values are returned.", + "type": "string" + }, + "include_unmapped": { + "type": "boolean" + } + }, + "required": [ + "field" + ] + }, + "_global.search._types:Highlight": { + "allOf": [ + { + "$ref": "#/components/schemas/_global.search._types:HighlightBase" + }, + { + "type": "object", + "properties": { + "encoder": { + "$ref": "#/components/schemas/_global.search._types:HighlighterEncoder" + }, + "fields": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_global.search._types:HighlightField" + } + } + }, + "required": [ + "fields" + ] + } + ] + }, + "_global.search._types:HighlightBase": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/_global.search._types:HighlighterType" + }, + "boundary_chars": { + "description": "A string that contains each boundary character.", + "type": "string" + }, + "boundary_max_scan": { + "description": "How far to scan for boundary characters.", + "type": "number" + }, + "boundary_scanner": { + "$ref": "#/components/schemas/_global.search._types:BoundaryScanner" + }, + "boundary_scanner_locale": { + "description": "Controls which locale is used to search for sentence and word boundaries.\nThis parameter takes a form of a language tag, for example: `\"en-US\"`, `\"fr-FR\"`, `\"ja-JP\"`.", + "type": "string" + }, + "force_source": { + "deprecated": true, + "type": "boolean" + }, + "fragmenter": { + "$ref": "#/components/schemas/_global.search._types:HighlighterFragmenter" + }, + "fragment_size": { + "description": "The size of the highlighted fragment in characters.", + "type": "number" + }, + "highlight_filter": { + "type": "boolean" + }, + "highlight_query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "max_fragment_length": { + "type": "number" + }, + "max_analyzed_offset": { + "description": "If set to a non-negative value, highlighting stops at this defined maximum limit.\nThe rest of the text is not processed, thus not highlighted and no error is returned\nThe `max_analyzed_offset` query setting does not override the `index.highlight.max_analyzed_offset` setting, which prevails when it’s set to lower value than the query setting.", + "type": "number" + }, + "no_match_size": { + "description": "The amount of text you want to return from the beginning of the field if there are no matching fragments to highlight.", + "type": "number" + }, + "number_of_fragments": { + "description": "The maximum number of fragments to return.\nIf the number of fragments is set to `0`, no fragments are returned.\nInstead, the entire field contents are highlighted and returned.\nThis can be handy when you need to highlight short texts such as a title or address, but fragmentation is not required.\nIf `number_of_fragments` is `0`, `fragment_size` is ignored.", + "type": "number" + }, + "options": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "order": { + "$ref": "#/components/schemas/_global.search._types:HighlighterOrder" + }, + "phrase_limit": { + "description": "Controls the number of matching phrases in a document that are considered.\nPrevents the `fvh` highlighter from analyzing too many phrases and consuming too much memory.\nWhen using `matched_fields`, `phrase_limit` phrases per matched field are considered. Raising the limit increases query time and consumes more memory.\nOnly supported by the `fvh` highlighter.", + "type": "number" + }, + "post_tags": { + "description": "Use in conjunction with `pre_tags` to define the HTML tags to use for the highlighted text.\nBy default, highlighted text is wrapped in `` and `` tags.", + "type": "array", + "items": { + "type": "string" + } + }, + "pre_tags": { + "description": "Use in conjunction with `post_tags` to define the HTML tags to use for the highlighted text.\nBy default, highlighted text is wrapped in `` and `` tags.", + "type": "array", + "items": { + "type": "string" + } + }, + "require_field_match": { + "description": "By default, only fields that contains a query match are highlighted.\nSet to `false` to highlight all fields.", + "type": "boolean" + }, + "tags_schema": { + "$ref": "#/components/schemas/_global.search._types:HighlighterTagsSchema" + } + } + }, + "_global.search._types:HighlighterType": { + "anyOf": [ + { + "type": "string", + "enum": [ + "plain", + "fvh", + "unified" + ] + }, + { + "type": "string" + } + ] + }, + "_global.search._types:BoundaryScanner": { + "type": "string", + "enum": [ + "chars", + "sentence", + "word" + ] + }, + "_global.search._types:HighlighterFragmenter": { + "type": "string", + "enum": [ + "simple", + "span" + ] + }, + "_global.search._types:HighlighterOrder": { + "type": "string", + "enum": [ + "score" + ] + }, + "_global.search._types:HighlighterTagsSchema": { + "type": "string", + "enum": [ + "styled" + ] + }, + "_global.search._types:HighlighterEncoder": { + "type": "string", + "enum": [ + "default", + "html" + ] + }, + "_global.search._types:HighlightField": { + "allOf": [ + { + "$ref": "#/components/schemas/_global.search._types:HighlightBase" + }, + { + "type": "object", + "properties": { + "fragment_offset": { + "type": "number" + }, + "matched_fields": { + "$ref": "#/components/schemas/_types:Fields" + }, + "analyzer": { + "$ref": "#/components/schemas/_types.analysis:Analyzer" + } + } + } + ] + }, + "_types:Fields": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:Field" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + } + ] + }, + "_types.analysis:Analyzer": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/_types.analysis:CustomAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:FingerprintAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:KeywordAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:LanguageAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:NoriAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:PatternAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:SimpleAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:StandardAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:StopAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:WhitespaceAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:IcuAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:KuromojiAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:SnowballAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:DutchAnalyzer" + } + ] + }, + "_types.analysis:CustomAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "custom" + ] + }, + "char_filter": { + "type": "array", + "items": { + "type": "string" + } + }, + "filter": { + "type": "array", + "items": { + "type": "string" + } + }, + "position_increment_gap": { + "type": "number" + }, + "position_offset_gap": { + "type": "number" + }, + "tokenizer": { + "type": "string" + } + }, + "required": [ + "type", + "tokenizer" + ] + }, + "_types.analysis:FingerprintAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "fingerprint" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "max_output_size": { + "type": "number" + }, + "preserve_original": { + "type": "boolean" + }, + "separator": { + "type": "string" + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + }, + "stopwords_path": { + "type": "string" + } + }, + "required": [ + "type", + "max_output_size", + "preserve_original", + "separator" + ] + }, + "_types:VersionString": { + "type": "string" + }, + "_types.analysis:StopWords": { + "description": "Language value, such as _arabic_ or _thai_. Defaults to _english_.\nEach language value corresponds to a predefined list of stop words in Lucene. See Stop words by language for supported language values and their stop words.\nAlso accepts an array of stop words.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "_types.analysis:KeywordAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "keyword" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:LanguageAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "language" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "language": { + "$ref": "#/components/schemas/_types.analysis:Language" + }, + "stem_exclusion": { + "type": "array", + "items": { + "type": "string" + } + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + }, + "stopwords_path": { + "type": "string" + } + }, + "required": [ + "type", + "language", + "stem_exclusion" + ] + }, + "_types.analysis:Language": { + "type": "string", + "enum": [ + "Arabic", + "Armenian", + "Basque", + "Brazilian", + "Bulgarian", + "Catalan", + "Chinese", + "Cjk", + "Czech", + "Danish", + "Dutch", + "English", + "Estonian", + "Finnish", + "French", + "Galician", + "German", + "Greek", + "Hindi", + "Hungarian", + "Indonesian", + "Irish", + "Italian", + "Latvian", + "Norwegian", + "Persian", + "Portuguese", + "Romanian", + "Russian", + "Sorani", + "Spanish", + "Swedish", + "Turkish", + "Thai" + ] + }, + "_types.analysis:NoriAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "nori" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "decompound_mode": { + "$ref": "#/components/schemas/_types.analysis:NoriDecompoundMode" + }, + "stoptags": { + "type": "array", + "items": { + "type": "string" + } + }, + "user_dictionary": { + "type": "string" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:NoriDecompoundMode": { + "type": "string", + "enum": [ + "discard", + "none", + "mixed" + ] + }, + "_types.analysis:PatternAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "pattern" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "flags": { + "type": "string" + }, + "lowercase": { + "type": "boolean" + }, + "pattern": { + "type": "string" + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + } + }, + "required": [ + "type", + "pattern" + ] + }, + "_types.analysis:SimpleAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "simple" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:StandardAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "standard" + ] + }, + "max_token_length": { + "type": "number" + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:StopAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "stop" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + }, + "stopwords_path": { + "type": "string" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:WhitespaceAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "whitespace" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:IcuAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "icu_analyzer" + ] + }, + "method": { + "$ref": "#/components/schemas/_types.analysis:IcuNormalizationType" + }, + "mode": { + "$ref": "#/components/schemas/_types.analysis:IcuNormalizationMode" + } + }, + "required": [ + "type", + "method", + "mode" + ] + }, + "_types.analysis:IcuNormalizationType": { + "type": "string", + "enum": [ + "nfc", + "nfkc", + "nfkc_cf" + ] + }, + "_types.analysis:IcuNormalizationMode": { + "type": "string", + "enum": [ + "decompose", + "compose" + ] + }, + "_types.analysis:KuromojiAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "kuromoji" + ] + }, + "mode": { + "$ref": "#/components/schemas/_types.analysis:KuromojiTokenizationMode" + }, + "user_dictionary": { + "type": "string" + } + }, + "required": [ + "type", + "mode" + ] + }, + "_types.analysis:KuromojiTokenizationMode": { + "type": "string", + "enum": [ + "normal", + "search", + "extended" + ] + }, + "_types.analysis:SnowballAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "snowball" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "language": { + "$ref": "#/components/schemas/_types.analysis:SnowballLanguage" + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + } + }, + "required": [ + "type", + "language" + ] + }, + "_types.analysis:SnowballLanguage": { + "type": "string", + "enum": [ + "Armenian", + "Basque", + "Catalan", + "Danish", + "Dutch", + "English", + "Finnish", + "French", + "German", + "German2", + "Hungarian", + "Italian", + "Kp", + "Lovins", + "Norwegian", + "Porter", + "Portuguese", + "Romanian", + "Russian", + "Spanish", + "Swedish", + "Turkish" + ] + }, + "_types.analysis:DutchAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dutch" + ] + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + } + }, + "required": [ + "type" + ] + }, + "_types:ScriptField": { + "type": "object", + "properties": { + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "ignore_failure": { + "type": "boolean" + } + }, + "required": [ + "script" + ] + }, + "_types:Sort": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:SortCombinations" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:SortCombinations" + } + } + ] + }, + "_types:SortCombinations": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:Field" + }, + { + "$ref": "#/components/schemas/_types:SortOptions" + } + ] + }, + "_types:SortOptions": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/sort-search-results.html" + }, + "type": "object", + "properties": { + "_score": { + "$ref": "#/components/schemas/_types:ScoreSort" + }, + "_doc": { + "$ref": "#/components/schemas/_types:ScoreSort" + }, + "_geo_distance": { + "$ref": "#/components/schemas/_types:GeoDistanceSort" + }, + "_script": { + "$ref": "#/components/schemas/_types:ScriptSort" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types:ScoreSort": { + "type": "object", + "properties": { + "order": { + "$ref": "#/components/schemas/_types:SortOrder" + } + } + }, + "_types:SortOrder": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "_types:GeoDistanceSort": { + "type": "object", + "properties": { + "mode": { + "$ref": "#/components/schemas/_types:SortMode" + }, + "distance_type": { + "$ref": "#/components/schemas/_types:GeoDistanceType" + }, + "ignore_unmapped": { + "type": "boolean" + }, + "order": { + "$ref": "#/components/schemas/_types:SortOrder" + }, + "unit": { + "$ref": "#/components/schemas/_types:DistanceUnit" + } + } + }, + "_types:SortMode": { + "type": "string", + "enum": [ + "min", + "max", + "sum", + "avg", + "median" + ] + }, + "_types:DistanceUnit": { + "type": "string", + "enum": [ + "in", + "ft", + "yd", + "mi", + "nmi", + "km", + "m", + "cm", + "mm" + ] + }, + "_types:ScriptSort": { + "type": "object", + "properties": { + "order": { + "$ref": "#/components/schemas/_types:SortOrder" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "type": { + "$ref": "#/components/schemas/_types:ScriptSortType" + }, + "mode": { + "$ref": "#/components/schemas/_types:SortMode" + }, + "nested": { + "$ref": "#/components/schemas/_types:NestedSortValue" + } + }, + "required": [ + "script" + ] + }, + "_types:ScriptSortType": { + "type": "string", + "enum": [ + "string", + "number", + "version" + ] + }, + "_types:NestedSortValue": { + "type": "object", + "properties": { + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "max_children": { + "type": "number" + }, + "nested": { + "$ref": "#/components/schemas/_types:NestedSortValue" + }, + "path": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "path" + ] + }, + "_global.search._types:SourceConfig": { + "description": "Defines how to fetch a source. Fetching can be disabled entirely, or the source can be filtered.", + "oneOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/components/schemas/_global.search._types:SourceFilter" + } + ] + }, + "_global.search._types:SourceFilter": { + "type": "object", + "properties": { + "excludes": { + "$ref": "#/components/schemas/_types:Fields" + }, + "includes": { + "$ref": "#/components/schemas/_types:Fields" + } + } + }, + "_types.query_dsl:ChildScoreMode": { + "type": "string", + "enum": [ + "none", + "avg", + "sum", + "max", + "min" + ] + }, + "_types:RelationName": { + "type": "string" + }, + "_types.query_dsl:HasParentQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "ignore_unmapped": { + "description": "Indicates whether to ignore an unmapped `parent_type` and not return any documents instead of an error.\nYou can use this parameter to query multiple indices that may not contain the `parent_type`.", + "type": "boolean" + }, + "inner_hits": { + "$ref": "#/components/schemas/_global.search._types:InnerHits" + }, + "parent_type": { + "$ref": "#/components/schemas/_types:RelationName" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "score": { + "description": "Indicates whether the relevance score of a matching parent document is aggregated into its child documents.", + "type": "boolean" + } + }, + "required": [ + "parent_type", + "query" + ] + } + ] + }, + "_types.query_dsl:IdsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "values": { + "$ref": "#/components/schemas/_types:Ids" + } + } + } + ] + }, + "_types:Ids": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:Id" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Id" + } + } + ] + }, + "_types.query_dsl:IntervalsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "all_of": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsAllOf" + }, + "any_of": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsAnyOf" + }, + "fuzzy": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsFuzzy" + }, + "match": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsMatch" + }, + "prefix": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsPrefix" + }, + "wildcard": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsWildcard" + } + }, + "minProperties": 1, + "maxProperties": 1 + } + ] + }, + "_types.query_dsl:IntervalsAllOf": { + "type": "object", + "properties": { + "intervals": { + "description": "An array of rules to combine. All rules must produce a match in a document for the overall source to match.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + } + }, + "max_gaps": { + "description": "Maximum number of positions between the matching terms.\nIntervals produced by the rules further apart than this are not considered matches.", + "type": "number" + }, + "ordered": { + "description": "If `true`, intervals produced by the rules should appear in the order in which they are specified.", + "type": "boolean" + }, + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsFilter" + } + }, + "required": [ + "intervals" + ] + }, + "_types.query_dsl:IntervalsContainer": { + "type": "object", + "properties": { + "all_of": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsAllOf" + }, + "any_of": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsAnyOf" + }, + "fuzzy": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsFuzzy" + }, + "match": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsMatch" + }, + "prefix": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsPrefix" + }, + "wildcard": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsWildcard" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types.query_dsl:IntervalsAnyOf": { + "type": "object", + "properties": { + "intervals": { + "description": "An array of rules to match.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + } + }, + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsFilter" + } + }, + "required": [ + "intervals" + ] + }, + "_types.query_dsl:IntervalsFilter": { + "type": "object", + "properties": { + "after": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "before": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "contained_by": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "containing": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "not_contained_by": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "not_containing": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "not_overlapping": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "overlapping": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types.query_dsl:IntervalsFuzzy": { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to normalize the term.", + "type": "string" + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "prefix_length": { + "description": "Number of beginning characters left unchanged when creating expansions.", + "type": "number" + }, + "term": { + "description": "The term to match.", + "type": "string" + }, + "transpositions": { + "description": "Indicates whether edits include transpositions of two adjacent characters (for example, `ab` to `ba`).", + "type": "boolean" + }, + "use_field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "term" + ] + }, + "_types.query_dsl:IntervalsMatch": { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to analyze terms in the query.", + "type": "string" + }, + "max_gaps": { + "description": "Maximum number of positions between the matching terms.\nTerms further apart than this are not considered matches.", + "type": "number" + }, + "ordered": { + "description": "If `true`, matching terms must appear in their specified order.", + "type": "boolean" + }, + "query": { + "description": "Text you wish to find in the provided field.", + "type": "string" + }, + "use_field": { + "$ref": "#/components/schemas/_types:Field" + }, + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsFilter" + } + }, + "required": [ + "query" + ] + }, + "_types.query_dsl:IntervalsPrefix": { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to analyze the `prefix`.", + "type": "string" + }, + "prefix": { + "description": "Beginning characters of terms you wish to find in the top-level field.", + "type": "string" + }, + "use_field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "prefix" + ] + }, + "_types.query_dsl:IntervalsWildcard": { + "type": "object", + "properties": { + "analyzer": { + "description": "Analyzer used to analyze the `pattern`.\nDefaults to the top-level field's analyzer.", + "type": "string" + }, + "pattern": { + "description": "Wildcard pattern used to find matching terms.", + "type": "string" + }, + "use_field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "pattern" + ] + }, + "_types:KnnQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "query_vector": { + "$ref": "#/components/schemas/_types:QueryVector" + }, + "query_vector_builder": { + "$ref": "#/components/schemas/_types:QueryVectorBuilder" + }, + "num_candidates": { + "description": "The number of nearest neighbor candidates to consider per shard", + "type": "number" + }, + "filter": { + "description": "Filters for the kNN search query", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + } + ] + }, + "similarity": { + "description": "The minimum similarity for a vector to be considered a match", + "type": "number" + } + }, + "required": [ + "field" + ] + } + ] + }, + "_types:QueryVector": { + "type": "array", + "items": { + "type": "number" + } + }, + "_types:QueryVectorBuilder": { + "type": "object", + "properties": { + "text_embedding": { + "$ref": "#/components/schemas/_types:TextEmbedding" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types:TextEmbedding": { + "type": "object", + "properties": { + "model_id": { + "type": "string" + }, + "model_text": { + "type": "string" + } + }, + "required": [ + "model_id", + "model_text" + ] + }, + "_types.query_dsl:MatchQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert the text in the query value into tokens.", + "type": "string" + }, + "auto_generate_synonyms_phrase_query": { + "description": "If `true`, match phrase queries are automatically created for multi-term synonyms.", + "type": "boolean" + }, + "cutoff_frequency": { + "deprecated": true, + "type": "number" + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "fuzzy_rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "fuzzy_transpositions": { + "description": "If `true`, edits for fuzzy matching include transpositions of two adjacent characters (for example, `ab` to `ba`).", + "type": "boolean" + }, + "lenient": { + "description": "If `true`, format-based errors, such as providing a text query value for a numeric field, are ignored.", + "type": "boolean" + }, + "max_expansions": { + "description": "Maximum number of terms to which the query will expand.", + "type": "number" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "prefix_length": { + "description": "Number of beginning characters left unchanged for fuzzy matching.", + "type": "number" + }, + "query": { + "description": "Text, number, boolean value or date you wish to find in the provided field.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ] + }, + "zero_terms_query": { + "$ref": "#/components/schemas/_types.query_dsl:ZeroTermsQuery" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:ZeroTermsQuery": { + "type": "string", + "enum": [ + "all", + "none" + ] + }, + "_types.query_dsl:MatchAllQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:MatchBoolPrefixQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert the text in the query value into tokens.", + "type": "string" + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "fuzzy_rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "fuzzy_transpositions": { + "description": "If `true`, edits for fuzzy matching include transpositions of two adjacent characters (for example, `ab` to `ba`).\nCan be applied to the term subqueries constructed for all terms but the final term.", + "type": "boolean" + }, + "max_expansions": { + "description": "Maximum number of terms to which the query will expand.\nCan be applied to the term subqueries constructed for all terms but the final term.", + "type": "number" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "prefix_length": { + "description": "Number of beginning characters left unchanged for fuzzy matching.\nCan be applied to the term subqueries constructed for all terms but the final term.", + "type": "number" + }, + "query": { + "description": "Terms you wish to find in the provided field.\nThe last term is used in a prefix query.", + "type": "string" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:MatchNoneQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:MatchPhraseQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert the text in the query value into tokens.", + "type": "string" + }, + "query": { + "description": "Query terms that are analyzed and turned into a phrase query.", + "type": "string" + }, + "slop": { + "description": "Maximum number of positions allowed between matching tokens.", + "type": "number" + }, + "zero_terms_query": { + "$ref": "#/components/schemas/_types.query_dsl:ZeroTermsQuery" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:MatchPhrasePrefixQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert text in the query value into tokens.", + "type": "string" + }, + "max_expansions": { + "description": "Maximum number of terms to which the last provided term of the query value will expand.", + "type": "number" + }, + "query": { + "description": "Text you wish to find in the provided field.", + "type": "string" + }, + "slop": { + "description": "Maximum number of positions allowed between matching tokens.", + "type": "number" + }, + "zero_terms_query": { + "$ref": "#/components/schemas/_types.query_dsl:ZeroTermsQuery" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:MoreLikeThisQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "The analyzer that is used to analyze the free form text.\nDefaults to the analyzer associated with the first field in fields.", + "type": "string" + }, + "boost_terms": { + "description": "Each term in the formed query could be further boosted by their tf-idf score.\nThis sets the boost factor to use when using this feature.\nDefaults to deactivated (0).", + "type": "number" + }, + "fail_on_unsupported_field": { + "description": "Controls whether the query should fail (throw an exception) if any of the specified fields are not of the supported types (`text` or `keyword`).", + "type": "boolean" + }, + "fields": { + "description": "A list of fields to fetch and analyze the text from.\nDefaults to the `index.query.default_field` index setting, which has a default value of `*`.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "include": { + "description": "Specifies whether the input documents should also be included in the search results returned.", + "type": "boolean" + }, + "like": { + "description": "Specifies free form text and/or a single or multiple documents for which you want to find similar documents.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:Like" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:Like" + } + } + ] + }, + "max_doc_freq": { + "description": "The maximum document frequency above which the terms are ignored from the input document.", + "type": "number" + }, + "max_query_terms": { + "description": "The maximum number of query terms that can be selected.", + "type": "number" + }, + "max_word_length": { + "description": "The maximum word length above which the terms are ignored.\nDefaults to unbounded (`0`).", + "type": "number" + }, + "min_doc_freq": { + "description": "The minimum document frequency below which the terms are ignored from the input document.", + "type": "number" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "min_term_freq": { + "description": "The minimum term frequency below which the terms are ignored from the input document.", + "type": "number" + }, + "min_word_length": { + "description": "The minimum word length below which the terms are ignored.", + "type": "number" + }, + "routing": { + "$ref": "#/components/schemas/_types:Routing" + }, + "stop_words": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + }, + "unlike": { + "description": "Used in combination with `like` to exclude documents that match a set of terms.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:Like" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:Like" + } + } + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionNumber" + }, + "version_type": { + "$ref": "#/components/schemas/_types:VersionType" + } + }, + "required": [ + "like" + ] + } + ] + }, + "_types.query_dsl:Like": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-mlt-query.html#_document_input_parameters" + }, + "description": "Text that we want similar documents for or a lookup to a document's field for the text.", + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:LikeDocument" + } + ] + }, + "_types.query_dsl:LikeDocument": { + "type": "object", + "properties": { + "doc": { + "description": "A document not present in the index.", + "type": "object" + }, + "fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "_id": { + "$ref": "#/components/schemas/_types:Id" + }, + "_index": { + "$ref": "#/components/schemas/_types:IndexName" + }, + "per_field_analyzer": { + "description": "Overrides the default analyzer.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "routing": { + "$ref": "#/components/schemas/_types:Routing" + }, + "version": { + "$ref": "#/components/schemas/_types:VersionNumber" + }, + "version_type": { + "$ref": "#/components/schemas/_types:VersionType" + } + } + }, + "_types:Routing": { + "type": "string" + }, + "_types:VersionNumber": { + "type": "number" + }, + "_types:VersionType": { + "type": "string", + "enum": [ + "internal", + "external", + "external_gte", + "force" + ] + }, + "_types.query_dsl:MultiMatchQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert the text in the query value into tokens.", + "type": "string" + }, + "auto_generate_synonyms_phrase_query": { + "description": "If `true`, match phrase queries are automatically created for multi-term synonyms.", + "type": "boolean" + }, + "cutoff_frequency": { + "deprecated": true, + "type": "number" + }, + "fields": { + "$ref": "#/components/schemas/_types:Fields" + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "fuzzy_rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "fuzzy_transpositions": { + "description": "If `true`, edits for fuzzy matching include transpositions of two adjacent characters (for example, `ab` to `ba`).\nCan be applied to the term subqueries constructed for all terms but the final term.", + "type": "boolean" + }, + "lenient": { + "description": "If `true`, format-based errors, such as providing a text query value for a numeric field, are ignored.", + "type": "boolean" + }, + "max_expansions": { + "description": "Maximum number of terms to which the query will expand.", + "type": "number" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "prefix_length": { + "description": "Number of beginning characters left unchanged for fuzzy matching.", + "type": "number" + }, + "query": { + "description": "Text, number, boolean value or date you wish to find in the provided field.", + "type": "string" + }, + "slop": { + "description": "Maximum number of positions allowed between matching tokens.", + "type": "number" + }, + "tie_breaker": { + "description": "Determines how scores for each per-term blended query and scores across groups are combined.", + "type": "number" + }, + "type": { + "$ref": "#/components/schemas/_types.query_dsl:TextQueryType" + }, + "zero_terms_query": { + "$ref": "#/components/schemas/_types.query_dsl:ZeroTermsQuery" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:TextQueryType": { + "type": "string", + "enum": [ + "best_fields", + "most_fields", + "cross_fields", + "phrase", + "phrase_prefix", + "bool_prefix" + ] + }, + "_types.query_dsl:NestedQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "ignore_unmapped": { + "description": "Indicates whether to ignore an unmapped path and not return any documents instead of an error.", + "type": "boolean" + }, + "inner_hits": { + "$ref": "#/components/schemas/_global.search._types:InnerHits" + }, + "path": { + "$ref": "#/components/schemas/_types:Field" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "score_mode": { + "$ref": "#/components/schemas/_types.query_dsl:ChildScoreMode" + } + }, + "required": [ + "path", + "query" + ] + } + ] + }, + "_types.query_dsl:ParentIdQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/_types:Id" + }, + "ignore_unmapped": { + "description": "Indicates whether to ignore an unmapped `type` and not return any documents instead of an error.", + "type": "boolean" + }, + "type": { + "$ref": "#/components/schemas/_types:RelationName" + } + } + } + ] + }, + "_types.query_dsl:PercolateQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "document": { + "description": "The source of the document being percolated.", + "type": "object" + }, + "documents": { + "description": "An array of sources of the documents being percolated.", + "type": "array", + "items": { + "type": "object" + } + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "id": { + "$ref": "#/components/schemas/_types:Id" + }, + "index": { + "$ref": "#/components/schemas/_types:IndexName" + }, + "name": { + "description": "The suffix used for the `_percolator_document_slot` field when multiple `percolate` queries are specified.", + "type": "string" + }, + "preference": { + "description": "Preference used to fetch document to percolate.", + "type": "string" + }, + "routing": { + "$ref": "#/components/schemas/_types:Routing" + }, + "version": { + "$ref": "#/components/schemas/_types:VersionNumber" + } + }, + "required": [ + "field" + ] + } + ] + }, + "_types.query_dsl:PinnedQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "allOf": [ + { + "type": "object", + "properties": { + "organic": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "required": [ + "organic" + ] + }, + { + "type": "object", + "properties": { + "ids": { + "description": "Document IDs listed in the order they are to appear in results.\nRequired if `docs` is not specified.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Id" + } + }, + "docs": { + "description": "Documents listed in the order they are to appear in results.\nRequired if `ids` is not specified.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:PinnedDoc" + } + } + }, + "minProperties": 1, + "maxProperties": 1 + } + ] + } + ] + }, + "_types.query_dsl:PinnedDoc": { + "type": "object", + "properties": { + "_id": { + "$ref": "#/components/schemas/_types:Id" + }, + "_index": { + "$ref": "#/components/schemas/_types:IndexName" + } + }, + "required": [ + "_id", + "_index" + ] + }, + "_types.query_dsl:PrefixQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "value": { + "description": "Beginning characters of terms you wish to find in the provided field.", + "type": "string" + }, + "case_insensitive": { + "description": "Allows ASCII case insensitive matching of the value with the indexed field values when set to `true`.\nDefault is `false` which means the case sensitivity of matching depends on the underlying field’s mapping.", + "type": "boolean" + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types.query_dsl:QueryStringQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "allow_leading_wildcard": { + "description": "If `true`, the wildcard characters `*` and `?` are allowed as the first character of the query string.", + "type": "boolean" + }, + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert text in the query string into tokens.", + "type": "string" + }, + "analyze_wildcard": { + "description": "If `true`, the query attempts to analyze wildcard terms in the query string.", + "type": "boolean" + }, + "auto_generate_synonyms_phrase_query": { + "description": "If `true`, match phrase queries are automatically created for multi-term synonyms.", + "type": "boolean" + }, + "default_field": { + "$ref": "#/components/schemas/_types:Field" + }, + "default_operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "enable_position_increments": { + "description": "If `true`, enable position increments in queries constructed from a `query_string` search.", + "type": "boolean" + }, + "escape": { + "type": "boolean" + }, + "fields": { + "description": "Array of fields to search. Supports wildcards (`*`).", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "fuzzy_max_expansions": { + "description": "Maximum number of terms to which the query expands for fuzzy matching.", + "type": "number" + }, + "fuzzy_prefix_length": { + "description": "Number of beginning characters left unchanged for fuzzy matching.", + "type": "number" + }, + "fuzzy_rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "fuzzy_transpositions": { + "description": "If `true`, edits for fuzzy matching include transpositions of two adjacent characters (for example, `ab` to `ba`).", + "type": "boolean" + }, + "lenient": { + "description": "If `true`, format-based errors, such as providing a text value for a numeric field, are ignored.", + "type": "boolean" + }, + "max_determinized_states": { + "description": "Maximum number of automaton states required for the query.", + "type": "number" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "phrase_slop": { + "description": "Maximum number of positions allowed between matching tokens for phrases.", + "type": "number" + }, + "query": { + "description": "Query string you wish to parse and use for search.", + "type": "string" + }, + "quote_analyzer": { + "description": "Analyzer used to convert quoted text in the query string into tokens.\nFor quoted text, this parameter overrides the analyzer specified in the `analyzer` parameter.", + "type": "string" + }, + "quote_field_suffix": { + "description": "Suffix appended to quoted text in the query string.\nYou can use this suffix to use a different analysis method for exact matches.", + "type": "string" + }, + "rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "tie_breaker": { + "description": "How to combine the queries generated from the individual search terms in the resulting `dis_max` query.", + "type": "number" + }, + "time_zone": { + "$ref": "#/components/schemas/_types:TimeZone" + }, + "type": { + "$ref": "#/components/schemas/_types.query_dsl:TextQueryType" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types:TimeZone": { + "type": "string" + }, + "_types.query_dsl:RangeQuery": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DateRangeQuery" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:NumberRangeQuery" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:TermsRangeQuery" + } + ] + }, + "_types.query_dsl:DateRangeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RangeQueryBase" + }, + { + "type": "object", + "properties": { + "gt": { + "$ref": "#/components/schemas/_types:DateMath" + }, + "gte": { + "$ref": "#/components/schemas/_types:DateMath" + }, + "lt": { + "$ref": "#/components/schemas/_types:DateMath" + }, + "lte": { + "$ref": "#/components/schemas/_types:DateMath" + }, + "from": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:DateMath" + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "to": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:DateMath" + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "format": { + "$ref": "#/components/schemas/_types:DateFormat" + }, + "time_zone": { + "$ref": "#/components/schemas/_types:TimeZone" + } + } + } + ] + }, + "_types.query_dsl:RangeQueryBase": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "relation": { + "$ref": "#/components/schemas/_types.query_dsl:RangeRelation" + } + } + } + ] + }, + "_types.query_dsl:RangeRelation": { + "type": "string", + "enum": [ + "within", + "contains", + "intersects" + ] + }, + "_types:DateFormat": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html" + }, + "type": "string" + }, + "_types.query_dsl:NumberRangeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RangeQueryBase" + }, + { + "type": "object", + "properties": { + "gt": { + "description": "Greater than.", + "type": "number" + }, + "gte": { + "description": "Greater than or equal to.", + "type": "number" + }, + "lt": { + "description": "Less than.", + "type": "number" + }, + "lte": { + "description": "Less than or equal to.", + "type": "number" + }, + "from": { + "oneOf": [ + { + "type": "number" + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "to": { + "oneOf": [ + { + "type": "number" + }, + { + "nullable": true, + "type": "string" + } + ] + } + } + } + ] + }, + "_types.query_dsl:TermsRangeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RangeQueryBase" + }, + { + "type": "object", + "properties": { + "gt": { + "description": "Greater than.", + "type": "string" + }, + "gte": { + "description": "Greater than or equal to.", + "type": "string" + }, + "lt": { + "description": "Less than.", + "type": "string" + }, + "lte": { + "description": "Less than or equal to.", + "type": "string" + }, + "from": { + "oneOf": [ + { + "type": "string" + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "to": { + "oneOf": [ + { + "type": "string" + }, + { + "nullable": true, + "type": "string" + } + ] + } + } + } + ] + }, + "_types.query_dsl:RankFeatureQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "saturation": { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunctionSaturation" + }, + "log": { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunctionLogarithm" + }, + "linear": { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunctionLinear" + }, + "sigmoid": { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunctionSigmoid" + } + }, + "required": [ + "field" + ] + } + ] + }, + "_types.query_dsl:RankFeatureFunctionSaturation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunction" + }, + { + "type": "object", + "properties": { + "pivot": { + "description": "Configurable pivot value so that the result will be less than 0.5.", + "type": "number" + } + } + } + ] + }, + "_types.query_dsl:RankFeatureFunction": { + "type": "object" + }, + "_types.query_dsl:RankFeatureFunctionLogarithm": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunction" + }, + { + "type": "object", + "properties": { + "scaling_factor": { + "description": "Configurable scaling factor.", + "type": "number" + } + }, + "required": [ + "scaling_factor" + ] + } + ] + }, + "_types.query_dsl:RankFeatureFunctionLinear": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunction" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:RankFeatureFunctionSigmoid": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunction" + }, + { + "type": "object", + "properties": { + "pivot": { + "description": "Configurable pivot value so that the result will be less than 0.5.", + "type": "number" + }, + "exponent": { + "description": "Configurable Exponent.", + "type": "number" + } + }, + "required": [ + "pivot", + "exponent" + ] + } + ] + }, + "_types.query_dsl:RegexpQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "case_insensitive": { + "description": "Allows case insensitive matching of the regular expression value with the indexed field values when set to `true`.\nWhen `false`, case sensitivity of matching depends on the underlying field’s mapping.", + "type": "boolean" + }, + "flags": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/regexp-syntax.html" + }, + "description": "Enables optional operators for the regular expression.", + "type": "string" + }, + "max_determinized_states": { + "description": "Maximum number of automaton states required for the query.", + "type": "number" + }, + "rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "value": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/regexp-syntax.html" + }, + "description": "Regular expression for terms you wish to find in the provided field.", + "type": "string" + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types.query_dsl:RuleQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "organic": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "ruleset_id": { + "$ref": "#/components/schemas/_types:Id" + }, + "match_criteria": { + "type": "object" + } + }, + "required": [ + "organic", + "ruleset_id", + "match_criteria" + ] + } + ] + }, + "_types.query_dsl:ScriptQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "script": { + "$ref": "#/components/schemas/_types:Script" + } + }, + "required": [ + "script" + ] + } + ] + }, + "_types.query_dsl:ScriptScoreQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "min_score": { + "description": "Documents with a score lower than this floating point number are excluded from the search results.", + "type": "number" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + } + }, + "required": [ + "query", + "script" + ] + } + ] + }, + "_types.query_dsl:ShapeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "ignore_unmapped": { + "description": "When set to `true` the query ignores an unmapped field and will not match any documents.", + "type": "boolean" + } + } + } + ] + }, + "_types.query_dsl:SimpleQueryStringQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert text in the query string into tokens.", + "type": "string" + }, + "analyze_wildcard": { + "description": "If `true`, the query attempts to analyze wildcard terms in the query string.", + "type": "boolean" + }, + "auto_generate_synonyms_phrase_query": { + "description": "If `true`, the parser creates a match_phrase query for each multi-position token.", + "type": "boolean" + }, + "default_operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "fields": { + "description": "Array of fields you wish to search.\nAccepts wildcard expressions.\nYou also can boost relevance scores for matches to particular fields using a caret (`^`) notation.\nDefaults to the `index.query.default_field index` setting, which has a default value of `*`.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "flags": { + "$ref": "#/components/schemas/_types.query_dsl:SimpleQueryStringFlags" + }, + "fuzzy_max_expansions": { + "description": "Maximum number of terms to which the query expands for fuzzy matching.", + "type": "number" + }, + "fuzzy_prefix_length": { + "description": "Number of beginning characters left unchanged for fuzzy matching.", + "type": "number" + }, + "fuzzy_transpositions": { + "description": "If `true`, edits for fuzzy matching include transpositions of two adjacent characters (for example, `ab` to `ba`).", + "type": "boolean" + }, + "lenient": { + "description": "If `true`, format-based errors, such as providing a text value for a numeric field, are ignored.", + "type": "boolean" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "query": { + "description": "Query string in the simple query string syntax you wish to parse and use for search.", + "type": "string" + }, + "quote_field_suffix": { + "description": "Suffix appended to quoted text in the query string.", + "type": "string" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:SimpleQueryStringFlags": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-simple-query-string-query.html#supported-flags" + }, + "description": "Query flags can be either a single flag or a combination of flags, e.g. `OR|AND|PREFIX`", + "allOf": [ + { + "$ref": "#/components/schemas/_spec_utils:PipeSeparatedFlagsSimpleQueryStringFlag" + } + ] + }, + "_spec_utils:PipeSeparatedFlagsSimpleQueryStringFlag": { + "description": "A set of flags that can be represented as a single enum value or a set of values that are encoded\nas a pipe-separated string\n\nDepending on the target language, code generators can use this hint to generate language specific\nflags enum constructs and the corresponding (de-)serialization code.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:SimpleQueryStringFlag" + }, + { + "type": "string" + } + ] + }, + "_types.query_dsl:SimpleQueryStringFlag": { + "type": "string", + "enum": [ + "NONE", + "AND", + "NOT", + "OR", + "PREFIX", + "PHRASE", + "PRECEDENCE", + "ESCAPE", + "WHITESPACE", + "FUZZY", + "NEAR", + "SLOP", + "ALL" + ] + }, + "_types.query_dsl:SpanContainingQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "big": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + }, + "little": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + }, + "required": [ + "big", + "little" + ] + } + ] + }, + "_types.query_dsl:SpanQuery": { + "type": "object", + "properties": { + "span_containing": { + "$ref": "#/components/schemas/_types.query_dsl:SpanContainingQuery" + }, + "field_masking_span": { + "$ref": "#/components/schemas/_types.query_dsl:SpanFieldMaskingQuery" + }, + "span_first": { + "$ref": "#/components/schemas/_types.query_dsl:SpanFirstQuery" + }, + "span_gap": { + "$ref": "#/components/schemas/_types.query_dsl:SpanGapQuery" + }, + "span_multi": { + "$ref": "#/components/schemas/_types.query_dsl:SpanMultiTermQuery" + }, + "span_near": { + "$ref": "#/components/schemas/_types.query_dsl:SpanNearQuery" + }, + "span_not": { + "$ref": "#/components/schemas/_types.query_dsl:SpanNotQuery" + }, + "span_or": { + "$ref": "#/components/schemas/_types.query_dsl:SpanOrQuery" + }, + "span_term": { + "description": "The equivalent of the `term` query but for use with other span queries.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:SpanTermQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "span_within": { + "$ref": "#/components/schemas/_types.query_dsl:SpanWithinQuery" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types.query_dsl:SpanFieldMaskingQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + }, + "required": [ + "field", + "query" + ] + } + ] + }, + "_types.query_dsl:SpanFirstQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "end": { + "description": "Controls the maximum end position permitted in a match.", + "type": "number" + }, + "match": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + }, + "required": [ + "end", + "match" + ] + } + ] + }, + "_types.query_dsl:SpanGapQuery": { + "description": "Can only be used as a clause in a span_near query.", + "type": "object", + "additionalProperties": { + "type": "number" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types.query_dsl:SpanMultiTermQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "match": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "required": [ + "match" + ] + } + ] + }, + "_types.query_dsl:SpanNearQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "clauses": { + "description": "Array of one or more other span type queries.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + }, + "in_order": { + "description": "Controls whether matches are required to be in-order.", + "type": "boolean" + }, + "slop": { + "description": "Controls the maximum number of intervening unmatched positions permitted.", + "type": "number" + } + }, + "required": [ + "clauses" + ] + } + ] + }, + "_types.query_dsl:SpanNotQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "dist": { + "description": "The number of tokens from within the include span that can’t have overlap with the exclude span.\nEquivalent to setting both `pre` and `post`.", + "type": "number" + }, + "exclude": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + }, + "include": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + }, + "post": { + "description": "The number of tokens after the include span that can’t have overlap with the exclude span.", + "type": "number" + }, + "pre": { + "description": "The number of tokens before the include span that can’t have overlap with the exclude span.", + "type": "number" + } + }, + "required": [ + "exclude", + "include" + ] + } + ] + }, + "_types.query_dsl:SpanOrQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "clauses": { + "description": "Array of one or more other span type queries.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + } + }, + "required": [ + "clauses" + ] + } + ] + }, + "_types.query_dsl:SpanTermQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types.query_dsl:SpanWithinQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "big": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + }, + "little": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + }, + "required": [ + "big", + "little" + ] + } + ] + }, + "_types.query_dsl:TermQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/_types:FieldValue" + }, + "case_insensitive": { + "description": "Allows ASCII case insensitive matching of the value with the indexed field values when set to `true`.\nWhen `false`, the case sensitivity of matching depends on the underlying field’s mapping.", + "type": "boolean" + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types:FieldValue": { + "description": "A field value.", + "oneOf": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "nullable": true, + "type": "string" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:TermsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:TermsSetQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "minimum_should_match_field": { + "$ref": "#/components/schemas/_types:Field" + }, + "minimum_should_match_script": { + "$ref": "#/components/schemas/_types:Script" + }, + "terms": { + "description": "Array of terms you wish to find in the provided field.", + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "terms" + ] + } + ] + }, + "_types.query_dsl:TextExpansionQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "model_id": { + "description": "The text expansion NLP model to use", + "type": "string" + }, + "model_text": { + "description": "The query text", + "type": "string" + }, + "pruning_config": { + "$ref": "#/components/schemas/_types.query_dsl:TokenPruningConfig" + } + }, + "required": [ + "model_id", + "model_text" + ] + } + ] + }, + "_types.query_dsl:TokenPruningConfig": { + "type": "object", + "properties": { + "tokens_freq_ratio_threshold": { + "description": "Tokens whose frequency is more than this threshold times the average frequency of all tokens in the specified field are considered outliers and pruned.", + "type": "number" + }, + "tokens_weight_threshold": { + "description": "Tokens whose weight is less than this threshold are considered nonsignificant and pruned.", + "type": "number" + }, + "only_score_pruned_tokens": { + "description": "Whether to only score pruned tokens, vs only scoring kept tokens.", + "type": "boolean" + } + } + }, + "_types.query_dsl:WeightedTokensQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "tokens": { + "description": "The tokens representing this query", + "type": "object", + "additionalProperties": { + "type": "number" + } + }, + "pruning_config": { + "$ref": "#/components/schemas/_types.query_dsl:TokenPruningConfig" + } + }, + "required": [ + "tokens" + ] + } + ] + }, + "_types.query_dsl:WildcardQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "case_insensitive": { + "description": "Allows case insensitive matching of the pattern with the indexed field values when set to true. Default is false which means the case sensitivity of matching depends on the underlying field’s mapping.", + "type": "boolean" + }, + "rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "value": { + "description": "Wildcard pattern for terms you wish to find in the provided field. Required, when wildcard is not set.", + "type": "string" + }, + "wildcard": { + "description": "Wildcard pattern for terms you wish to find in the provided field. Required, when value is not set.", + "type": "string" + } + } + } + ] + }, + "_types.query_dsl:WrapperQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "query": { + "description": "A base64 encoded query.\nThe binary data format can be any of JSON, YAML, CBOR or SMILE encodings", + "type": "string" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:TypeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types.mapping:RuntimeFields": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.mapping:RuntimeField" + } + }, + "_types.mapping:RuntimeField": { + "type": "object", + "properties": { + "fetch_fields": { + "description": "For type `lookup`", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.mapping:RuntimeFieldFetchFields" + } + }, + "format": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html" + }, + "description": "A custom format for `date` type runtime fields.", + "type": "string" + }, + "input_field": { + "$ref": "#/components/schemas/_types:Field" + }, + "target_field": { + "$ref": "#/components/schemas/_types:Field" + }, + "target_index": { + "$ref": "#/components/schemas/_types:IndexName" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "type": { + "$ref": "#/components/schemas/_types.mapping:RuntimeFieldType" + } + }, + "required": [ + "type" + ] + }, + "_types.mapping:RuntimeFieldFetchFields": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "format": { + "type": "string" + } + }, + "required": [ + "field" + ] + }, + "_types.mapping:RuntimeFieldType": { + "type": "string", + "enum": [ + "boolean", + "composite", + "date", + "double", + "geo_point", + "ip", + "keyword", + "long", + "lookup" + ] + }, + "_types:HttpHeaders": { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + } + } + } + } +} \ No newline at end of file diff --git a/x-pack/packages/ml/json_schemas/src/put___ml_datafeeds__datafeed_id__schema.json b/x-pack/packages/ml/json_schemas/src/put___ml_datafeeds__datafeed_id__schema.json new file mode 100644 index 0000000000000..575411eb3a8c2 --- /dev/null +++ b/x-pack/packages/ml/json_schemas/src/put___ml_datafeeds__datafeed_id__schema.json @@ -0,0 +1,8054 @@ +{ + "type": "object", + "properties": { + "aggregations": { + "description": "If set, the datafeed performs aggregation searches.\nSupport for aggregations is limited and should be used only with low cardinality data.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.aggregations:AggregationContainer" + } + }, + "chunking_config": { + "$ref": "#/components/schemas/ml._types:ChunkingConfig" + }, + "delayed_data_check_config": { + "$ref": "#/components/schemas/ml._types:DelayedDataCheckConfig" + }, + "frequency": { + "$ref": "#/components/schemas/_types:Duration" + }, + "indices": { + "$ref": "#/components/schemas/_types:Indices" + }, + "indices_options": { + "$ref": "#/components/schemas/_types:IndicesOptions" + }, + "job_id": { + "$ref": "#/components/schemas/_types:Id" + }, + "max_empty_searches": { + "description": "If a real-time datafeed has never seen any data (including during any initial training period), it automatically\nstops and closes the associated job after this many real-time searches return no documents. In other words,\nit stops after `frequency` times `max_empty_searches` of real-time operation. If not set, a datafeed with no\nend time that sees no data remains started until it is explicitly stopped. By default, it is not set.", + "type": "number" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "query_delay": { + "$ref": "#/components/schemas/_types:Duration" + }, + "runtime_mappings": { + "$ref": "#/components/schemas/_types.mapping:RuntimeFields" + }, + "script_fields": { + "description": "Specifies scripts that evaluate custom expressions and returns script fields to the datafeed.\nThe detector configuration objects in a job can contain functions that use these script fields.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types:ScriptField" + } + }, + "scroll_size": { + "description": "The size parameter that is used in Elasticsearch searches when the datafeed does not use aggregations.\nThe maximum value is the value of `index.max_result_window`, which is 10,000 by default.", + "type": "number" + }, + "headers": { + "$ref": "#/components/schemas/_types:HttpHeaders" + }, + "datafeed_id": { + "type": "string" + } + }, + "components": { + "schemas": { + "_types.aggregations:AggregationContainer": { + "allOf": [ + { + "type": "object", + "properties": { + "aggregations": { + "description": "Sub-aggregations for this aggregation.\nOnly applies to bucket aggregations.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.aggregations:AggregationContainer" + } + }, + "meta": { + "$ref": "#/components/schemas/_types:Metadata" + } + } + }, + { + "type": "object", + "properties": { + "adjacency_matrix": { + "$ref": "#/components/schemas/_types.aggregations:AdjacencyMatrixAggregation" + }, + "auto_date_histogram": { + "$ref": "#/components/schemas/_types.aggregations:AutoDateHistogramAggregation" + }, + "avg": { + "$ref": "#/components/schemas/_types.aggregations:AverageAggregation" + }, + "avg_bucket": { + "$ref": "#/components/schemas/_types.aggregations:AverageBucketAggregation" + }, + "boxplot": { + "$ref": "#/components/schemas/_types.aggregations:BoxplotAggregation" + }, + "bucket_script": { + "$ref": "#/components/schemas/_types.aggregations:BucketScriptAggregation" + }, + "bucket_selector": { + "$ref": "#/components/schemas/_types.aggregations:BucketSelectorAggregation" + }, + "bucket_sort": { + "$ref": "#/components/schemas/_types.aggregations:BucketSortAggregation" + }, + "bucket_count_ks_test": { + "$ref": "#/components/schemas/_types.aggregations:BucketKsAggregation" + }, + "bucket_correlation": { + "$ref": "#/components/schemas/_types.aggregations:BucketCorrelationAggregation" + }, + "cardinality": { + "$ref": "#/components/schemas/_types.aggregations:CardinalityAggregation" + }, + "categorize_text": { + "$ref": "#/components/schemas/_types.aggregations:CategorizeTextAggregation" + }, + "children": { + "$ref": "#/components/schemas/_types.aggregations:ChildrenAggregation" + }, + "composite": { + "$ref": "#/components/schemas/_types.aggregations:CompositeAggregation" + }, + "cumulative_cardinality": { + "$ref": "#/components/schemas/_types.aggregations:CumulativeCardinalityAggregation" + }, + "cumulative_sum": { + "$ref": "#/components/schemas/_types.aggregations:CumulativeSumAggregation" + }, + "date_histogram": { + "$ref": "#/components/schemas/_types.aggregations:DateHistogramAggregation" + }, + "date_range": { + "$ref": "#/components/schemas/_types.aggregations:DateRangeAggregation" + }, + "derivative": { + "$ref": "#/components/schemas/_types.aggregations:DerivativeAggregation" + }, + "diversified_sampler": { + "$ref": "#/components/schemas/_types.aggregations:DiversifiedSamplerAggregation" + }, + "extended_stats": { + "$ref": "#/components/schemas/_types.aggregations:ExtendedStatsAggregation" + }, + "extended_stats_bucket": { + "$ref": "#/components/schemas/_types.aggregations:ExtendedStatsBucketAggregation" + }, + "frequent_item_sets": { + "$ref": "#/components/schemas/_types.aggregations:FrequentItemSetsAggregation" + }, + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "filters": { + "$ref": "#/components/schemas/_types.aggregations:FiltersAggregation" + }, + "geo_bounds": { + "$ref": "#/components/schemas/_types.aggregations:GeoBoundsAggregation" + }, + "geo_centroid": { + "$ref": "#/components/schemas/_types.aggregations:GeoCentroidAggregation" + }, + "geo_distance": { + "$ref": "#/components/schemas/_types.aggregations:GeoDistanceAggregation" + }, + "geohash_grid": { + "$ref": "#/components/schemas/_types.aggregations:GeoHashGridAggregation" + }, + "geo_line": { + "$ref": "#/components/schemas/_types.aggregations:GeoLineAggregation" + }, + "geotile_grid": { + "$ref": "#/components/schemas/_types.aggregations:GeoTileGridAggregation" + }, + "geohex_grid": { + "$ref": "#/components/schemas/_types.aggregations:GeohexGridAggregation" + }, + "global": { + "$ref": "#/components/schemas/_types.aggregations:GlobalAggregation" + }, + "histogram": { + "$ref": "#/components/schemas/_types.aggregations:HistogramAggregation" + }, + "ip_range": { + "$ref": "#/components/schemas/_types.aggregations:IpRangeAggregation" + }, + "ip_prefix": { + "$ref": "#/components/schemas/_types.aggregations:IpPrefixAggregation" + }, + "inference": { + "$ref": "#/components/schemas/_types.aggregations:InferenceAggregation" + }, + "line": { + "$ref": "#/components/schemas/_types.aggregations:GeoLineAggregation" + }, + "matrix_stats": { + "$ref": "#/components/schemas/_types.aggregations:MatrixStatsAggregation" + }, + "max": { + "$ref": "#/components/schemas/_types.aggregations:MaxAggregation" + }, + "max_bucket": { + "$ref": "#/components/schemas/_types.aggregations:MaxBucketAggregation" + }, + "median_absolute_deviation": { + "$ref": "#/components/schemas/_types.aggregations:MedianAbsoluteDeviationAggregation" + }, + "min": { + "$ref": "#/components/schemas/_types.aggregations:MinAggregation" + }, + "min_bucket": { + "$ref": "#/components/schemas/_types.aggregations:MinBucketAggregation" + }, + "missing": { + "$ref": "#/components/schemas/_types.aggregations:MissingAggregation" + }, + "moving_avg": { + "$ref": "#/components/schemas/_types.aggregations:MovingAverageAggregation" + }, + "moving_percentiles": { + "$ref": "#/components/schemas/_types.aggregations:MovingPercentilesAggregation" + }, + "moving_fn": { + "$ref": "#/components/schemas/_types.aggregations:MovingFunctionAggregation" + }, + "multi_terms": { + "$ref": "#/components/schemas/_types.aggregations:MultiTermsAggregation" + }, + "nested": { + "$ref": "#/components/schemas/_types.aggregations:NestedAggregation" + }, + "normalize": { + "$ref": "#/components/schemas/_types.aggregations:NormalizeAggregation" + }, + "parent": { + "$ref": "#/components/schemas/_types.aggregations:ParentAggregation" + }, + "percentile_ranks": { + "$ref": "#/components/schemas/_types.aggregations:PercentileRanksAggregation" + }, + "percentiles": { + "$ref": "#/components/schemas/_types.aggregations:PercentilesAggregation" + }, + "percentiles_bucket": { + "$ref": "#/components/schemas/_types.aggregations:PercentilesBucketAggregation" + }, + "range": { + "$ref": "#/components/schemas/_types.aggregations:RangeAggregation" + }, + "rare_terms": { + "$ref": "#/components/schemas/_types.aggregations:RareTermsAggregation" + }, + "rate": { + "$ref": "#/components/schemas/_types.aggregations:RateAggregation" + }, + "reverse_nested": { + "$ref": "#/components/schemas/_types.aggregations:ReverseNestedAggregation" + }, + "sampler": { + "$ref": "#/components/schemas/_types.aggregations:SamplerAggregation" + }, + "scripted_metric": { + "$ref": "#/components/schemas/_types.aggregations:ScriptedMetricAggregation" + }, + "serial_diff": { + "$ref": "#/components/schemas/_types.aggregations:SerialDifferencingAggregation" + }, + "significant_terms": { + "$ref": "#/components/schemas/_types.aggregations:SignificantTermsAggregation" + }, + "significant_text": { + "$ref": "#/components/schemas/_types.aggregations:SignificantTextAggregation" + }, + "stats": { + "$ref": "#/components/schemas/_types.aggregations:StatsAggregation" + }, + "stats_bucket": { + "$ref": "#/components/schemas/_types.aggregations:StatsBucketAggregation" + }, + "string_stats": { + "$ref": "#/components/schemas/_types.aggregations:StringStatsAggregation" + }, + "sum": { + "$ref": "#/components/schemas/_types.aggregations:SumAggregation" + }, + "sum_bucket": { + "$ref": "#/components/schemas/_types.aggregations:SumBucketAggregation" + }, + "terms": { + "$ref": "#/components/schemas/_types.aggregations:TermsAggregation" + }, + "top_hits": { + "$ref": "#/components/schemas/_types.aggregations:TopHitsAggregation" + }, + "t_test": { + "$ref": "#/components/schemas/_types.aggregations:TTestAggregation" + }, + "top_metrics": { + "$ref": "#/components/schemas/_types.aggregations:TopMetricsAggregation" + }, + "value_count": { + "$ref": "#/components/schemas/_types.aggregations:ValueCountAggregation" + }, + "weighted_avg": { + "$ref": "#/components/schemas/_types.aggregations:WeightedAverageAggregation" + }, + "variable_width_histogram": { + "$ref": "#/components/schemas/_types.aggregations:VariableWidthHistogramAggregation" + } + }, + "minProperties": 1, + "maxProperties": 1 + } + ] + }, + "_types:Metadata": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "_types.aggregations:AdjacencyMatrixAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "filters": { + "description": "Filters used to create buckets.\nAt least one filter is required.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "separator": { + "description": "Separator used to concatenate filter names. Defaults to &.", + "type": "string" + } + } + } + ] + }, + "_types.aggregations:BucketAggregationBase": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:Aggregation" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:Aggregation": { + "type": "object" + }, + "_types.query_dsl:QueryContainer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html" + }, + "type": "object", + "properties": { + "bool": { + "$ref": "#/components/schemas/_types.query_dsl:BoolQuery" + }, + "boosting": { + "$ref": "#/components/schemas/_types.query_dsl:BoostingQuery" + }, + "common": { + "deprecated": true, + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:CommonTermsQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "combined_fields": { + "$ref": "#/components/schemas/_types.query_dsl:CombinedFieldsQuery" + }, + "constant_score": { + "$ref": "#/components/schemas/_types.query_dsl:ConstantScoreQuery" + }, + "dis_max": { + "$ref": "#/components/schemas/_types.query_dsl:DisMaxQuery" + }, + "distance_feature": { + "$ref": "#/components/schemas/_types.query_dsl:DistanceFeatureQuery" + }, + "exists": { + "$ref": "#/components/schemas/_types.query_dsl:ExistsQuery" + }, + "function_score": { + "$ref": "#/components/schemas/_types.query_dsl:FunctionScoreQuery" + }, + "fuzzy": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html" + }, + "description": "Returns documents that contain terms similar to the search term, as measured by a Levenshtein edit distance.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:FuzzyQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "geo_bounding_box": { + "$ref": "#/components/schemas/_types.query_dsl:GeoBoundingBoxQuery" + }, + "geo_distance": { + "$ref": "#/components/schemas/_types.query_dsl:GeoDistanceQuery" + }, + "geo_polygon": { + "$ref": "#/components/schemas/_types.query_dsl:GeoPolygonQuery" + }, + "geo_shape": { + "$ref": "#/components/schemas/_types.query_dsl:GeoShapeQuery" + }, + "has_child": { + "$ref": "#/components/schemas/_types.query_dsl:HasChildQuery" + }, + "has_parent": { + "$ref": "#/components/schemas/_types.query_dsl:HasParentQuery" + }, + "ids": { + "$ref": "#/components/schemas/_types.query_dsl:IdsQuery" + }, + "intervals": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-intervals-query.html" + }, + "description": "Returns documents based on the order and proximity of matching terms.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "knn": { + "$ref": "#/components/schemas/_types:KnnQuery" + }, + "match": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html" + }, + "description": "Returns documents that match a provided text, number, date or boolean value.\nThe provided text is analyzed before matching.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:MatchQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "match_all": { + "$ref": "#/components/schemas/_types.query_dsl:MatchAllQuery" + }, + "match_bool_prefix": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-bool-prefix-query.html" + }, + "description": "Analyzes its input and constructs a `bool` query from the terms.\nEach term except the last is used in a `term` query.\nThe last term is used in a prefix query.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:MatchBoolPrefixQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "match_none": { + "$ref": "#/components/schemas/_types.query_dsl:MatchNoneQuery" + }, + "match_phrase": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query-phrase.html" + }, + "description": "Analyzes the text and creates a phrase query out of the analyzed text.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:MatchPhraseQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "match_phrase_prefix": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query-phrase-prefix.html" + }, + "description": "Returns documents that contain the words of a provided text, in the same order as provided.\nThe last term of the provided text is treated as a prefix, matching any words that begin with that term.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:MatchPhrasePrefixQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "more_like_this": { + "$ref": "#/components/schemas/_types.query_dsl:MoreLikeThisQuery" + }, + "multi_match": { + "$ref": "#/components/schemas/_types.query_dsl:MultiMatchQuery" + }, + "nested": { + "$ref": "#/components/schemas/_types.query_dsl:NestedQuery" + }, + "parent_id": { + "$ref": "#/components/schemas/_types.query_dsl:ParentIdQuery" + }, + "percolate": { + "$ref": "#/components/schemas/_types.query_dsl:PercolateQuery" + }, + "pinned": { + "$ref": "#/components/schemas/_types.query_dsl:PinnedQuery" + }, + "prefix": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-prefix-query.html" + }, + "description": "Returns documents that contain a specific prefix in a provided field.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:PrefixQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "query_string": { + "$ref": "#/components/schemas/_types.query_dsl:QueryStringQuery" + }, + "range": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html" + }, + "description": "Returns documents that contain terms within a provided range.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:RangeQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "rank_feature": { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureQuery" + }, + "regexp": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html" + }, + "description": "Returns documents that contain terms matching a regular expression.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:RegexpQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "rule_query": { + "$ref": "#/components/schemas/_types.query_dsl:RuleQuery" + }, + "script": { + "$ref": "#/components/schemas/_types.query_dsl:ScriptQuery" + }, + "script_score": { + "$ref": "#/components/schemas/_types.query_dsl:ScriptScoreQuery" + }, + "shape": { + "$ref": "#/components/schemas/_types.query_dsl:ShapeQuery" + }, + "simple_query_string": { + "$ref": "#/components/schemas/_types.query_dsl:SimpleQueryStringQuery" + }, + "span_containing": { + "$ref": "#/components/schemas/_types.query_dsl:SpanContainingQuery" + }, + "field_masking_span": { + "$ref": "#/components/schemas/_types.query_dsl:SpanFieldMaskingQuery" + }, + "span_first": { + "$ref": "#/components/schemas/_types.query_dsl:SpanFirstQuery" + }, + "span_multi": { + "$ref": "#/components/schemas/_types.query_dsl:SpanMultiTermQuery" + }, + "span_near": { + "$ref": "#/components/schemas/_types.query_dsl:SpanNearQuery" + }, + "span_not": { + "$ref": "#/components/schemas/_types.query_dsl:SpanNotQuery" + }, + "span_or": { + "$ref": "#/components/schemas/_types.query_dsl:SpanOrQuery" + }, + "span_term": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-span-term-query.html" + }, + "description": "Matches spans containing a term.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:SpanTermQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "span_within": { + "$ref": "#/components/schemas/_types.query_dsl:SpanWithinQuery" + }, + "term": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html" + }, + "description": "Returns documents that contain an exact term in a provided field.\nTo return a document, the query term must exactly match the queried field's value, including whitespace and capitalization.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:TermQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "terms": { + "$ref": "#/components/schemas/_types.query_dsl:TermsQuery" + }, + "terms_set": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-set-query.html" + }, + "description": "Returns documents that contain a minimum number of exact terms in a provided field.\nTo return a document, a required number of terms must exactly match the field values, including whitespace and capitalization.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:TermsSetQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "text_expansion": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-text-expansion-query.html" + }, + "description": "Uses a natural language processing model to convert the query text into a list of token-weight pairs which are then used in a query against a sparse vector or rank features field.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:TextExpansionQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "weighted_tokens": { + "description": "Supports returning text_expansion query results by sending in precomputed tokens with the query.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:WeightedTokensQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "wildcard": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html" + }, + "description": "Returns documents that contain terms matching a wildcard pattern.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:WildcardQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "wrapper": { + "$ref": "#/components/schemas/_types.query_dsl:WrapperQuery" + }, + "type": { + "$ref": "#/components/schemas/_types.query_dsl:TypeQuery" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types.query_dsl:BoolQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "filter": { + "description": "The clause (query) must appear in matching documents.\nHowever, unlike `must`, the score of the query will be ignored.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + } + ] + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "must": { + "description": "The clause (query) must appear in matching documents and will contribute to the score.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + } + ] + }, + "must_not": { + "description": "The clause (query) must not appear in the matching documents.\nBecause scoring is ignored, a score of `0` is returned for all documents.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + } + ] + }, + "should": { + "description": "The clause (query) should appear in the matching document.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + } + ] + } + } + } + ] + }, + "_types.query_dsl:QueryBase": { + "type": "object", + "properties": { + "boost": { + "description": "Floating point number used to decrease or increase the relevance scores of the query.\nBoost values are relative to the default value of 1.0.\nA boost value between 0 and 1.0 decreases the relevance score.\nA value greater than 1.0 increases the relevance score.", + "type": "number" + }, + "_name": { + "type": "string" + } + } + }, + "_types:MinimumShouldMatch": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-minimum-should-match.html" + }, + "description": "The minimum number of terms that should match as integer, percentage or range", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "_types.query_dsl:BoostingQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "negative_boost": { + "description": "Floating point number between 0 and 1.0 used to decrease the relevance scores of documents matching the `negative` query.", + "type": "number" + }, + "negative": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "positive": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "required": [ + "negative_boost", + "negative", + "positive" + ] + } + ] + }, + "_types.query_dsl:CommonTermsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "type": "string" + }, + "cutoff_frequency": { + "type": "number" + }, + "high_freq_operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "low_freq_operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "query": { + "type": "string" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:Operator": { + "type": "string", + "enum": [ + "and", + "AND", + "or", + "OR" + ] + }, + "_types.query_dsl:CombinedFieldsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "fields": { + "description": "List of fields to search. Field wildcard patterns are allowed. Only `text` fields are supported, and they must all have the same search `analyzer`.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "query": { + "description": "Text to search for in the provided `fields`.\nThe `combined_fields` query analyzes the provided text before performing a search.", + "type": "string" + }, + "auto_generate_synonyms_phrase_query": { + "description": "If true, match phrase queries are automatically created for multi-term synonyms.", + "type": "boolean" + }, + "operator": { + "$ref": "#/components/schemas/_types.query_dsl:CombinedFieldsOperator" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "zero_terms_query": { + "$ref": "#/components/schemas/_types.query_dsl:CombinedFieldsZeroTerms" + } + }, + "required": [ + "fields", + "query" + ] + } + ] + }, + "_types:Field": { + "description": "Path to field or array of paths. Some API's support wildcards in the path to select multiple fields.", + "type": "string" + }, + "_types.query_dsl:CombinedFieldsOperator": { + "type": "string", + "enum": [ + "or", + "and" + ] + }, + "_types.query_dsl:CombinedFieldsZeroTerms": { + "type": "string", + "enum": [ + "none", + "all" + ] + }, + "_types.query_dsl:ConstantScoreQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "required": [ + "filter" + ] + } + ] + }, + "_types.query_dsl:DisMaxQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "queries": { + "description": "One or more query clauses.\nReturned documents must match one or more of these queries.\nIf a document matches multiple queries, Elasticsearch uses the highest relevance score.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "tie_breaker": { + "description": "Floating point number between 0 and 1.0 used to increase the relevance scores of documents matching multiple query clauses.", + "type": "number" + } + }, + "required": [ + "queries" + ] + } + ] + }, + "_types.query_dsl:DistanceFeatureQuery": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:GeoDistanceFeatureQuery" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:DateDistanceFeatureQuery" + } + ] + }, + "_types.query_dsl:GeoDistanceFeatureQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DistanceFeatureQueryBaseGeoLocationDistance" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:DistanceFeatureQueryBaseGeoLocationDistance": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "origin": { + "$ref": "#/components/schemas/_types:GeoLocation" + }, + "pivot": { + "$ref": "#/components/schemas/_types:Distance" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "origin", + "pivot", + "field" + ] + } + ] + }, + "_types:GeoLocation": { + "description": "A latitude/longitude as a 2 dimensional point. It can be represented in various ways:\n- as a `{lat, long}` object\n- as a geo hash value\n- as a `[lon, lat]` array\n- as a string in `\", \"` or WKT point formats", + "oneOf": [ + { + "$ref": "#/components/schemas/_types:LatLonGeoLocation" + }, + { + "$ref": "#/components/schemas/_types:GeoHashLocation" + }, + { + "type": "array", + "items": { + "type": "number" + } + }, + { + "type": "string" + } + ] + }, + "_types:LatLonGeoLocation": { + "type": "object", + "properties": { + "lat": { + "description": "Latitude", + "type": "number" + }, + "lon": { + "description": "Longitude", + "type": "number" + } + }, + "required": [ + "lat", + "lon" + ] + }, + "_types:GeoHashLocation": { + "type": "object", + "properties": { + "geohash": { + "$ref": "#/components/schemas/_types:GeoHash" + } + }, + "required": [ + "geohash" + ] + }, + "_types:GeoHash": { + "type": "string" + }, + "_types:Distance": { + "type": "string" + }, + "_types.query_dsl:DateDistanceFeatureQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DistanceFeatureQueryBaseDateMathDuration" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:DistanceFeatureQueryBaseDateMathDuration": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "origin": { + "$ref": "#/components/schemas/_types:DateMath" + }, + "pivot": { + "$ref": "#/components/schemas/_types:Duration" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "origin", + "pivot", + "field" + ] + } + ] + }, + "_types:DateMath": { + "type": "string" + }, + "_types:Duration": { + "externalDocs": { + "url": "https://github.com/elastic/elasticsearch/blob/current/libs/core/src/main/java/org/elasticsearch/core/TimeValue.java" + }, + "description": "A duration. Units can be `nanos`, `micros`, `ms` (milliseconds), `s` (seconds), `m` (minutes), `h` (hours) and\n`d` (days). Also accepts \"0\" without a unit and \"-1\" to indicate an unspecified value.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "string", + "enum": [ + "-1" + ] + }, + { + "type": "string", + "enum": [ + "0" + ] + } + ] + }, + "_types.query_dsl:ExistsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "field" + ] + } + ] + }, + "_types.query_dsl:FunctionScoreQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "boost_mode": { + "$ref": "#/components/schemas/_types.query_dsl:FunctionBoostMode" + }, + "functions": { + "description": "One or more functions that compute a new score for each document returned by the query.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:FunctionScoreContainer" + } + }, + "max_boost": { + "description": "Restricts the new score to not exceed the provided limit.", + "type": "number" + }, + "min_score": { + "description": "Excludes documents that do not meet the provided score threshold.", + "type": "number" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "score_mode": { + "$ref": "#/components/schemas/_types.query_dsl:FunctionScoreMode" + } + } + } + ] + }, + "_types.query_dsl:FunctionBoostMode": { + "type": "string", + "enum": [ + "multiply", + "replace", + "sum", + "avg", + "max", + "min" + ] + }, + "_types.query_dsl:FunctionScoreContainer": { + "allOf": [ + { + "type": "object", + "properties": { + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "weight": { + "type": "number" + } + } + }, + { + "type": "object", + "properties": { + "exp": { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunction" + }, + "gauss": { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunction" + }, + "linear": { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunction" + }, + "field_value_factor": { + "$ref": "#/components/schemas/_types.query_dsl:FieldValueFactorScoreFunction" + }, + "random_score": { + "$ref": "#/components/schemas/_types.query_dsl:RandomScoreFunction" + }, + "script_score": { + "$ref": "#/components/schemas/_types.query_dsl:ScriptScoreFunction" + } + }, + "minProperties": 1, + "maxProperties": 1 + } + ] + }, + "_types.query_dsl:DecayFunction": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DateDecayFunction" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:NumericDecayFunction" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:GeoDecayFunction" + } + ] + }, + "_types.query_dsl:DateDecayFunction": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunctionBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:DecayFunctionBase": { + "type": "object", + "properties": { + "multi_value_mode": { + "$ref": "#/components/schemas/_types.query_dsl:MultiValueMode" + } + } + }, + "_types.query_dsl:MultiValueMode": { + "type": "string", + "enum": [ + "min", + "max", + "avg", + "sum" + ] + }, + "_types.query_dsl:NumericDecayFunction": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunctionBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:GeoDecayFunction": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunctionBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:FieldValueFactorScoreFunction": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "factor": { + "description": "Optional factor to multiply the field value with.", + "type": "number" + }, + "missing": { + "description": "Value used if the document doesn’t have that field.\nThe modifier and factor are still applied to it as though it were read from the document.", + "type": "number" + }, + "modifier": { + "$ref": "#/components/schemas/_types.query_dsl:FieldValueFactorModifier" + } + }, + "required": [ + "field" + ] + }, + "_types.query_dsl:FieldValueFactorModifier": { + "type": "string", + "enum": [ + "none", + "log", + "log1p", + "log2p", + "ln", + "ln1p", + "ln2p", + "square", + "sqrt", + "reciprocal" + ] + }, + "_types.query_dsl:RandomScoreFunction": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "seed": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + } + } + }, + "_types.query_dsl:ScriptScoreFunction": { + "type": "object", + "properties": { + "script": { + "$ref": "#/components/schemas/_types:Script" + } + }, + "required": [ + "script" + ] + }, + "_types:Script": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:InlineScript" + }, + { + "$ref": "#/components/schemas/_types:StoredScriptId" + } + ] + }, + "_types:InlineScript": { + "allOf": [ + { + "$ref": "#/components/schemas/_types:ScriptBase" + }, + { + "type": "object", + "properties": { + "lang": { + "$ref": "#/components/schemas/_types:ScriptLanguage" + }, + "options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "source": { + "description": "The script source.", + "type": "string" + } + }, + "required": [ + "source" + ] + } + ] + }, + "_types:ScriptBase": { + "type": "object", + "properties": { + "params": { + "description": "Specifies any named parameters that are passed into the script as variables.\nUse parameters instead of hard-coded values to decrease compile time.", + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + }, + "_types:ScriptLanguage": { + "anyOf": [ + { + "type": "string", + "enum": [ + "painless", + "expression", + "mustache", + "java" + ] + }, + { + "type": "string" + } + ] + }, + "_types:StoredScriptId": { + "allOf": [ + { + "$ref": "#/components/schemas/_types:ScriptBase" + }, + { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/_types:Id" + } + }, + "required": [ + "id" + ] + } + ] + }, + "_types:Id": { + "type": "string" + }, + "_types.query_dsl:FunctionScoreMode": { + "type": "string", + "enum": [ + "multiply", + "sum", + "avg", + "first", + "max", + "min" + ] + }, + "_types.query_dsl:FuzzyQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "max_expansions": { + "description": "Maximum number of variations created.", + "type": "number" + }, + "prefix_length": { + "description": "Number of beginning characters left unchanged when creating expansions.", + "type": "number" + }, + "rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "transpositions": { + "description": "Indicates whether edits include transpositions of two adjacent characters (for example `ab` to `ba`).", + "type": "boolean" + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "value": { + "description": "Term you wish to find in the provided field.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ] + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types:MultiTermQueryRewrite": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-term-rewrite.html" + }, + "type": "string" + }, + "_types:Fuzziness": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#fuzziness" + }, + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "_types.query_dsl:GeoBoundingBoxQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/_types.query_dsl:GeoExecution" + }, + "validation_method": { + "$ref": "#/components/schemas/_types.query_dsl:GeoValidationMethod" + }, + "ignore_unmapped": { + "description": "Set to `true` to ignore an unmapped field and not match any documents for this query.\nSet to `false` to throw an exception if the field is not mapped.", + "type": "boolean" + } + } + } + ] + }, + "_types.query_dsl:GeoExecution": { + "type": "string", + "enum": [ + "memory", + "indexed" + ] + }, + "_types.query_dsl:GeoValidationMethod": { + "type": "string", + "enum": [ + "coerce", + "ignore_malformed", + "strict" + ] + }, + "_types.query_dsl:GeoDistanceQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "distance": { + "$ref": "#/components/schemas/_types:Distance" + }, + "distance_type": { + "$ref": "#/components/schemas/_types:GeoDistanceType" + }, + "validation_method": { + "$ref": "#/components/schemas/_types.query_dsl:GeoValidationMethod" + }, + "ignore_unmapped": { + "description": "Set to `true` to ignore an unmapped field and not match any documents for this query.\nSet to `false` to throw an exception if the field is not mapped.", + "type": "boolean" + } + }, + "required": [ + "distance" + ] + } + ] + }, + "_types:GeoDistanceType": { + "type": "string", + "enum": [ + "arc", + "plane" + ] + }, + "_types.query_dsl:GeoPolygonQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "validation_method": { + "$ref": "#/components/schemas/_types.query_dsl:GeoValidationMethod" + }, + "ignore_unmapped": { + "type": "boolean" + } + } + } + ] + }, + "_types.query_dsl:GeoShapeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "ignore_unmapped": { + "description": "Set to `true` to ignore an unmapped field and not match any documents for this query.\nSet to `false` to throw an exception if the field is not mapped.", + "type": "boolean" + } + } + } + ] + }, + "_types.query_dsl:HasChildQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "ignore_unmapped": { + "description": "Indicates whether to ignore an unmapped `type` and not return any documents instead of an error.", + "type": "boolean" + }, + "inner_hits": { + "$ref": "#/components/schemas/_global.search._types:InnerHits" + }, + "max_children": { + "description": "Maximum number of child documents that match the query allowed for a returned parent document.\nIf the parent document exceeds this limit, it is excluded from the search results.", + "type": "number" + }, + "min_children": { + "description": "Minimum number of child documents that match the query required to match the query for a returned parent document.\nIf the parent document does not meet this limit, it is excluded from the search results.", + "type": "number" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "score_mode": { + "$ref": "#/components/schemas/_types.query_dsl:ChildScoreMode" + }, + "type": { + "$ref": "#/components/schemas/_types:RelationName" + } + }, + "required": [ + "query", + "type" + ] + } + ] + }, + "_global.search._types:InnerHits": { + "type": "object", + "properties": { + "name": { + "$ref": "#/components/schemas/_types:Name" + }, + "size": { + "description": "The maximum number of hits to return per `inner_hits`.", + "type": "number" + }, + "from": { + "description": "Inner hit starting document offset.", + "type": "number" + }, + "collapse": { + "$ref": "#/components/schemas/_global.search._types:FieldCollapse" + }, + "docvalue_fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:FieldAndFormat" + } + }, + "explain": { + "type": "boolean" + }, + "highlight": { + "$ref": "#/components/schemas/_global.search._types:Highlight" + }, + "ignore_unmapped": { + "type": "boolean" + }, + "script_fields": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types:ScriptField" + } + }, + "seq_no_primary_term": { + "type": "boolean" + }, + "fields": { + "$ref": "#/components/schemas/_types:Fields" + }, + "sort": { + "$ref": "#/components/schemas/_types:Sort" + }, + "_source": { + "$ref": "#/components/schemas/_global.search._types:SourceConfig" + }, + "stored_fields": { + "$ref": "#/components/schemas/_types:Fields" + }, + "track_scores": { + "type": "boolean" + }, + "version": { + "type": "boolean" + } + } + }, + "_types:Name": { + "type": "string" + }, + "_global.search._types:FieldCollapse": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "inner_hits": { + "description": "The number of inner hits and their sort order", + "oneOf": [ + { + "$ref": "#/components/schemas/_global.search._types:InnerHits" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_global.search._types:InnerHits" + } + } + ] + }, + "max_concurrent_group_searches": { + "description": "The number of concurrent requests allowed to retrieve the inner_hits per group", + "type": "number" + }, + "collapse": { + "$ref": "#/components/schemas/_global.search._types:FieldCollapse" + } + }, + "required": [ + "field" + ] + }, + "_types.query_dsl:FieldAndFormat": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "format": { + "description": "Format in which the values are returned.", + "type": "string" + }, + "include_unmapped": { + "type": "boolean" + } + }, + "required": [ + "field" + ] + }, + "_global.search._types:Highlight": { + "allOf": [ + { + "$ref": "#/components/schemas/_global.search._types:HighlightBase" + }, + { + "type": "object", + "properties": { + "encoder": { + "$ref": "#/components/schemas/_global.search._types:HighlighterEncoder" + }, + "fields": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_global.search._types:HighlightField" + } + } + }, + "required": [ + "fields" + ] + } + ] + }, + "_global.search._types:HighlightBase": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/_global.search._types:HighlighterType" + }, + "boundary_chars": { + "description": "A string that contains each boundary character.", + "type": "string" + }, + "boundary_max_scan": { + "description": "How far to scan for boundary characters.", + "type": "number" + }, + "boundary_scanner": { + "$ref": "#/components/schemas/_global.search._types:BoundaryScanner" + }, + "boundary_scanner_locale": { + "description": "Controls which locale is used to search for sentence and word boundaries.\nThis parameter takes a form of a language tag, for example: `\"en-US\"`, `\"fr-FR\"`, `\"ja-JP\"`.", + "type": "string" + }, + "force_source": { + "deprecated": true, + "type": "boolean" + }, + "fragmenter": { + "$ref": "#/components/schemas/_global.search._types:HighlighterFragmenter" + }, + "fragment_size": { + "description": "The size of the highlighted fragment in characters.", + "type": "number" + }, + "highlight_filter": { + "type": "boolean" + }, + "highlight_query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "max_fragment_length": { + "type": "number" + }, + "max_analyzed_offset": { + "description": "If set to a non-negative value, highlighting stops at this defined maximum limit.\nThe rest of the text is not processed, thus not highlighted and no error is returned\nThe `max_analyzed_offset` query setting does not override the `index.highlight.max_analyzed_offset` setting, which prevails when it’s set to lower value than the query setting.", + "type": "number" + }, + "no_match_size": { + "description": "The amount of text you want to return from the beginning of the field if there are no matching fragments to highlight.", + "type": "number" + }, + "number_of_fragments": { + "description": "The maximum number of fragments to return.\nIf the number of fragments is set to `0`, no fragments are returned.\nInstead, the entire field contents are highlighted and returned.\nThis can be handy when you need to highlight short texts such as a title or address, but fragmentation is not required.\nIf `number_of_fragments` is `0`, `fragment_size` is ignored.", + "type": "number" + }, + "options": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "order": { + "$ref": "#/components/schemas/_global.search._types:HighlighterOrder" + }, + "phrase_limit": { + "description": "Controls the number of matching phrases in a document that are considered.\nPrevents the `fvh` highlighter from analyzing too many phrases and consuming too much memory.\nWhen using `matched_fields`, `phrase_limit` phrases per matched field are considered. Raising the limit increases query time and consumes more memory.\nOnly supported by the `fvh` highlighter.", + "type": "number" + }, + "post_tags": { + "description": "Use in conjunction with `pre_tags` to define the HTML tags to use for the highlighted text.\nBy default, highlighted text is wrapped in `` and `` tags.", + "type": "array", + "items": { + "type": "string" + } + }, + "pre_tags": { + "description": "Use in conjunction with `post_tags` to define the HTML tags to use for the highlighted text.\nBy default, highlighted text is wrapped in `` and `` tags.", + "type": "array", + "items": { + "type": "string" + } + }, + "require_field_match": { + "description": "By default, only fields that contains a query match are highlighted.\nSet to `false` to highlight all fields.", + "type": "boolean" + }, + "tags_schema": { + "$ref": "#/components/schemas/_global.search._types:HighlighterTagsSchema" + } + } + }, + "_global.search._types:HighlighterType": { + "anyOf": [ + { + "type": "string", + "enum": [ + "plain", + "fvh", + "unified" + ] + }, + { + "type": "string" + } + ] + }, + "_global.search._types:BoundaryScanner": { + "type": "string", + "enum": [ + "chars", + "sentence", + "word" + ] + }, + "_global.search._types:HighlighterFragmenter": { + "type": "string", + "enum": [ + "simple", + "span" + ] + }, + "_global.search._types:HighlighterOrder": { + "type": "string", + "enum": [ + "score" + ] + }, + "_global.search._types:HighlighterTagsSchema": { + "type": "string", + "enum": [ + "styled" + ] + }, + "_global.search._types:HighlighterEncoder": { + "type": "string", + "enum": [ + "default", + "html" + ] + }, + "_global.search._types:HighlightField": { + "allOf": [ + { + "$ref": "#/components/schemas/_global.search._types:HighlightBase" + }, + { + "type": "object", + "properties": { + "fragment_offset": { + "type": "number" + }, + "matched_fields": { + "$ref": "#/components/schemas/_types:Fields" + }, + "analyzer": { + "$ref": "#/components/schemas/_types.analysis:Analyzer" + } + } + } + ] + }, + "_types:Fields": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:Field" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + } + ] + }, + "_types.analysis:Analyzer": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/_types.analysis:CustomAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:FingerprintAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:KeywordAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:LanguageAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:NoriAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:PatternAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:SimpleAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:StandardAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:StopAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:WhitespaceAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:IcuAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:KuromojiAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:SnowballAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:DutchAnalyzer" + } + ] + }, + "_types.analysis:CustomAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "custom" + ] + }, + "char_filter": { + "type": "array", + "items": { + "type": "string" + } + }, + "filter": { + "type": "array", + "items": { + "type": "string" + } + }, + "position_increment_gap": { + "type": "number" + }, + "position_offset_gap": { + "type": "number" + }, + "tokenizer": { + "type": "string" + } + }, + "required": [ + "type", + "tokenizer" + ] + }, + "_types.analysis:FingerprintAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "fingerprint" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "max_output_size": { + "type": "number" + }, + "preserve_original": { + "type": "boolean" + }, + "separator": { + "type": "string" + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + }, + "stopwords_path": { + "type": "string" + } + }, + "required": [ + "type", + "max_output_size", + "preserve_original", + "separator" + ] + }, + "_types:VersionString": { + "type": "string" + }, + "_types.analysis:StopWords": { + "description": "Language value, such as _arabic_ or _thai_. Defaults to _english_.\nEach language value corresponds to a predefined list of stop words in Lucene. See Stop words by language for supported language values and their stop words.\nAlso accepts an array of stop words.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "_types.analysis:KeywordAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "keyword" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:LanguageAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "language" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "language": { + "$ref": "#/components/schemas/_types.analysis:Language" + }, + "stem_exclusion": { + "type": "array", + "items": { + "type": "string" + } + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + }, + "stopwords_path": { + "type": "string" + } + }, + "required": [ + "type", + "language", + "stem_exclusion" + ] + }, + "_types.analysis:Language": { + "type": "string", + "enum": [ + "Arabic", + "Armenian", + "Basque", + "Brazilian", + "Bulgarian", + "Catalan", + "Chinese", + "Cjk", + "Czech", + "Danish", + "Dutch", + "English", + "Estonian", + "Finnish", + "French", + "Galician", + "German", + "Greek", + "Hindi", + "Hungarian", + "Indonesian", + "Irish", + "Italian", + "Latvian", + "Norwegian", + "Persian", + "Portuguese", + "Romanian", + "Russian", + "Sorani", + "Spanish", + "Swedish", + "Turkish", + "Thai" + ] + }, + "_types.analysis:NoriAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "nori" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "decompound_mode": { + "$ref": "#/components/schemas/_types.analysis:NoriDecompoundMode" + }, + "stoptags": { + "type": "array", + "items": { + "type": "string" + } + }, + "user_dictionary": { + "type": "string" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:NoriDecompoundMode": { + "type": "string", + "enum": [ + "discard", + "none", + "mixed" + ] + }, + "_types.analysis:PatternAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "pattern" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "flags": { + "type": "string" + }, + "lowercase": { + "type": "boolean" + }, + "pattern": { + "type": "string" + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + } + }, + "required": [ + "type", + "pattern" + ] + }, + "_types.analysis:SimpleAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "simple" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:StandardAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "standard" + ] + }, + "max_token_length": { + "type": "number" + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:StopAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "stop" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + }, + "stopwords_path": { + "type": "string" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:WhitespaceAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "whitespace" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:IcuAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "icu_analyzer" + ] + }, + "method": { + "$ref": "#/components/schemas/_types.analysis:IcuNormalizationType" + }, + "mode": { + "$ref": "#/components/schemas/_types.analysis:IcuNormalizationMode" + } + }, + "required": [ + "type", + "method", + "mode" + ] + }, + "_types.analysis:IcuNormalizationType": { + "type": "string", + "enum": [ + "nfc", + "nfkc", + "nfkc_cf" + ] + }, + "_types.analysis:IcuNormalizationMode": { + "type": "string", + "enum": [ + "decompose", + "compose" + ] + }, + "_types.analysis:KuromojiAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "kuromoji" + ] + }, + "mode": { + "$ref": "#/components/schemas/_types.analysis:KuromojiTokenizationMode" + }, + "user_dictionary": { + "type": "string" + } + }, + "required": [ + "type", + "mode" + ] + }, + "_types.analysis:KuromojiTokenizationMode": { + "type": "string", + "enum": [ + "normal", + "search", + "extended" + ] + }, + "_types.analysis:SnowballAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "snowball" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "language": { + "$ref": "#/components/schemas/_types.analysis:SnowballLanguage" + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + } + }, + "required": [ + "type", + "language" + ] + }, + "_types.analysis:SnowballLanguage": { + "type": "string", + "enum": [ + "Armenian", + "Basque", + "Catalan", + "Danish", + "Dutch", + "English", + "Finnish", + "French", + "German", + "German2", + "Hungarian", + "Italian", + "Kp", + "Lovins", + "Norwegian", + "Porter", + "Portuguese", + "Romanian", + "Russian", + "Spanish", + "Swedish", + "Turkish" + ] + }, + "_types.analysis:DutchAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dutch" + ] + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + } + }, + "required": [ + "type" + ] + }, + "_types:ScriptField": { + "type": "object", + "properties": { + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "ignore_failure": { + "type": "boolean" + } + }, + "required": [ + "script" + ] + }, + "_types:Sort": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:SortCombinations" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:SortCombinations" + } + } + ] + }, + "_types:SortCombinations": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:Field" + }, + { + "$ref": "#/components/schemas/_types:SortOptions" + } + ] + }, + "_types:SortOptions": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/sort-search-results.html" + }, + "type": "object", + "properties": { + "_score": { + "$ref": "#/components/schemas/_types:ScoreSort" + }, + "_doc": { + "$ref": "#/components/schemas/_types:ScoreSort" + }, + "_geo_distance": { + "$ref": "#/components/schemas/_types:GeoDistanceSort" + }, + "_script": { + "$ref": "#/components/schemas/_types:ScriptSort" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types:ScoreSort": { + "type": "object", + "properties": { + "order": { + "$ref": "#/components/schemas/_types:SortOrder" + } + } + }, + "_types:SortOrder": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "_types:GeoDistanceSort": { + "type": "object", + "properties": { + "mode": { + "$ref": "#/components/schemas/_types:SortMode" + }, + "distance_type": { + "$ref": "#/components/schemas/_types:GeoDistanceType" + }, + "ignore_unmapped": { + "type": "boolean" + }, + "order": { + "$ref": "#/components/schemas/_types:SortOrder" + }, + "unit": { + "$ref": "#/components/schemas/_types:DistanceUnit" + } + } + }, + "_types:SortMode": { + "type": "string", + "enum": [ + "min", + "max", + "sum", + "avg", + "median" + ] + }, + "_types:DistanceUnit": { + "type": "string", + "enum": [ + "in", + "ft", + "yd", + "mi", + "nmi", + "km", + "m", + "cm", + "mm" + ] + }, + "_types:ScriptSort": { + "type": "object", + "properties": { + "order": { + "$ref": "#/components/schemas/_types:SortOrder" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "type": { + "$ref": "#/components/schemas/_types:ScriptSortType" + }, + "mode": { + "$ref": "#/components/schemas/_types:SortMode" + }, + "nested": { + "$ref": "#/components/schemas/_types:NestedSortValue" + } + }, + "required": [ + "script" + ] + }, + "_types:ScriptSortType": { + "type": "string", + "enum": [ + "string", + "number", + "version" + ] + }, + "_types:NestedSortValue": { + "type": "object", + "properties": { + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "max_children": { + "type": "number" + }, + "nested": { + "$ref": "#/components/schemas/_types:NestedSortValue" + }, + "path": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "path" + ] + }, + "_global.search._types:SourceConfig": { + "description": "Defines how to fetch a source. Fetching can be disabled entirely, or the source can be filtered.", + "oneOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/components/schemas/_global.search._types:SourceFilter" + } + ] + }, + "_global.search._types:SourceFilter": { + "type": "object", + "properties": { + "excludes": { + "$ref": "#/components/schemas/_types:Fields" + }, + "includes": { + "$ref": "#/components/schemas/_types:Fields" + } + } + }, + "_types.query_dsl:ChildScoreMode": { + "type": "string", + "enum": [ + "none", + "avg", + "sum", + "max", + "min" + ] + }, + "_types:RelationName": { + "type": "string" + }, + "_types.query_dsl:HasParentQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "ignore_unmapped": { + "description": "Indicates whether to ignore an unmapped `parent_type` and not return any documents instead of an error.\nYou can use this parameter to query multiple indices that may not contain the `parent_type`.", + "type": "boolean" + }, + "inner_hits": { + "$ref": "#/components/schemas/_global.search._types:InnerHits" + }, + "parent_type": { + "$ref": "#/components/schemas/_types:RelationName" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "score": { + "description": "Indicates whether the relevance score of a matching parent document is aggregated into its child documents.", + "type": "boolean" + } + }, + "required": [ + "parent_type", + "query" + ] + } + ] + }, + "_types.query_dsl:IdsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "values": { + "$ref": "#/components/schemas/_types:Ids" + } + } + } + ] + }, + "_types:Ids": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:Id" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Id" + } + } + ] + }, + "_types.query_dsl:IntervalsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "all_of": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsAllOf" + }, + "any_of": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsAnyOf" + }, + "fuzzy": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsFuzzy" + }, + "match": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsMatch" + }, + "prefix": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsPrefix" + }, + "wildcard": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsWildcard" + } + }, + "minProperties": 1, + "maxProperties": 1 + } + ] + }, + "_types.query_dsl:IntervalsAllOf": { + "type": "object", + "properties": { + "intervals": { + "description": "An array of rules to combine. All rules must produce a match in a document for the overall source to match.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + } + }, + "max_gaps": { + "description": "Maximum number of positions between the matching terms.\nIntervals produced by the rules further apart than this are not considered matches.", + "type": "number" + }, + "ordered": { + "description": "If `true`, intervals produced by the rules should appear in the order in which they are specified.", + "type": "boolean" + }, + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsFilter" + } + }, + "required": [ + "intervals" + ] + }, + "_types.query_dsl:IntervalsContainer": { + "type": "object", + "properties": { + "all_of": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsAllOf" + }, + "any_of": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsAnyOf" + }, + "fuzzy": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsFuzzy" + }, + "match": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsMatch" + }, + "prefix": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsPrefix" + }, + "wildcard": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsWildcard" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types.query_dsl:IntervalsAnyOf": { + "type": "object", + "properties": { + "intervals": { + "description": "An array of rules to match.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + } + }, + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsFilter" + } + }, + "required": [ + "intervals" + ] + }, + "_types.query_dsl:IntervalsFilter": { + "type": "object", + "properties": { + "after": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "before": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "contained_by": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "containing": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "not_contained_by": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "not_containing": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "not_overlapping": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "overlapping": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types.query_dsl:IntervalsFuzzy": { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to normalize the term.", + "type": "string" + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "prefix_length": { + "description": "Number of beginning characters left unchanged when creating expansions.", + "type": "number" + }, + "term": { + "description": "The term to match.", + "type": "string" + }, + "transpositions": { + "description": "Indicates whether edits include transpositions of two adjacent characters (for example, `ab` to `ba`).", + "type": "boolean" + }, + "use_field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "term" + ] + }, + "_types.query_dsl:IntervalsMatch": { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to analyze terms in the query.", + "type": "string" + }, + "max_gaps": { + "description": "Maximum number of positions between the matching terms.\nTerms further apart than this are not considered matches.", + "type": "number" + }, + "ordered": { + "description": "If `true`, matching terms must appear in their specified order.", + "type": "boolean" + }, + "query": { + "description": "Text you wish to find in the provided field.", + "type": "string" + }, + "use_field": { + "$ref": "#/components/schemas/_types:Field" + }, + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsFilter" + } + }, + "required": [ + "query" + ] + }, + "_types.query_dsl:IntervalsPrefix": { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to analyze the `prefix`.", + "type": "string" + }, + "prefix": { + "description": "Beginning characters of terms you wish to find in the top-level field.", + "type": "string" + }, + "use_field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "prefix" + ] + }, + "_types.query_dsl:IntervalsWildcard": { + "type": "object", + "properties": { + "analyzer": { + "description": "Analyzer used to analyze the `pattern`.\nDefaults to the top-level field's analyzer.", + "type": "string" + }, + "pattern": { + "description": "Wildcard pattern used to find matching terms.", + "type": "string" + }, + "use_field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "pattern" + ] + }, + "_types:KnnQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "query_vector": { + "$ref": "#/components/schemas/_types:QueryVector" + }, + "query_vector_builder": { + "$ref": "#/components/schemas/_types:QueryVectorBuilder" + }, + "num_candidates": { + "description": "The number of nearest neighbor candidates to consider per shard", + "type": "number" + }, + "filter": { + "description": "Filters for the kNN search query", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + } + ] + }, + "similarity": { + "description": "The minimum similarity for a vector to be considered a match", + "type": "number" + } + }, + "required": [ + "field" + ] + } + ] + }, + "_types:QueryVector": { + "type": "array", + "items": { + "type": "number" + } + }, + "_types:QueryVectorBuilder": { + "type": "object", + "properties": { + "text_embedding": { + "$ref": "#/components/schemas/_types:TextEmbedding" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types:TextEmbedding": { + "type": "object", + "properties": { + "model_id": { + "type": "string" + }, + "model_text": { + "type": "string" + } + }, + "required": [ + "model_id", + "model_text" + ] + }, + "_types.query_dsl:MatchQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert the text in the query value into tokens.", + "type": "string" + }, + "auto_generate_synonyms_phrase_query": { + "description": "If `true`, match phrase queries are automatically created for multi-term synonyms.", + "type": "boolean" + }, + "cutoff_frequency": { + "deprecated": true, + "type": "number" + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "fuzzy_rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "fuzzy_transpositions": { + "description": "If `true`, edits for fuzzy matching include transpositions of two adjacent characters (for example, `ab` to `ba`).", + "type": "boolean" + }, + "lenient": { + "description": "If `true`, format-based errors, such as providing a text query value for a numeric field, are ignored.", + "type": "boolean" + }, + "max_expansions": { + "description": "Maximum number of terms to which the query will expand.", + "type": "number" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "prefix_length": { + "description": "Number of beginning characters left unchanged for fuzzy matching.", + "type": "number" + }, + "query": { + "description": "Text, number, boolean value or date you wish to find in the provided field.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ] + }, + "zero_terms_query": { + "$ref": "#/components/schemas/_types.query_dsl:ZeroTermsQuery" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:ZeroTermsQuery": { + "type": "string", + "enum": [ + "all", + "none" + ] + }, + "_types.query_dsl:MatchAllQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:MatchBoolPrefixQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert the text in the query value into tokens.", + "type": "string" + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "fuzzy_rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "fuzzy_transpositions": { + "description": "If `true`, edits for fuzzy matching include transpositions of two adjacent characters (for example, `ab` to `ba`).\nCan be applied to the term subqueries constructed for all terms but the final term.", + "type": "boolean" + }, + "max_expansions": { + "description": "Maximum number of terms to which the query will expand.\nCan be applied to the term subqueries constructed for all terms but the final term.", + "type": "number" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "prefix_length": { + "description": "Number of beginning characters left unchanged for fuzzy matching.\nCan be applied to the term subqueries constructed for all terms but the final term.", + "type": "number" + }, + "query": { + "description": "Terms you wish to find in the provided field.\nThe last term is used in a prefix query.", + "type": "string" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:MatchNoneQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:MatchPhraseQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert the text in the query value into tokens.", + "type": "string" + }, + "query": { + "description": "Query terms that are analyzed and turned into a phrase query.", + "type": "string" + }, + "slop": { + "description": "Maximum number of positions allowed between matching tokens.", + "type": "number" + }, + "zero_terms_query": { + "$ref": "#/components/schemas/_types.query_dsl:ZeroTermsQuery" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:MatchPhrasePrefixQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert text in the query value into tokens.", + "type": "string" + }, + "max_expansions": { + "description": "Maximum number of terms to which the last provided term of the query value will expand.", + "type": "number" + }, + "query": { + "description": "Text you wish to find in the provided field.", + "type": "string" + }, + "slop": { + "description": "Maximum number of positions allowed between matching tokens.", + "type": "number" + }, + "zero_terms_query": { + "$ref": "#/components/schemas/_types.query_dsl:ZeroTermsQuery" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:MoreLikeThisQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "The analyzer that is used to analyze the free form text.\nDefaults to the analyzer associated with the first field in fields.", + "type": "string" + }, + "boost_terms": { + "description": "Each term in the formed query could be further boosted by their tf-idf score.\nThis sets the boost factor to use when using this feature.\nDefaults to deactivated (0).", + "type": "number" + }, + "fail_on_unsupported_field": { + "description": "Controls whether the query should fail (throw an exception) if any of the specified fields are not of the supported types (`text` or `keyword`).", + "type": "boolean" + }, + "fields": { + "description": "A list of fields to fetch and analyze the text from.\nDefaults to the `index.query.default_field` index setting, which has a default value of `*`.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "include": { + "description": "Specifies whether the input documents should also be included in the search results returned.", + "type": "boolean" + }, + "like": { + "description": "Specifies free form text and/or a single or multiple documents for which you want to find similar documents.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:Like" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:Like" + } + } + ] + }, + "max_doc_freq": { + "description": "The maximum document frequency above which the terms are ignored from the input document.", + "type": "number" + }, + "max_query_terms": { + "description": "The maximum number of query terms that can be selected.", + "type": "number" + }, + "max_word_length": { + "description": "The maximum word length above which the terms are ignored.\nDefaults to unbounded (`0`).", + "type": "number" + }, + "min_doc_freq": { + "description": "The minimum document frequency below which the terms are ignored from the input document.", + "type": "number" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "min_term_freq": { + "description": "The minimum term frequency below which the terms are ignored from the input document.", + "type": "number" + }, + "min_word_length": { + "description": "The minimum word length below which the terms are ignored.", + "type": "number" + }, + "routing": { + "$ref": "#/components/schemas/_types:Routing" + }, + "stop_words": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + }, + "unlike": { + "description": "Used in combination with `like` to exclude documents that match a set of terms.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:Like" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:Like" + } + } + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionNumber" + }, + "version_type": { + "$ref": "#/components/schemas/_types:VersionType" + } + }, + "required": [ + "like" + ] + } + ] + }, + "_types.query_dsl:Like": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-mlt-query.html#_document_input_parameters" + }, + "description": "Text that we want similar documents for or a lookup to a document's field for the text.", + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:LikeDocument" + } + ] + }, + "_types.query_dsl:LikeDocument": { + "type": "object", + "properties": { + "doc": { + "description": "A document not present in the index.", + "type": "object" + }, + "fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "_id": { + "$ref": "#/components/schemas/_types:Id" + }, + "_index": { + "$ref": "#/components/schemas/_types:IndexName" + }, + "per_field_analyzer": { + "description": "Overrides the default analyzer.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "routing": { + "$ref": "#/components/schemas/_types:Routing" + }, + "version": { + "$ref": "#/components/schemas/_types:VersionNumber" + }, + "version_type": { + "$ref": "#/components/schemas/_types:VersionType" + } + } + }, + "_types:IndexName": { + "type": "string" + }, + "_types:Routing": { + "type": "string" + }, + "_types:VersionNumber": { + "type": "number" + }, + "_types:VersionType": { + "type": "string", + "enum": [ + "internal", + "external", + "external_gte", + "force" + ] + }, + "_types.query_dsl:MultiMatchQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert the text in the query value into tokens.", + "type": "string" + }, + "auto_generate_synonyms_phrase_query": { + "description": "If `true`, match phrase queries are automatically created for multi-term synonyms.", + "type": "boolean" + }, + "cutoff_frequency": { + "deprecated": true, + "type": "number" + }, + "fields": { + "$ref": "#/components/schemas/_types:Fields" + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "fuzzy_rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "fuzzy_transpositions": { + "description": "If `true`, edits for fuzzy matching include transpositions of two adjacent characters (for example, `ab` to `ba`).\nCan be applied to the term subqueries constructed for all terms but the final term.", + "type": "boolean" + }, + "lenient": { + "description": "If `true`, format-based errors, such as providing a text query value for a numeric field, are ignored.", + "type": "boolean" + }, + "max_expansions": { + "description": "Maximum number of terms to which the query will expand.", + "type": "number" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "prefix_length": { + "description": "Number of beginning characters left unchanged for fuzzy matching.", + "type": "number" + }, + "query": { + "description": "Text, number, boolean value or date you wish to find in the provided field.", + "type": "string" + }, + "slop": { + "description": "Maximum number of positions allowed between matching tokens.", + "type": "number" + }, + "tie_breaker": { + "description": "Determines how scores for each per-term blended query and scores across groups are combined.", + "type": "number" + }, + "type": { + "$ref": "#/components/schemas/_types.query_dsl:TextQueryType" + }, + "zero_terms_query": { + "$ref": "#/components/schemas/_types.query_dsl:ZeroTermsQuery" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:TextQueryType": { + "type": "string", + "enum": [ + "best_fields", + "most_fields", + "cross_fields", + "phrase", + "phrase_prefix", + "bool_prefix" + ] + }, + "_types.query_dsl:NestedQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "ignore_unmapped": { + "description": "Indicates whether to ignore an unmapped path and not return any documents instead of an error.", + "type": "boolean" + }, + "inner_hits": { + "$ref": "#/components/schemas/_global.search._types:InnerHits" + }, + "path": { + "$ref": "#/components/schemas/_types:Field" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "score_mode": { + "$ref": "#/components/schemas/_types.query_dsl:ChildScoreMode" + } + }, + "required": [ + "path", + "query" + ] + } + ] + }, + "_types.query_dsl:ParentIdQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/_types:Id" + }, + "ignore_unmapped": { + "description": "Indicates whether to ignore an unmapped `type` and not return any documents instead of an error.", + "type": "boolean" + }, + "type": { + "$ref": "#/components/schemas/_types:RelationName" + } + } + } + ] + }, + "_types.query_dsl:PercolateQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "document": { + "description": "The source of the document being percolated.", + "type": "object" + }, + "documents": { + "description": "An array of sources of the documents being percolated.", + "type": "array", + "items": { + "type": "object" + } + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "id": { + "$ref": "#/components/schemas/_types:Id" + }, + "index": { + "$ref": "#/components/schemas/_types:IndexName" + }, + "name": { + "description": "The suffix used for the `_percolator_document_slot` field when multiple `percolate` queries are specified.", + "type": "string" + }, + "preference": { + "description": "Preference used to fetch document to percolate.", + "type": "string" + }, + "routing": { + "$ref": "#/components/schemas/_types:Routing" + }, + "version": { + "$ref": "#/components/schemas/_types:VersionNumber" + } + }, + "required": [ + "field" + ] + } + ] + }, + "_types.query_dsl:PinnedQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "allOf": [ + { + "type": "object", + "properties": { + "organic": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "required": [ + "organic" + ] + }, + { + "type": "object", + "properties": { + "ids": { + "description": "Document IDs listed in the order they are to appear in results.\nRequired if `docs` is not specified.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Id" + } + }, + "docs": { + "description": "Documents listed in the order they are to appear in results.\nRequired if `ids` is not specified.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:PinnedDoc" + } + } + }, + "minProperties": 1, + "maxProperties": 1 + } + ] + } + ] + }, + "_types.query_dsl:PinnedDoc": { + "type": "object", + "properties": { + "_id": { + "$ref": "#/components/schemas/_types:Id" + }, + "_index": { + "$ref": "#/components/schemas/_types:IndexName" + } + }, + "required": [ + "_id", + "_index" + ] + }, + "_types.query_dsl:PrefixQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "value": { + "description": "Beginning characters of terms you wish to find in the provided field.", + "type": "string" + }, + "case_insensitive": { + "description": "Allows ASCII case insensitive matching of the value with the indexed field values when set to `true`.\nDefault is `false` which means the case sensitivity of matching depends on the underlying field’s mapping.", + "type": "boolean" + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types.query_dsl:QueryStringQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "allow_leading_wildcard": { + "description": "If `true`, the wildcard characters `*` and `?` are allowed as the first character of the query string.", + "type": "boolean" + }, + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert text in the query string into tokens.", + "type": "string" + }, + "analyze_wildcard": { + "description": "If `true`, the query attempts to analyze wildcard terms in the query string.", + "type": "boolean" + }, + "auto_generate_synonyms_phrase_query": { + "description": "If `true`, match phrase queries are automatically created for multi-term synonyms.", + "type": "boolean" + }, + "default_field": { + "$ref": "#/components/schemas/_types:Field" + }, + "default_operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "enable_position_increments": { + "description": "If `true`, enable position increments in queries constructed from a `query_string` search.", + "type": "boolean" + }, + "escape": { + "type": "boolean" + }, + "fields": { + "description": "Array of fields to search. Supports wildcards (`*`).", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "fuzzy_max_expansions": { + "description": "Maximum number of terms to which the query expands for fuzzy matching.", + "type": "number" + }, + "fuzzy_prefix_length": { + "description": "Number of beginning characters left unchanged for fuzzy matching.", + "type": "number" + }, + "fuzzy_rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "fuzzy_transpositions": { + "description": "If `true`, edits for fuzzy matching include transpositions of two adjacent characters (for example, `ab` to `ba`).", + "type": "boolean" + }, + "lenient": { + "description": "If `true`, format-based errors, such as providing a text value for a numeric field, are ignored.", + "type": "boolean" + }, + "max_determinized_states": { + "description": "Maximum number of automaton states required for the query.", + "type": "number" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "phrase_slop": { + "description": "Maximum number of positions allowed between matching tokens for phrases.", + "type": "number" + }, + "query": { + "description": "Query string you wish to parse and use for search.", + "type": "string" + }, + "quote_analyzer": { + "description": "Analyzer used to convert quoted text in the query string into tokens.\nFor quoted text, this parameter overrides the analyzer specified in the `analyzer` parameter.", + "type": "string" + }, + "quote_field_suffix": { + "description": "Suffix appended to quoted text in the query string.\nYou can use this suffix to use a different analysis method for exact matches.", + "type": "string" + }, + "rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "tie_breaker": { + "description": "How to combine the queries generated from the individual search terms in the resulting `dis_max` query.", + "type": "number" + }, + "time_zone": { + "$ref": "#/components/schemas/_types:TimeZone" + }, + "type": { + "$ref": "#/components/schemas/_types.query_dsl:TextQueryType" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types:TimeZone": { + "type": "string" + }, + "_types.query_dsl:RangeQuery": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DateRangeQuery" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:NumberRangeQuery" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:TermsRangeQuery" + } + ] + }, + "_types.query_dsl:DateRangeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RangeQueryBase" + }, + { + "type": "object", + "properties": { + "gt": { + "$ref": "#/components/schemas/_types:DateMath" + }, + "gte": { + "$ref": "#/components/schemas/_types:DateMath" + }, + "lt": { + "$ref": "#/components/schemas/_types:DateMath" + }, + "lte": { + "$ref": "#/components/schemas/_types:DateMath" + }, + "from": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:DateMath" + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "to": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:DateMath" + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "format": { + "$ref": "#/components/schemas/_types:DateFormat" + }, + "time_zone": { + "$ref": "#/components/schemas/_types:TimeZone" + } + } + } + ] + }, + "_types.query_dsl:RangeQueryBase": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "relation": { + "$ref": "#/components/schemas/_types.query_dsl:RangeRelation" + } + } + } + ] + }, + "_types.query_dsl:RangeRelation": { + "type": "string", + "enum": [ + "within", + "contains", + "intersects" + ] + }, + "_types:DateFormat": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html" + }, + "type": "string" + }, + "_types.query_dsl:NumberRangeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RangeQueryBase" + }, + { + "type": "object", + "properties": { + "gt": { + "description": "Greater than.", + "type": "number" + }, + "gte": { + "description": "Greater than or equal to.", + "type": "number" + }, + "lt": { + "description": "Less than.", + "type": "number" + }, + "lte": { + "description": "Less than or equal to.", + "type": "number" + }, + "from": { + "oneOf": [ + { + "type": "number" + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "to": { + "oneOf": [ + { + "type": "number" + }, + { + "nullable": true, + "type": "string" + } + ] + } + } + } + ] + }, + "_types.query_dsl:TermsRangeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RangeQueryBase" + }, + { + "type": "object", + "properties": { + "gt": { + "description": "Greater than.", + "type": "string" + }, + "gte": { + "description": "Greater than or equal to.", + "type": "string" + }, + "lt": { + "description": "Less than.", + "type": "string" + }, + "lte": { + "description": "Less than or equal to.", + "type": "string" + }, + "from": { + "oneOf": [ + { + "type": "string" + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "to": { + "oneOf": [ + { + "type": "string" + }, + { + "nullable": true, + "type": "string" + } + ] + } + } + } + ] + }, + "_types.query_dsl:RankFeatureQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "saturation": { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunctionSaturation" + }, + "log": { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunctionLogarithm" + }, + "linear": { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunctionLinear" + }, + "sigmoid": { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunctionSigmoid" + } + }, + "required": [ + "field" + ] + } + ] + }, + "_types.query_dsl:RankFeatureFunctionSaturation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunction" + }, + { + "type": "object", + "properties": { + "pivot": { + "description": "Configurable pivot value so that the result will be less than 0.5.", + "type": "number" + } + } + } + ] + }, + "_types.query_dsl:RankFeatureFunction": { + "type": "object" + }, + "_types.query_dsl:RankFeatureFunctionLogarithm": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunction" + }, + { + "type": "object", + "properties": { + "scaling_factor": { + "description": "Configurable scaling factor.", + "type": "number" + } + }, + "required": [ + "scaling_factor" + ] + } + ] + }, + "_types.query_dsl:RankFeatureFunctionLinear": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunction" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:RankFeatureFunctionSigmoid": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunction" + }, + { + "type": "object", + "properties": { + "pivot": { + "description": "Configurable pivot value so that the result will be less than 0.5.", + "type": "number" + }, + "exponent": { + "description": "Configurable Exponent.", + "type": "number" + } + }, + "required": [ + "pivot", + "exponent" + ] + } + ] + }, + "_types.query_dsl:RegexpQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "case_insensitive": { + "description": "Allows case insensitive matching of the regular expression value with the indexed field values when set to `true`.\nWhen `false`, case sensitivity of matching depends on the underlying field’s mapping.", + "type": "boolean" + }, + "flags": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/regexp-syntax.html" + }, + "description": "Enables optional operators for the regular expression.", + "type": "string" + }, + "max_determinized_states": { + "description": "Maximum number of automaton states required for the query.", + "type": "number" + }, + "rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "value": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/regexp-syntax.html" + }, + "description": "Regular expression for terms you wish to find in the provided field.", + "type": "string" + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types.query_dsl:RuleQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "organic": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "ruleset_id": { + "$ref": "#/components/schemas/_types:Id" + }, + "match_criteria": { + "type": "object" + } + }, + "required": [ + "organic", + "ruleset_id", + "match_criteria" + ] + } + ] + }, + "_types.query_dsl:ScriptQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "script": { + "$ref": "#/components/schemas/_types:Script" + } + }, + "required": [ + "script" + ] + } + ] + }, + "_types.query_dsl:ScriptScoreQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "min_score": { + "description": "Documents with a score lower than this floating point number are excluded from the search results.", + "type": "number" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + } + }, + "required": [ + "query", + "script" + ] + } + ] + }, + "_types.query_dsl:ShapeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "ignore_unmapped": { + "description": "When set to `true` the query ignores an unmapped field and will not match any documents.", + "type": "boolean" + } + } + } + ] + }, + "_types.query_dsl:SimpleQueryStringQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert text in the query string into tokens.", + "type": "string" + }, + "analyze_wildcard": { + "description": "If `true`, the query attempts to analyze wildcard terms in the query string.", + "type": "boolean" + }, + "auto_generate_synonyms_phrase_query": { + "description": "If `true`, the parser creates a match_phrase query for each multi-position token.", + "type": "boolean" + }, + "default_operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "fields": { + "description": "Array of fields you wish to search.\nAccepts wildcard expressions.\nYou also can boost relevance scores for matches to particular fields using a caret (`^`) notation.\nDefaults to the `index.query.default_field index` setting, which has a default value of `*`.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "flags": { + "$ref": "#/components/schemas/_types.query_dsl:SimpleQueryStringFlags" + }, + "fuzzy_max_expansions": { + "description": "Maximum number of terms to which the query expands for fuzzy matching.", + "type": "number" + }, + "fuzzy_prefix_length": { + "description": "Number of beginning characters left unchanged for fuzzy matching.", + "type": "number" + }, + "fuzzy_transpositions": { + "description": "If `true`, edits for fuzzy matching include transpositions of two adjacent characters (for example, `ab` to `ba`).", + "type": "boolean" + }, + "lenient": { + "description": "If `true`, format-based errors, such as providing a text value for a numeric field, are ignored.", + "type": "boolean" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "query": { + "description": "Query string in the simple query string syntax you wish to parse and use for search.", + "type": "string" + }, + "quote_field_suffix": { + "description": "Suffix appended to quoted text in the query string.", + "type": "string" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:SimpleQueryStringFlags": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-simple-query-string-query.html#supported-flags" + }, + "description": "Query flags can be either a single flag or a combination of flags, e.g. `OR|AND|PREFIX`", + "allOf": [ + { + "$ref": "#/components/schemas/_spec_utils:PipeSeparatedFlagsSimpleQueryStringFlag" + } + ] + }, + "_spec_utils:PipeSeparatedFlagsSimpleQueryStringFlag": { + "description": "A set of flags that can be represented as a single enum value or a set of values that are encoded\nas a pipe-separated string\n\nDepending on the target language, code generators can use this hint to generate language specific\nflags enum constructs and the corresponding (de-)serialization code.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:SimpleQueryStringFlag" + }, + { + "type": "string" + } + ] + }, + "_types.query_dsl:SimpleQueryStringFlag": { + "type": "string", + "enum": [ + "NONE", + "AND", + "NOT", + "OR", + "PREFIX", + "PHRASE", + "PRECEDENCE", + "ESCAPE", + "WHITESPACE", + "FUZZY", + "NEAR", + "SLOP", + "ALL" + ] + }, + "_types.query_dsl:SpanContainingQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "big": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + }, + "little": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + }, + "required": [ + "big", + "little" + ] + } + ] + }, + "_types.query_dsl:SpanQuery": { + "type": "object", + "properties": { + "span_containing": { + "$ref": "#/components/schemas/_types.query_dsl:SpanContainingQuery" + }, + "field_masking_span": { + "$ref": "#/components/schemas/_types.query_dsl:SpanFieldMaskingQuery" + }, + "span_first": { + "$ref": "#/components/schemas/_types.query_dsl:SpanFirstQuery" + }, + "span_gap": { + "$ref": "#/components/schemas/_types.query_dsl:SpanGapQuery" + }, + "span_multi": { + "$ref": "#/components/schemas/_types.query_dsl:SpanMultiTermQuery" + }, + "span_near": { + "$ref": "#/components/schemas/_types.query_dsl:SpanNearQuery" + }, + "span_not": { + "$ref": "#/components/schemas/_types.query_dsl:SpanNotQuery" + }, + "span_or": { + "$ref": "#/components/schemas/_types.query_dsl:SpanOrQuery" + }, + "span_term": { + "description": "The equivalent of the `term` query but for use with other span queries.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:SpanTermQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "span_within": { + "$ref": "#/components/schemas/_types.query_dsl:SpanWithinQuery" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types.query_dsl:SpanFieldMaskingQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + }, + "required": [ + "field", + "query" + ] + } + ] + }, + "_types.query_dsl:SpanFirstQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "end": { + "description": "Controls the maximum end position permitted in a match.", + "type": "number" + }, + "match": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + }, + "required": [ + "end", + "match" + ] + } + ] + }, + "_types.query_dsl:SpanGapQuery": { + "description": "Can only be used as a clause in a span_near query.", + "type": "object", + "additionalProperties": { + "type": "number" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types.query_dsl:SpanMultiTermQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "match": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "required": [ + "match" + ] + } + ] + }, + "_types.query_dsl:SpanNearQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "clauses": { + "description": "Array of one or more other span type queries.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + }, + "in_order": { + "description": "Controls whether matches are required to be in-order.", + "type": "boolean" + }, + "slop": { + "description": "Controls the maximum number of intervening unmatched positions permitted.", + "type": "number" + } + }, + "required": [ + "clauses" + ] + } + ] + }, + "_types.query_dsl:SpanNotQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "dist": { + "description": "The number of tokens from within the include span that can’t have overlap with the exclude span.\nEquivalent to setting both `pre` and `post`.", + "type": "number" + }, + "exclude": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + }, + "include": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + }, + "post": { + "description": "The number of tokens after the include span that can’t have overlap with the exclude span.", + "type": "number" + }, + "pre": { + "description": "The number of tokens before the include span that can’t have overlap with the exclude span.", + "type": "number" + } + }, + "required": [ + "exclude", + "include" + ] + } + ] + }, + "_types.query_dsl:SpanOrQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "clauses": { + "description": "Array of one or more other span type queries.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + } + }, + "required": [ + "clauses" + ] + } + ] + }, + "_types.query_dsl:SpanTermQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types.query_dsl:SpanWithinQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "big": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + }, + "little": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + }, + "required": [ + "big", + "little" + ] + } + ] + }, + "_types.query_dsl:TermQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/_types:FieldValue" + }, + "case_insensitive": { + "description": "Allows ASCII case insensitive matching of the value with the indexed field values when set to `true`.\nWhen `false`, the case sensitivity of matching depends on the underlying field’s mapping.", + "type": "boolean" + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types:FieldValue": { + "description": "A field value.", + "oneOf": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "nullable": true, + "type": "string" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:TermsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:TermsSetQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "minimum_should_match_field": { + "$ref": "#/components/schemas/_types:Field" + }, + "minimum_should_match_script": { + "$ref": "#/components/schemas/_types:Script" + }, + "terms": { + "description": "Array of terms you wish to find in the provided field.", + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "terms" + ] + } + ] + }, + "_types.query_dsl:TextExpansionQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "model_id": { + "description": "The text expansion NLP model to use", + "type": "string" + }, + "model_text": { + "description": "The query text", + "type": "string" + }, + "pruning_config": { + "$ref": "#/components/schemas/_types.query_dsl:TokenPruningConfig" + } + }, + "required": [ + "model_id", + "model_text" + ] + } + ] + }, + "_types.query_dsl:TokenPruningConfig": { + "type": "object", + "properties": { + "tokens_freq_ratio_threshold": { + "description": "Tokens whose frequency is more than this threshold times the average frequency of all tokens in the specified field are considered outliers and pruned.", + "type": "number" + }, + "tokens_weight_threshold": { + "description": "Tokens whose weight is less than this threshold are considered nonsignificant and pruned.", + "type": "number" + }, + "only_score_pruned_tokens": { + "description": "Whether to only score pruned tokens, vs only scoring kept tokens.", + "type": "boolean" + } + } + }, + "_types.query_dsl:WeightedTokensQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "tokens": { + "description": "The tokens representing this query", + "type": "object", + "additionalProperties": { + "type": "number" + } + }, + "pruning_config": { + "$ref": "#/components/schemas/_types.query_dsl:TokenPruningConfig" + } + }, + "required": [ + "tokens" + ] + } + ] + }, + "_types.query_dsl:WildcardQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "case_insensitive": { + "description": "Allows case insensitive matching of the pattern with the indexed field values when set to true. Default is false which means the case sensitivity of matching depends on the underlying field’s mapping.", + "type": "boolean" + }, + "rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "value": { + "description": "Wildcard pattern for terms you wish to find in the provided field. Required, when wildcard is not set.", + "type": "string" + }, + "wildcard": { + "description": "Wildcard pattern for terms you wish to find in the provided field. Required, when value is not set.", + "type": "string" + } + } + } + ] + }, + "_types.query_dsl:WrapperQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "query": { + "description": "A base64 encoded query.\nThe binary data format can be any of JSON, YAML, CBOR or SMILE encodings", + "type": "string" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:TypeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types.aggregations:AutoDateHistogramAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "buckets": { + "description": "The target number of buckets.", + "type": "number" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "format": { + "description": "The date format used to format `key_as_string` in the response.\nIf no `format` is specified, the first date format specified in the field mapping is used.", + "type": "string" + }, + "minimum_interval": { + "$ref": "#/components/schemas/_types.aggregations:MinimumInterval" + }, + "missing": { + "$ref": "#/components/schemas/_types:DateTime" + }, + "offset": { + "description": "Time zone specified as a ISO 8601 UTC offset.", + "type": "string" + }, + "params": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "time_zone": { + "$ref": "#/components/schemas/_types:TimeZone" + } + } + } + ] + }, + "_types.aggregations:MinimumInterval": { + "type": "string", + "enum": [ + "second", + "minute", + "hour", + "day", + "month", + "year" + ] + }, + "_types:DateTime": { + "description": "A date and time, either as a string whose format can depend on the context (defaulting to ISO 8601), or a\nnumber of milliseconds since the Epoch. Elasticsearch accepts both as input, but will generally output a string\nrepresentation.", + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/_types:EpochTimeUnitMillis" + } + ] + }, + "_types:EpochTimeUnitMillis": { + "allOf": [ + { + "$ref": "#/components/schemas/_types:UnitMillis" + } + ] + }, + "_types:UnitMillis": { + "description": "Time unit for milliseconds", + "type": "number" + }, + "_types.aggregations:AverageAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:FormatMetricAggregationBase": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "format": { + "type": "string" + } + } + } + ] + }, + "_types.aggregations:MetricAggregationBase": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "missing": { + "$ref": "#/components/schemas/_types.aggregations:Missing" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + } + } + }, + "_types.aggregations:Missing": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ] + }, + "_types.aggregations:AverageBucketAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:PipelineAggregationBase": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketPathAggregation" + }, + { + "type": "object", + "properties": { + "format": { + "description": "`DecimalFormat` pattern for the output value.\nIf specified, the formatted value is returned in the aggregation’s `value_as_string` property.", + "type": "string" + }, + "gap_policy": { + "$ref": "#/components/schemas/_types.aggregations:GapPolicy" + } + } + } + ] + }, + "_types.aggregations:BucketPathAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:Aggregation" + }, + { + "type": "object", + "properties": { + "buckets_path": { + "$ref": "#/components/schemas/_types.aggregations:BucketsPath" + } + } + } + ] + }, + "_types.aggregations:BucketsPath": { + "description": "Buckets path can be expressed in different ways, and an aggregation may accept some or all of these\nforms depending on its type. Please refer to each aggregation's documentation to know what buckets\npath forms they accept.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + ] + }, + "_types.aggregations:GapPolicy": { + "type": "string", + "enum": [ + "skip", + "insert_zeros", + "keep_values" + ] + }, + "_types.aggregations:BoxplotAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "compression": { + "description": "Limits the maximum number of nodes used by the underlying TDigest algorithm to `20 * compression`, enabling control of memory usage and approximation error.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:BucketScriptAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "script": { + "$ref": "#/components/schemas/_types:Script" + } + } + } + ] + }, + "_types.aggregations:BucketSelectorAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "script": { + "$ref": "#/components/schemas/_types:Script" + } + } + } + ] + }, + "_types.aggregations:BucketSortAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:Aggregation" + }, + { + "type": "object", + "properties": { + "from": { + "description": "Buckets in positions prior to `from` will be truncated.", + "type": "number" + }, + "gap_policy": { + "$ref": "#/components/schemas/_types.aggregations:GapPolicy" + }, + "size": { + "description": "The number of buckets to return.\nDefaults to all buckets of the parent aggregation.", + "type": "number" + }, + "sort": { + "$ref": "#/components/schemas/_types:Sort" + } + } + } + ] + }, + "_types.aggregations:BucketKsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketPathAggregation" + }, + { + "type": "object", + "properties": { + "alternative": { + "description": "A list of string values indicating which K-S test alternative to calculate. The valid values\nare: \"greater\", \"less\", \"two_sided\". This parameter is key for determining the K-S statistic used\nwhen calculating the K-S test. Default value is all possible alternative hypotheses.", + "type": "array", + "items": { + "type": "string" + } + }, + "fractions": { + "description": "A list of doubles indicating the distribution of the samples with which to compare to the `buckets_path` results.\nIn typical usage this is the overall proportion of documents in each bucket, which is compared with the actual\ndocument proportions in each bucket from the sibling aggregation counts. The default is to assume that overall\ndocuments are uniformly distributed on these buckets, which they would be if one used equal percentiles of a\nmetric to define the bucket end points.", + "type": "array", + "items": { + "type": "number" + } + }, + "sampling_method": { + "description": "Indicates the sampling methodology when calculating the K-S test. Note, this is sampling of the returned values.\nThis determines the cumulative distribution function (CDF) points used comparing the two samples. Default is\n`upper_tail`, which emphasizes the upper end of the CDF points. Valid options are: `upper_tail`, `uniform`,\nand `lower_tail`.", + "type": "string" + } + } + } + ] + }, + "_types.aggregations:BucketCorrelationAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketPathAggregation" + }, + { + "type": "object", + "properties": { + "function": { + "$ref": "#/components/schemas/_types.aggregations:BucketCorrelationFunction" + } + }, + "required": [ + "function" + ] + } + ] + }, + "_types.aggregations:BucketCorrelationFunction": { + "type": "object", + "properties": { + "count_correlation": { + "$ref": "#/components/schemas/_types.aggregations:BucketCorrelationFunctionCountCorrelation" + } + }, + "required": [ + "count_correlation" + ] + }, + "_types.aggregations:BucketCorrelationFunctionCountCorrelation": { + "type": "object", + "properties": { + "indicator": { + "$ref": "#/components/schemas/_types.aggregations:BucketCorrelationFunctionCountCorrelationIndicator" + } + }, + "required": [ + "indicator" + ] + }, + "_types.aggregations:BucketCorrelationFunctionCountCorrelationIndicator": { + "type": "object", + "properties": { + "doc_count": { + "description": "The total number of documents that initially created the expectations. It’s required to be greater\nthan or equal to the sum of all values in the buckets_path as this is the originating superset of data\nto which the term values are correlated.", + "type": "number" + }, + "expectations": { + "description": "An array of numbers with which to correlate the configured `bucket_path` values.\nThe length of this value must always equal the number of buckets returned by the `bucket_path`.", + "type": "array", + "items": { + "type": "number" + } + }, + "fractions": { + "description": "An array of fractions to use when averaging and calculating variance. This should be used if\nthe pre-calculated data and the buckets_path have known gaps. The length of fractions, if provided,\nmust equal expectations.", + "type": "array", + "items": { + "type": "number" + } + } + }, + "required": [ + "doc_count", + "expectations" + ] + }, + "_types.aggregations:CardinalityAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "precision_threshold": { + "description": "A unique count below which counts are expected to be close to accurate.\nThis allows to trade memory for accuracy.", + "type": "number" + }, + "rehash": { + "type": "boolean" + }, + "execution_hint": { + "$ref": "#/components/schemas/_types.aggregations:CardinalityExecutionMode" + } + } + } + ] + }, + "_types.aggregations:CardinalityExecutionMode": { + "type": "string", + "enum": [ + "global_ordinals", + "segment_ordinals", + "direct", + "save_memory_heuristic", + "save_time_heuristic" + ] + }, + "_types.aggregations:CategorizeTextAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:Aggregation" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "max_unique_tokens": { + "description": "The maximum number of unique tokens at any position up to max_matched_tokens. Must be larger than 1.\nSmaller values use less memory and create fewer categories. Larger values will use more memory and\ncreate narrower categories. Max allowed value is 100.", + "type": "number" + }, + "max_matched_tokens": { + "description": "The maximum number of token positions to match on before attempting to merge categories. Larger\nvalues will use more memory and create narrower categories. Max allowed value is 100.", + "type": "number" + }, + "similarity_threshold": { + "description": "The minimum percentage of tokens that must match for text to be added to the category bucket. Must\nbe between 1 and 100. The larger the value the narrower the categories. Larger values will increase memory\nusage and create narrower categories.", + "type": "number" + }, + "categorization_filters": { + "description": "This property expects an array of regular expressions. The expressions are used to filter out matching\nsequences from the categorization field values. You can use this functionality to fine tune the categorization\nby excluding sequences from consideration when categories are defined. For example, you can exclude SQL\nstatements that appear in your log files. This property cannot be used at the same time as categorization_analyzer.\nIf you only want to define simple regular expression filters that are applied prior to tokenization, setting\nthis property is the easiest method. If you also want to customize the tokenizer or post-tokenization filtering,\nuse the categorization_analyzer property instead and include the filters as pattern_replace character filters.", + "type": "array", + "items": { + "type": "string" + } + }, + "categorization_analyzer": { + "$ref": "#/components/schemas/_types.aggregations:CategorizeTextAnalyzer" + }, + "shard_size": { + "description": "The number of categorization buckets to return from each shard before merging all the results.", + "type": "number" + }, + "size": { + "description": "The number of buckets to return.", + "type": "number" + }, + "min_doc_count": { + "description": "The minimum number of documents in a bucket to be returned to the results.", + "type": "number" + }, + "shard_min_doc_count": { + "description": "The minimum number of documents in a bucket to be returned from the shard before merging.", + "type": "number" + } + }, + "required": [ + "field" + ] + } + ] + }, + "_types.aggregations:CategorizeTextAnalyzer": { + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/_types.aggregations:CustomCategorizeTextAnalyzer" + } + ] + }, + "_types.aggregations:CustomCategorizeTextAnalyzer": { + "type": "object", + "properties": { + "char_filter": { + "type": "array", + "items": { + "type": "string" + } + }, + "tokenizer": { + "type": "string" + }, + "filter": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "_types.aggregations:ChildrenAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/_types:RelationName" + } + } + } + ] + }, + "_types.aggregations:CompositeAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "after": { + "$ref": "#/components/schemas/_types.aggregations:CompositeAggregateKey" + }, + "size": { + "description": "The number of composite buckets that should be returned.", + "type": "number" + }, + "sources": { + "description": "The value sources used to build composite buckets.\nKeys are returned in the order of the `sources` definition.", + "type": "array", + "items": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.aggregations:CompositeAggregationSource" + } + } + } + } + } + ] + }, + "_types.aggregations:CompositeAggregateKey": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types:FieldValue" + } + }, + "_types.aggregations:CompositeAggregationSource": { + "type": "object", + "properties": { + "terms": { + "$ref": "#/components/schemas/_types.aggregations:CompositeTermsAggregation" + }, + "histogram": { + "$ref": "#/components/schemas/_types.aggregations:CompositeHistogramAggregation" + }, + "date_histogram": { + "$ref": "#/components/schemas/_types.aggregations:CompositeDateHistogramAggregation" + }, + "geotile_grid": { + "$ref": "#/components/schemas/_types.aggregations:CompositeGeoTileGridAggregation" + } + } + }, + "_types.aggregations:CompositeTermsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:CompositeAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:CompositeAggregationBase": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "missing_bucket": { + "type": "boolean" + }, + "missing_order": { + "$ref": "#/components/schemas/_types.aggregations:MissingOrder" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "value_type": { + "$ref": "#/components/schemas/_types.aggregations:ValueType" + }, + "order": { + "$ref": "#/components/schemas/_types:SortOrder" + } + } + }, + "_types.aggregations:MissingOrder": { + "type": "string", + "enum": [ + "first", + "last", + "default" + ] + }, + "_types.aggregations:ValueType": { + "type": "string", + "enum": [ + "string", + "long", + "double", + "number", + "date", + "date_nanos", + "ip", + "numeric", + "geo_point", + "boolean" + ] + }, + "_types.aggregations:CompositeHistogramAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:CompositeAggregationBase" + }, + { + "type": "object", + "properties": { + "interval": { + "type": "number" + } + }, + "required": [ + "interval" + ] + } + ] + }, + "_types.aggregations:CompositeDateHistogramAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:CompositeAggregationBase" + }, + { + "type": "object", + "properties": { + "format": { + "type": "string" + }, + "calendar_interval": { + "$ref": "#/components/schemas/_types:DurationLarge" + }, + "fixed_interval": { + "$ref": "#/components/schemas/_types:DurationLarge" + }, + "offset": { + "$ref": "#/components/schemas/_types:Duration" + }, + "time_zone": { + "$ref": "#/components/schemas/_types:TimeZone" + } + } + } + ] + }, + "_types:DurationLarge": { + "description": "A date histogram interval. Similar to `Duration` with additional units: `w` (week), `M` (month), `q` (quarter) and\n`y` (year)", + "type": "string" + }, + "_types.aggregations:CompositeGeoTileGridAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:CompositeAggregationBase" + }, + { + "type": "object", + "properties": { + "precision": { + "type": "number" + }, + "bounds": { + "$ref": "#/components/schemas/_types:GeoBounds" + } + } + } + ] + }, + "_types:GeoBounds": { + "description": "A geo bounding box. It can be represented in various ways:\n- as 4 top/bottom/left/right coordinates\n- as 2 top_left / bottom_right points\n- as 2 top_right / bottom_left points\n- as a WKT bounding box", + "oneOf": [ + { + "$ref": "#/components/schemas/_types:CoordsGeoBounds" + }, + { + "$ref": "#/components/schemas/_types:TopLeftBottomRightGeoBounds" + }, + { + "$ref": "#/components/schemas/_types:TopRightBottomLeftGeoBounds" + }, + { + "$ref": "#/components/schemas/_types:WktGeoBounds" + } + ] + }, + "_types:CoordsGeoBounds": { + "type": "object", + "properties": { + "top": { + "type": "number" + }, + "bottom": { + "type": "number" + }, + "left": { + "type": "number" + }, + "right": { + "type": "number" + } + }, + "required": [ + "top", + "bottom", + "left", + "right" + ] + }, + "_types:TopLeftBottomRightGeoBounds": { + "type": "object", + "properties": { + "top_left": { + "$ref": "#/components/schemas/_types:GeoLocation" + }, + "bottom_right": { + "$ref": "#/components/schemas/_types:GeoLocation" + } + }, + "required": [ + "top_left", + "bottom_right" + ] + }, + "_types:TopRightBottomLeftGeoBounds": { + "type": "object", + "properties": { + "top_right": { + "$ref": "#/components/schemas/_types:GeoLocation" + }, + "bottom_left": { + "$ref": "#/components/schemas/_types:GeoLocation" + } + }, + "required": [ + "top_right", + "bottom_left" + ] + }, + "_types:WktGeoBounds": { + "type": "object", + "properties": { + "wkt": { + "type": "string" + } + }, + "required": [ + "wkt" + ] + }, + "_types.aggregations:CumulativeCardinalityAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:CumulativeSumAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:DateHistogramAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "calendar_interval": { + "$ref": "#/components/schemas/_types.aggregations:CalendarInterval" + }, + "extended_bounds": { + "$ref": "#/components/schemas/_types.aggregations:ExtendedBoundsFieldDateMath" + }, + "hard_bounds": { + "$ref": "#/components/schemas/_types.aggregations:ExtendedBoundsFieldDateMath" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "fixed_interval": { + "$ref": "#/components/schemas/_types:Duration" + }, + "format": { + "description": "The date format used to format `key_as_string` in the response.\nIf no `format` is specified, the first date format specified in the field mapping is used.", + "type": "string" + }, + "interval": { + "$ref": "#/components/schemas/_types:Duration" + }, + "min_doc_count": { + "description": "Only returns buckets that have `min_doc_count` number of documents.\nBy default, all buckets between the first bucket that matches documents and the last one are returned.", + "type": "number" + }, + "missing": { + "$ref": "#/components/schemas/_types:DateTime" + }, + "offset": { + "$ref": "#/components/schemas/_types:Duration" + }, + "order": { + "$ref": "#/components/schemas/_types.aggregations:AggregateOrder" + }, + "params": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "time_zone": { + "$ref": "#/components/schemas/_types:TimeZone" + }, + "keyed": { + "description": "Set to `true` to associate a unique string key with each bucket and return the ranges as a hash rather than an array.", + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:CalendarInterval": { + "type": "string", + "enum": [ + "second", + "1s", + "minute", + "1m", + "hour", + "1h", + "day", + "1d", + "week", + "1w", + "month", + "1M", + "quarter", + "1q", + "year", + "1Y" + ] + }, + "_types.aggregations:ExtendedBoundsFieldDateMath": { + "type": "object", + "properties": { + "max": { + "$ref": "#/components/schemas/_types.aggregations:FieldDateMath" + }, + "min": { + "$ref": "#/components/schemas/_types.aggregations:FieldDateMath" + } + } + }, + "_types.aggregations:FieldDateMath": { + "description": "A date range limit, represented either as a DateMath expression or a number expressed\naccording to the target field's precision.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types:DateMath" + }, + { + "type": "number" + } + ] + }, + "_types.aggregations:AggregateOrder": { + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types:SortOrder" + }, + "minProperties": 1, + "maxProperties": 1 + }, + { + "type": "array", + "items": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types:SortOrder" + }, + "minProperties": 1, + "maxProperties": 1 + } + } + ] + }, + "_types.aggregations:DateRangeAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "format": { + "description": "The date format used to format `from` and `to` in the response.", + "type": "string" + }, + "missing": { + "$ref": "#/components/schemas/_types.aggregations:Missing" + }, + "ranges": { + "description": "Array of date ranges.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.aggregations:DateRangeExpression" + } + }, + "time_zone": { + "$ref": "#/components/schemas/_types:TimeZone" + }, + "keyed": { + "description": "Set to `true` to associate a unique string key with each bucket and returns the ranges as a hash rather than an array.", + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:DateRangeExpression": { + "type": "object", + "properties": { + "from": { + "$ref": "#/components/schemas/_types.aggregations:FieldDateMath" + }, + "key": { + "description": "Custom key to return the range with.", + "type": "string" + }, + "to": { + "$ref": "#/components/schemas/_types.aggregations:FieldDateMath" + } + } + }, + "_types.aggregations:DerivativeAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:DiversifiedSamplerAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "execution_hint": { + "$ref": "#/components/schemas/_types.aggregations:SamplerAggregationExecutionHint" + }, + "max_docs_per_value": { + "description": "Limits how many documents are permitted per choice of de-duplicating value.", + "type": "number" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "shard_size": { + "description": "Limits how many top-scoring documents are collected in the sample processed on each shard.", + "type": "number" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + } + } + } + ] + }, + "_types.aggregations:SamplerAggregationExecutionHint": { + "type": "string", + "enum": [ + "map", + "global_ordinals", + "bytes_hash" + ] + }, + "_types.aggregations:ExtendedStatsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object", + "properties": { + "sigma": { + "description": "The number of standard deviations above/below the mean to display.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:ExtendedStatsBucketAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "sigma": { + "description": "The number of standard deviations above/below the mean to display.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:FrequentItemSetsAggregation": { + "type": "object", + "properties": { + "fields": { + "description": "Fields to analyze.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.aggregations:FrequentItemSetsField" + } + }, + "minimum_set_size": { + "description": "The minimum size of one item set.", + "type": "number" + }, + "minimum_support": { + "description": "The minimum support of one item set.", + "type": "number" + }, + "size": { + "description": "The number of top item sets to return.", + "type": "number" + }, + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "required": [ + "fields" + ] + }, + "_types.aggregations:FrequentItemSetsField": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "exclude": { + "$ref": "#/components/schemas/_types.aggregations:TermsExclude" + }, + "include": { + "$ref": "#/components/schemas/_types.aggregations:TermsInclude" + } + }, + "required": [ + "field" + ] + }, + "_types.aggregations:TermsExclude": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "_types.aggregations:TermsInclude": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "$ref": "#/components/schemas/_types.aggregations:TermsPartition" + } + ] + }, + "_types.aggregations:TermsPartition": { + "type": "object", + "properties": { + "num_partitions": { + "description": "The number of partitions.", + "type": "number" + }, + "partition": { + "description": "The partition number for this request.", + "type": "number" + } + }, + "required": [ + "num_partitions", + "partition" + ] + }, + "_types.aggregations:FiltersAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "filters": { + "$ref": "#/components/schemas/_types.aggregations:BucketsQueryContainer" + }, + "other_bucket": { + "description": "Set to `true` to add a bucket to the response which will contain all documents that do not match any of the given filters.", + "type": "boolean" + }, + "other_bucket_key": { + "description": "The key with which the other bucket is returned.", + "type": "string" + }, + "keyed": { + "description": "By default, the named filters aggregation returns the buckets as an object.\nSet to `false` to return the buckets as an array of objects.", + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:BucketsQueryContainer": { + "description": "Aggregation buckets. By default they are returned as an array, but if the aggregation has keys configured for\nthe different buckets, the result is a dictionary.", + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + } + ] + }, + "_types.aggregations:GeoBoundsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "wrap_longitude": { + "description": "Specifies whether the bounding box should be allowed to overlap the international date line.", + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:GeoCentroidAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "count": { + "type": "number" + }, + "location": { + "$ref": "#/components/schemas/_types:GeoLocation" + } + } + } + ] + }, + "_types.aggregations:GeoDistanceAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "distance_type": { + "$ref": "#/components/schemas/_types:GeoDistanceType" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "origin": { + "$ref": "#/components/schemas/_types:GeoLocation" + }, + "ranges": { + "description": "An array of ranges used to bucket documents.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.aggregations:AggregationRange" + } + }, + "unit": { + "$ref": "#/components/schemas/_types:DistanceUnit" + } + } + } + ] + }, + "_types.aggregations:AggregationRange": { + "type": "object", + "properties": { + "from": { + "description": "Start of the range (inclusive).", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "key": { + "description": "Custom key to return the range with.", + "type": "string" + }, + "to": { + "description": "End of the range (exclusive).", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "nullable": true, + "type": "string" + } + ] + } + } + }, + "_types.aggregations:GeoHashGridAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "bounds": { + "$ref": "#/components/schemas/_types:GeoBounds" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "precision": { + "$ref": "#/components/schemas/_types:GeoHashPrecision" + }, + "shard_size": { + "description": "Allows for more accurate counting of the top cells returned in the final result the aggregation.\nDefaults to returning `max(10,(size x number-of-shards))` buckets from each shard.", + "type": "number" + }, + "size": { + "description": "The maximum number of geohash buckets to return.", + "type": "number" + } + } + } + ] + }, + "_types:GeoHashPrecision": { + "description": "A precision that can be expressed as a geohash length between 1 and 12, or a distance measure like \"1km\", \"10m\".", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "_types.aggregations:GeoLineAggregation": { + "type": "object", + "properties": { + "point": { + "$ref": "#/components/schemas/_types.aggregations:GeoLinePoint" + }, + "sort": { + "$ref": "#/components/schemas/_types.aggregations:GeoLineSort" + }, + "include_sort": { + "description": "When `true`, returns an additional array of the sort values in the feature properties.", + "type": "boolean" + }, + "sort_order": { + "$ref": "#/components/schemas/_types:SortOrder" + }, + "size": { + "description": "The maximum length of the line represented in the aggregation.\nValid sizes are between 1 and 10000.", + "type": "number" + } + }, + "required": [ + "point", + "sort" + ] + }, + "_types.aggregations:GeoLinePoint": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "field" + ] + }, + "_types.aggregations:GeoLineSort": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "field" + ] + }, + "_types.aggregations:GeoTileGridAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "precision": { + "$ref": "#/components/schemas/_types:GeoTilePrecision" + }, + "shard_size": { + "description": "Allows for more accurate counting of the top cells returned in the final result the aggregation.\nDefaults to returning `max(10,(size x number-of-shards))` buckets from each shard.", + "type": "number" + }, + "size": { + "description": "The maximum number of buckets to return.", + "type": "number" + }, + "bounds": { + "$ref": "#/components/schemas/_types:GeoBounds" + } + } + } + ] + }, + "_types:GeoTilePrecision": { + "type": "number" + }, + "_types.aggregations:GeohexGridAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "precision": { + "description": "Integer zoom of the key used to defined cells or buckets\nin the results. Value should be between 0-15.", + "type": "number" + }, + "bounds": { + "$ref": "#/components/schemas/_types:GeoBounds" + }, + "size": { + "description": "Maximum number of buckets to return.", + "type": "number" + }, + "shard_size": { + "description": "Number of buckets returned from each shard.", + "type": "number" + } + }, + "required": [ + "field" + ] + } + ] + }, + "_types.aggregations:GlobalAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:HistogramAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "extended_bounds": { + "$ref": "#/components/schemas/_types.aggregations:ExtendedBoundsdouble" + }, + "hard_bounds": { + "$ref": "#/components/schemas/_types.aggregations:ExtendedBoundsdouble" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "interval": { + "description": "The interval for the buckets.\nMust be a positive decimal.", + "type": "number" + }, + "min_doc_count": { + "description": "Only returns buckets that have `min_doc_count` number of documents.\nBy default, the response will fill gaps in the histogram with empty buckets.", + "type": "number" + }, + "missing": { + "description": "The value to apply to documents that do not have a value.\nBy default, documents without a value are ignored.", + "type": "number" + }, + "offset": { + "description": "By default, the bucket keys start with 0 and then continue in even spaced steps of `interval`.\nThe bucket boundaries can be shifted by using the `offset` option.", + "type": "number" + }, + "order": { + "$ref": "#/components/schemas/_types.aggregations:AggregateOrder" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "format": { + "type": "string" + }, + "keyed": { + "description": "If `true`, returns buckets as a hash instead of an array, keyed by the bucket keys.", + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:ExtendedBoundsdouble": { + "type": "object", + "properties": { + "max": { + "description": "Maximum value for the bound.", + "type": "number" + }, + "min": { + "description": "Minimum value for the bound.", + "type": "number" + } + } + }, + "_types.aggregations:IpRangeAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "ranges": { + "description": "Array of IP ranges.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.aggregations:IpRangeAggregationRange" + } + } + } + } + ] + }, + "_types.aggregations:IpRangeAggregationRange": { + "type": "object", + "properties": { + "from": { + "description": "Start of the range.", + "oneOf": [ + { + "type": "string" + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "mask": { + "description": "IP range defined as a CIDR mask.", + "type": "string" + }, + "to": { + "description": "End of the range.", + "oneOf": [ + { + "type": "string" + }, + { + "nullable": true, + "type": "string" + } + ] + } + } + }, + "_types.aggregations:IpPrefixAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "prefix_length": { + "description": "Length of the network prefix. For IPv4 addresses the accepted range is [0, 32].\nFor IPv6 addresses the accepted range is [0, 128].", + "type": "number" + }, + "is_ipv6": { + "description": "Defines whether the prefix applies to IPv6 addresses.", + "type": "boolean" + }, + "append_prefix_length": { + "description": "Defines whether the prefix length is appended to IP address keys in the response.", + "type": "boolean" + }, + "keyed": { + "description": "Defines whether buckets are returned as a hash rather than an array in the response.", + "type": "boolean" + }, + "min_doc_count": { + "description": "Minimum number of documents in a bucket for it to be included in the response.", + "type": "number" + } + }, + "required": [ + "field", + "prefix_length" + ] + } + ] + }, + "_types.aggregations:InferenceAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "model_id": { + "$ref": "#/components/schemas/_types:Name" + }, + "inference_config": { + "$ref": "#/components/schemas/_types.aggregations:InferenceConfigContainer" + } + }, + "required": [ + "model_id" + ] + } + ] + }, + "_types.aggregations:InferenceConfigContainer": { + "type": "object", + "properties": { + "regression": { + "$ref": "#/components/schemas/ml._types:RegressionInferenceOptions" + }, + "classification": { + "$ref": "#/components/schemas/ml._types:ClassificationInferenceOptions" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "ml._types:RegressionInferenceOptions": { + "type": "object", + "properties": { + "results_field": { + "$ref": "#/components/schemas/_types:Field" + }, + "num_top_feature_importance_values": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/machine-learning/current/ml-feature-importance.html" + }, + "description": "Specifies the maximum number of feature importance values per document.", + "type": "number" + } + } + }, + "ml._types:ClassificationInferenceOptions": { + "type": "object", + "properties": { + "num_top_classes": { + "description": "Specifies the number of top class predictions to return. Defaults to 0.", + "type": "number" + }, + "num_top_feature_importance_values": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/machine-learning/current/ml-feature-importance.html" + }, + "description": "Specifies the maximum number of feature importance values per document.", + "type": "number" + }, + "prediction_field_type": { + "description": "Specifies the type of the predicted field to write. Acceptable values are: string, number, boolean. When boolean is provided 1.0 is transformed to true and 0.0 to false.", + "type": "string" + }, + "results_field": { + "description": "The field that is added to incoming documents to contain the inference prediction. Defaults to predicted_value.", + "type": "string" + }, + "top_classes_results_field": { + "description": "Specifies the field to which the top classes are written. Defaults to top_classes.", + "type": "string" + } + } + }, + "_types.aggregations:MatrixStatsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MatrixAggregation" + }, + { + "type": "object", + "properties": { + "mode": { + "$ref": "#/components/schemas/_types:SortMode" + } + } + } + ] + }, + "_types.aggregations:MatrixAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:Aggregation" + }, + { + "type": "object", + "properties": { + "fields": { + "$ref": "#/components/schemas/_types:Fields" + }, + "missing": { + "description": "The value to apply to documents that do not have a value.\nBy default, documents without a value are ignored.", + "type": "object", + "additionalProperties": { + "type": "number" + } + } + } + } + ] + }, + "_types.aggregations:MaxAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:MaxBucketAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:MedianAbsoluteDeviationAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object", + "properties": { + "compression": { + "description": "Limits the maximum number of nodes used by the underlying TDigest algorithm to `20 * compression`, enabling control of memory usage and approximation error.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:MinAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:MinBucketAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:MissingAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "missing": { + "$ref": "#/components/schemas/_types.aggregations:Missing" + } + } + } + ] + }, + "_types.aggregations:MovingAverageAggregation": { + "discriminator": { + "propertyName": "model" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:LinearMovingAverageAggregation" + }, + { + "$ref": "#/components/schemas/_types.aggregations:SimpleMovingAverageAggregation" + }, + { + "$ref": "#/components/schemas/_types.aggregations:EwmaMovingAverageAggregation" + }, + { + "$ref": "#/components/schemas/_types.aggregations:HoltMovingAverageAggregation" + }, + { + "$ref": "#/components/schemas/_types.aggregations:HoltWintersMovingAverageAggregation" + } + ] + }, + "_types.aggregations:LinearMovingAverageAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MovingAverageAggregationBase" + }, + { + "type": "object", + "properties": { + "model": { + "type": "string", + "enum": [ + "linear" + ] + }, + "settings": { + "$ref": "#/components/schemas/_types:EmptyObject" + } + }, + "required": [ + "model", + "settings" + ] + } + ] + }, + "_types.aggregations:MovingAverageAggregationBase": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "minimize": { + "type": "boolean" + }, + "predict": { + "type": "number" + }, + "window": { + "type": "number" + } + } + } + ] + }, + "_types:EmptyObject": { + "type": "object" + }, + "_types.aggregations:SimpleMovingAverageAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MovingAverageAggregationBase" + }, + { + "type": "object", + "properties": { + "model": { + "type": "string", + "enum": [ + "simple" + ] + }, + "settings": { + "$ref": "#/components/schemas/_types:EmptyObject" + } + }, + "required": [ + "model", + "settings" + ] + } + ] + }, + "_types.aggregations:EwmaMovingAverageAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MovingAverageAggregationBase" + }, + { + "type": "object", + "properties": { + "model": { + "type": "string", + "enum": [ + "ewma" + ] + }, + "settings": { + "$ref": "#/components/schemas/_types.aggregations:EwmaModelSettings" + } + }, + "required": [ + "model", + "settings" + ] + } + ] + }, + "_types.aggregations:EwmaModelSettings": { + "type": "object", + "properties": { + "alpha": { + "type": "number" + } + } + }, + "_types.aggregations:HoltMovingAverageAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MovingAverageAggregationBase" + }, + { + "type": "object", + "properties": { + "model": { + "type": "string", + "enum": [ + "holt" + ] + }, + "settings": { + "$ref": "#/components/schemas/_types.aggregations:HoltLinearModelSettings" + } + }, + "required": [ + "model", + "settings" + ] + } + ] + }, + "_types.aggregations:HoltLinearModelSettings": { + "type": "object", + "properties": { + "alpha": { + "type": "number" + }, + "beta": { + "type": "number" + } + } + }, + "_types.aggregations:HoltWintersMovingAverageAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MovingAverageAggregationBase" + }, + { + "type": "object", + "properties": { + "model": { + "type": "string", + "enum": [ + "holt_winters" + ] + }, + "settings": { + "$ref": "#/components/schemas/_types.aggregations:HoltWintersModelSettings" + } + }, + "required": [ + "model", + "settings" + ] + } + ] + }, + "_types.aggregations:HoltWintersModelSettings": { + "type": "object", + "properties": { + "alpha": { + "type": "number" + }, + "beta": { + "type": "number" + }, + "gamma": { + "type": "number" + }, + "pad": { + "type": "boolean" + }, + "period": { + "type": "number" + }, + "type": { + "$ref": "#/components/schemas/_types.aggregations:HoltWintersType" + } + } + }, + "_types.aggregations:HoltWintersType": { + "type": "string", + "enum": [ + "add", + "mult" + ] + }, + "_types.aggregations:MovingPercentilesAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "window": { + "description": "The size of window to \"slide\" across the histogram.", + "type": "number" + }, + "shift": { + "description": "By default, the window consists of the last n values excluding the current bucket.\nIncreasing `shift` by 1, moves the starting window position by 1 to the right.", + "type": "number" + }, + "keyed": { + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:MovingFunctionAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "script": { + "description": "The script that should be executed on each window of data.", + "type": "string" + }, + "shift": { + "description": "By default, the window consists of the last n values excluding the current bucket.\nIncreasing `shift` by 1, moves the starting window position by 1 to the right.", + "type": "number" + }, + "window": { + "description": "The size of window to \"slide\" across the histogram.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:MultiTermsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "collect_mode": { + "$ref": "#/components/schemas/_types.aggregations:TermsAggregationCollectMode" + }, + "order": { + "$ref": "#/components/schemas/_types.aggregations:AggregateOrder" + }, + "min_doc_count": { + "description": "The minimum number of documents in a bucket for it to be returned.", + "type": "number" + }, + "shard_min_doc_count": { + "description": "The minimum number of documents in a bucket on each shard for it to be returned.", + "type": "number" + }, + "shard_size": { + "description": "The number of candidate terms produced by each shard.\nBy default, `shard_size` will be automatically estimated based on the number of shards and the `size` parameter.", + "type": "number" + }, + "show_term_doc_count_error": { + "description": "Calculates the doc count error on per term basis.", + "type": "boolean" + }, + "size": { + "description": "The number of term buckets should be returned out of the overall terms list.", + "type": "number" + }, + "terms": { + "description": "The field from which to generate sets of terms.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.aggregations:MultiTermLookup" + } + } + }, + "required": [ + "terms" + ] + } + ] + }, + "_types.aggregations:TermsAggregationCollectMode": { + "type": "string", + "enum": [ + "depth_first", + "breadth_first" + ] + }, + "_types.aggregations:MultiTermLookup": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "missing": { + "$ref": "#/components/schemas/_types.aggregations:Missing" + } + }, + "required": [ + "field" + ] + }, + "_types.aggregations:NestedAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "path": { + "$ref": "#/components/schemas/_types:Field" + } + } + } + ] + }, + "_types.aggregations:NormalizeAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "method": { + "$ref": "#/components/schemas/_types.aggregations:NormalizeMethod" + } + } + } + ] + }, + "_types.aggregations:NormalizeMethod": { + "type": "string", + "enum": [ + "rescale_0_1", + "rescale_0_100", + "percent_of_sum", + "mean", + "z-score", + "softmax" + ] + }, + "_types.aggregations:ParentAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/_types:RelationName" + } + } + } + ] + }, + "_types.aggregations:PercentileRanksAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object", + "properties": { + "keyed": { + "description": "By default, the aggregation associates a unique string key with each bucket and returns the ranges as a hash rather than an array.\nSet to `false` to disable this behavior.", + "type": "boolean" + }, + "values": { + "description": "An array of values for which to calculate the percentile ranks.", + "oneOf": [ + { + "type": "array", + "items": { + "type": "number" + } + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "hdr": { + "$ref": "#/components/schemas/_types.aggregations:HdrMethod" + }, + "tdigest": { + "$ref": "#/components/schemas/_types.aggregations:TDigest" + } + } + } + ] + }, + "_types.aggregations:HdrMethod": { + "type": "object", + "properties": { + "number_of_significant_value_digits": { + "description": "Specifies the resolution of values for the histogram in number of significant digits.", + "type": "number" + } + } + }, + "_types.aggregations:TDigest": { + "type": "object", + "properties": { + "compression": { + "description": "Limits the maximum number of nodes used by the underlying TDigest algorithm to `20 * compression`, enabling control of memory usage and approximation error.", + "type": "number" + } + } + }, + "_types.aggregations:PercentilesAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object", + "properties": { + "keyed": { + "description": "By default, the aggregation associates a unique string key with each bucket and returns the ranges as a hash rather than an array.\nSet to `false` to disable this behavior.", + "type": "boolean" + }, + "percents": { + "description": "The percentiles to calculate.", + "type": "array", + "items": { + "type": "number" + } + }, + "hdr": { + "$ref": "#/components/schemas/_types.aggregations:HdrMethod" + }, + "tdigest": { + "$ref": "#/components/schemas/_types.aggregations:TDigest" + } + } + } + ] + }, + "_types.aggregations:PercentilesBucketAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "percents": { + "description": "The list of percentiles to calculate.", + "type": "array", + "items": { + "type": "number" + } + } + } + } + ] + }, + "_types.aggregations:RangeAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "missing": { + "description": "The value to apply to documents that do not have a value.\nBy default, documents without a value are ignored.", + "type": "number" + }, + "ranges": { + "description": "An array of ranges used to bucket documents.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.aggregations:AggregationRange" + } + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "keyed": { + "description": "Set to `true` to associate a unique string key with each bucket and return the ranges as a hash rather than an array.", + "type": "boolean" + }, + "format": { + "type": "string" + } + } + } + ] + }, + "_types.aggregations:RareTermsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "exclude": { + "$ref": "#/components/schemas/_types.aggregations:TermsExclude" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "include": { + "$ref": "#/components/schemas/_types.aggregations:TermsInclude" + }, + "max_doc_count": { + "description": "The maximum number of documents a term should appear in.", + "type": "number" + }, + "missing": { + "$ref": "#/components/schemas/_types.aggregations:Missing" + }, + "precision": { + "description": "The precision of the internal CuckooFilters.\nSmaller precision leads to better approximation, but higher memory usage.", + "type": "number" + }, + "value_type": { + "type": "string" + } + } + } + ] + }, + "_types.aggregations:RateAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object", + "properties": { + "unit": { + "$ref": "#/components/schemas/_types.aggregations:CalendarInterval" + }, + "mode": { + "$ref": "#/components/schemas/_types.aggregations:RateMode" + } + } + } + ] + }, + "_types.aggregations:RateMode": { + "type": "string", + "enum": [ + "sum", + "value_count" + ] + }, + "_types.aggregations:ReverseNestedAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "path": { + "$ref": "#/components/schemas/_types:Field" + } + } + } + ] + }, + "_types.aggregations:SamplerAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "shard_size": { + "description": "Limits how many top-scoring documents are collected in the sample processed on each shard.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:ScriptedMetricAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "combine_script": { + "$ref": "#/components/schemas/_types:Script" + }, + "init_script": { + "$ref": "#/components/schemas/_types:Script" + }, + "map_script": { + "$ref": "#/components/schemas/_types:Script" + }, + "params": { + "description": "A global object with script parameters for `init`, `map` and `combine` scripts.\nIt is shared between the scripts.", + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "reduce_script": { + "$ref": "#/components/schemas/_types:Script" + } + } + } + ] + }, + "_types.aggregations:SerialDifferencingAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "lag": { + "description": "The historical bucket to subtract from the current value.\nMust be a positive, non-zero integer.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:SignificantTermsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "background_filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "chi_square": { + "$ref": "#/components/schemas/_types.aggregations:ChiSquareHeuristic" + }, + "exclude": { + "$ref": "#/components/schemas/_types.aggregations:TermsExclude" + }, + "execution_hint": { + "$ref": "#/components/schemas/_types.aggregations:TermsAggregationExecutionHint" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "gnd": { + "$ref": "#/components/schemas/_types.aggregations:GoogleNormalizedDistanceHeuristic" + }, + "include": { + "$ref": "#/components/schemas/_types.aggregations:TermsInclude" + }, + "jlh": { + "$ref": "#/components/schemas/_types:EmptyObject" + }, + "min_doc_count": { + "description": "Only return terms that are found in more than `min_doc_count` hits.", + "type": "number" + }, + "mutual_information": { + "$ref": "#/components/schemas/_types.aggregations:MutualInformationHeuristic" + }, + "percentage": { + "$ref": "#/components/schemas/_types.aggregations:PercentageScoreHeuristic" + }, + "script_heuristic": { + "$ref": "#/components/schemas/_types.aggregations:ScriptedHeuristic" + }, + "shard_min_doc_count": { + "description": "Regulates the certainty a shard has if the term should actually be added to the candidate list or not with respect to the `min_doc_count`.\nTerms will only be considered if their local shard frequency within the set is higher than the `shard_min_doc_count`.", + "type": "number" + }, + "shard_size": { + "description": "Can be used to control the volumes of candidate terms produced by each shard.\nBy default, `shard_size` will be automatically estimated based on the number of shards and the `size` parameter.", + "type": "number" + }, + "size": { + "description": "The number of buckets returned out of the overall terms list.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:ChiSquareHeuristic": { + "type": "object", + "properties": { + "background_is_superset": { + "description": "Set to `false` if you defined a custom background filter that represents a different set of documents that you want to compare to.", + "type": "boolean" + }, + "include_negatives": { + "description": "Set to `false` to filter out the terms that appear less often in the subset than in documents outside the subset.", + "type": "boolean" + } + }, + "required": [ + "background_is_superset", + "include_negatives" + ] + }, + "_types.aggregations:TermsAggregationExecutionHint": { + "type": "string", + "enum": [ + "map", + "global_ordinals", + "global_ordinals_hash", + "global_ordinals_low_cardinality" + ] + }, + "_types.aggregations:GoogleNormalizedDistanceHeuristic": { + "type": "object", + "properties": { + "background_is_superset": { + "description": "Set to `false` if you defined a custom background filter that represents a different set of documents that you want to compare to.", + "type": "boolean" + } + } + }, + "_types.aggregations:MutualInformationHeuristic": { + "type": "object", + "properties": { + "background_is_superset": { + "description": "Set to `false` if you defined a custom background filter that represents a different set of documents that you want to compare to.", + "type": "boolean" + }, + "include_negatives": { + "description": "Set to `false` to filter out the terms that appear less often in the subset than in documents outside the subset.", + "type": "boolean" + } + } + }, + "_types.aggregations:PercentageScoreHeuristic": { + "type": "object" + }, + "_types.aggregations:ScriptedHeuristic": { + "type": "object", + "properties": { + "script": { + "$ref": "#/components/schemas/_types:Script" + } + }, + "required": [ + "script" + ] + }, + "_types.aggregations:SignificantTextAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "background_filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "chi_square": { + "$ref": "#/components/schemas/_types.aggregations:ChiSquareHeuristic" + }, + "exclude": { + "$ref": "#/components/schemas/_types.aggregations:TermsExclude" + }, + "execution_hint": { + "$ref": "#/components/schemas/_types.aggregations:TermsAggregationExecutionHint" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "filter_duplicate_text": { + "description": "Whether to out duplicate text to deal with noisy data.", + "type": "boolean" + }, + "gnd": { + "$ref": "#/components/schemas/_types.aggregations:GoogleNormalizedDistanceHeuristic" + }, + "include": { + "$ref": "#/components/schemas/_types.aggregations:TermsInclude" + }, + "jlh": { + "$ref": "#/components/schemas/_types:EmptyObject" + }, + "min_doc_count": { + "description": "Only return values that are found in more than `min_doc_count` hits.", + "type": "number" + }, + "mutual_information": { + "$ref": "#/components/schemas/_types.aggregations:MutualInformationHeuristic" + }, + "percentage": { + "$ref": "#/components/schemas/_types.aggregations:PercentageScoreHeuristic" + }, + "script_heuristic": { + "$ref": "#/components/schemas/_types.aggregations:ScriptedHeuristic" + }, + "shard_min_doc_count": { + "description": "Regulates the certainty a shard has if the values should actually be added to the candidate list or not with respect to the min_doc_count.\nValues will only be considered if their local shard frequency within the set is higher than the `shard_min_doc_count`.", + "type": "number" + }, + "shard_size": { + "description": "The number of candidate terms produced by each shard.\nBy default, `shard_size` will be automatically estimated based on the number of shards and the `size` parameter.", + "type": "number" + }, + "size": { + "description": "The number of buckets returned out of the overall terms list.", + "type": "number" + }, + "source_fields": { + "$ref": "#/components/schemas/_types:Fields" + } + } + } + ] + }, + "_types.aggregations:StatsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:StatsBucketAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:StringStatsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "show_distribution": { + "description": "Shows the probability distribution for all characters.", + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:SumAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:SumBucketAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:TermsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "collect_mode": { + "$ref": "#/components/schemas/_types.aggregations:TermsAggregationCollectMode" + }, + "exclude": { + "$ref": "#/components/schemas/_types.aggregations:TermsExclude" + }, + "execution_hint": { + "$ref": "#/components/schemas/_types.aggregations:TermsAggregationExecutionHint" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "include": { + "$ref": "#/components/schemas/_types.aggregations:TermsInclude" + }, + "min_doc_count": { + "description": "Only return values that are found in more than `min_doc_count` hits.", + "type": "number" + }, + "missing": { + "$ref": "#/components/schemas/_types.aggregations:Missing" + }, + "missing_order": { + "$ref": "#/components/schemas/_types.aggregations:MissingOrder" + }, + "missing_bucket": { + "type": "boolean" + }, + "value_type": { + "description": "Coerced unmapped fields into the specified type.", + "type": "string" + }, + "order": { + "$ref": "#/components/schemas/_types.aggregations:AggregateOrder" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "shard_size": { + "description": "The number of candidate terms produced by each shard.\nBy default, `shard_size` will be automatically estimated based on the number of shards and the `size` parameter.", + "type": "number" + }, + "show_term_doc_count_error": { + "description": "Set to `true` to return the `doc_count_error_upper_bound`, which is an upper bound to the error on the `doc_count` returned by each shard.", + "type": "boolean" + }, + "size": { + "description": "The number of buckets returned out of the overall terms list.", + "type": "number" + }, + "format": { + "type": "string" + } + } + } + ] + }, + "_types.aggregations:TopHitsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "docvalue_fields": { + "description": "Fields for which to return doc values.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:FieldAndFormat" + } + }, + "explain": { + "description": "If `true`, returns detailed information about score computation as part of a hit.", + "type": "boolean" + }, + "fields": { + "description": "Array of wildcard (*) patterns. The request returns values for field names\nmatching these patterns in the hits.fields property of the response.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:FieldAndFormat" + } + }, + "from": { + "description": "Starting document offset.", + "type": "number" + }, + "highlight": { + "$ref": "#/components/schemas/_global.search._types:Highlight" + }, + "script_fields": { + "description": "Returns the result of one or more script evaluations for each hit.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types:ScriptField" + } + }, + "size": { + "description": "The maximum number of top matching hits to return per bucket.", + "type": "number" + }, + "sort": { + "$ref": "#/components/schemas/_types:Sort" + }, + "_source": { + "$ref": "#/components/schemas/_global.search._types:SourceConfig" + }, + "stored_fields": { + "$ref": "#/components/schemas/_types:Fields" + }, + "track_scores": { + "description": "If `true`, calculates and returns document scores, even if the scores are not used for sorting.", + "type": "boolean" + }, + "version": { + "description": "If `true`, returns document version as part of a hit.", + "type": "boolean" + }, + "seq_no_primary_term": { + "description": "If `true`, returns sequence number and primary term of the last modification of each hit.", + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:TTestAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:Aggregation" + }, + { + "type": "object", + "properties": { + "a": { + "$ref": "#/components/schemas/_types.aggregations:TestPopulation" + }, + "b": { + "$ref": "#/components/schemas/_types.aggregations:TestPopulation" + }, + "type": { + "$ref": "#/components/schemas/_types.aggregations:TTestType" + } + } + } + ] + }, + "_types.aggregations:TestPopulation": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "required": [ + "field" + ] + }, + "_types.aggregations:TTestType": { + "type": "string", + "enum": [ + "paired", + "homoscedastic", + "heteroscedastic" + ] + }, + "_types.aggregations:TopMetricsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "metrics": { + "description": "The fields of the top document to return.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:TopMetricsValue" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.aggregations:TopMetricsValue" + } + } + ] + }, + "size": { + "description": "The number of top documents from which to return metrics.", + "type": "number" + }, + "sort": { + "$ref": "#/components/schemas/_types:Sort" + } + } + } + ] + }, + "_types.aggregations:TopMetricsValue": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "field" + ] + }, + "_types.aggregations:ValueCountAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormattableMetricAggregation" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:FormattableMetricAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "format": { + "type": "string" + } + } + } + ] + }, + "_types.aggregations:WeightedAverageAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:Aggregation" + }, + { + "type": "object", + "properties": { + "format": { + "description": "A numeric response formatter.", + "type": "string" + }, + "value": { + "$ref": "#/components/schemas/_types.aggregations:WeightedAverageValue" + }, + "value_type": { + "$ref": "#/components/schemas/_types.aggregations:ValueType" + }, + "weight": { + "$ref": "#/components/schemas/_types.aggregations:WeightedAverageValue" + } + } + } + ] + }, + "_types.aggregations:WeightedAverageValue": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "missing": { + "description": "A value or weight to use if the field is missing.", + "type": "number" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + } + } + }, + "_types.aggregations:VariableWidthHistogramAggregation": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "buckets": { + "description": "The target number of buckets.", + "type": "number" + }, + "shard_size": { + "description": "The number of buckets that the coordinating node will request from each shard.\nDefaults to `buckets * 50`.", + "type": "number" + }, + "initial_buffer": { + "description": "Specifies the number of individual documents that will be stored in memory on a shard before the initial bucketing algorithm is run.\nDefaults to `min(10 * shard_size, 50000)`.", + "type": "number" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + } + } + }, + "ml._types:ChunkingConfig": { + "type": "object", + "properties": { + "mode": { + "$ref": "#/components/schemas/ml._types:ChunkingMode" + }, + "time_span": { + "$ref": "#/components/schemas/_types:Duration" + } + }, + "required": [ + "mode" + ] + }, + "ml._types:ChunkingMode": { + "type": "string", + "enum": [ + "auto", + "manual", + "off" + ] + }, + "ml._types:DelayedDataCheckConfig": { + "type": "object", + "properties": { + "check_window": { + "$ref": "#/components/schemas/_types:Duration" + }, + "enabled": { + "description": "Specifies whether the datafeed periodically checks for delayed data.", + "type": "boolean" + } + }, + "required": [ + "enabled" + ] + }, + "_types:Indices": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:IndexName" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:IndexName" + } + } + ] + }, + "_types:IndicesOptions": { + "type": "object", + "properties": { + "allow_no_indices": { + "description": "If false, the request returns an error if any wildcard expression, index alias, or `_all` value targets only\nmissing or closed indices. This behavior applies even if the request targets other open indices. For example,\na request targeting `foo*,bar*` returns an error if an index starts with `foo` but no index starts with `bar`.", + "type": "boolean" + }, + "expand_wildcards": { + "$ref": "#/components/schemas/_types:ExpandWildcards" + }, + "ignore_unavailable": { + "description": "If true, missing or closed indices are not included in the response.", + "type": "boolean" + }, + "ignore_throttled": { + "description": "If true, concrete, expanded or aliased indices are ignored when frozen.", + "type": "boolean" + } + } + }, + "_types:ExpandWildcards": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:ExpandWildcard" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:ExpandWildcard" + } + } + ] + }, + "_types:ExpandWildcard": { + "type": "string", + "enum": [ + "all", + "open", + "closed", + "hidden", + "none" + ] + }, + "_types.mapping:RuntimeFields": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.mapping:RuntimeField" + } + }, + "_types.mapping:RuntimeField": { + "type": "object", + "properties": { + "fetch_fields": { + "description": "For type `lookup`", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.mapping:RuntimeFieldFetchFields" + } + }, + "format": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html" + }, + "description": "A custom format for `date` type runtime fields.", + "type": "string" + }, + "input_field": { + "$ref": "#/components/schemas/_types:Field" + }, + "target_field": { + "$ref": "#/components/schemas/_types:Field" + }, + "target_index": { + "$ref": "#/components/schemas/_types:IndexName" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "type": { + "$ref": "#/components/schemas/_types.mapping:RuntimeFieldType" + } + }, + "required": [ + "type" + ] + }, + "_types.mapping:RuntimeFieldFetchFields": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "format": { + "type": "string" + } + }, + "required": [ + "field" + ] + }, + "_types.mapping:RuntimeFieldType": { + "type": "string", + "enum": [ + "boolean", + "composite", + "date", + "double", + "geo_point", + "ip", + "keyword", + "long", + "lookup" + ] + }, + "_types:HttpHeaders": { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + } + } + } + } +} \ No newline at end of file diff --git a/x-pack/packages/ml/json_schemas/src/put___transform__transform_id___pivot_schema.json b/x-pack/packages/ml/json_schemas/src/put___transform__transform_id___pivot_schema.json new file mode 100644 index 0000000000000..4aedd396c40c1 --- /dev/null +++ b/x-pack/packages/ml/json_schemas/src/put___transform__transform_id___pivot_schema.json @@ -0,0 +1,7852 @@ +{ + "type": "object", + "properties": { + "aggregations": { + "description": "Defines how to aggregate the grouped data. The following aggregations are currently supported: average, bucket\nscript, bucket selector, cardinality, filter, geo bounds, geo centroid, geo line, max, median absolute deviation,\nmin, missing, percentiles, rare terms, scripted metric, stats, sum, terms, top metrics, value count, weighted\naverage.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.aggregations:AggregationContainer" + } + }, + "group_by": { + "description": "Defines how to group the data. More than one grouping can be defined per pivot. The following groupings are\ncurrently supported: date histogram, geotile grid, histogram, terms.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/transform._types:PivotGroupByContainer" + } + } + }, + "components": { + "schemas": { + "_types.aggregations:AggregationContainer": { + "allOf": [ + { + "type": "object", + "properties": { + "aggregations": { + "description": "Sub-aggregations for this aggregation.\nOnly applies to bucket aggregations.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.aggregations:AggregationContainer" + } + }, + "meta": { + "$ref": "#/components/schemas/_types:Metadata" + } + } + }, + { + "type": "object", + "properties": { + "adjacency_matrix": { + "$ref": "#/components/schemas/_types.aggregations:AdjacencyMatrixAggregation" + }, + "auto_date_histogram": { + "$ref": "#/components/schemas/_types.aggregations:AutoDateHistogramAggregation" + }, + "avg": { + "$ref": "#/components/schemas/_types.aggregations:AverageAggregation" + }, + "avg_bucket": { + "$ref": "#/components/schemas/_types.aggregations:AverageBucketAggregation" + }, + "boxplot": { + "$ref": "#/components/schemas/_types.aggregations:BoxplotAggregation" + }, + "bucket_script": { + "$ref": "#/components/schemas/_types.aggregations:BucketScriptAggregation" + }, + "bucket_selector": { + "$ref": "#/components/schemas/_types.aggregations:BucketSelectorAggregation" + }, + "bucket_sort": { + "$ref": "#/components/schemas/_types.aggregations:BucketSortAggregation" + }, + "bucket_count_ks_test": { + "$ref": "#/components/schemas/_types.aggregations:BucketKsAggregation" + }, + "bucket_correlation": { + "$ref": "#/components/schemas/_types.aggregations:BucketCorrelationAggregation" + }, + "cardinality": { + "$ref": "#/components/schemas/_types.aggregations:CardinalityAggregation" + }, + "categorize_text": { + "$ref": "#/components/schemas/_types.aggregations:CategorizeTextAggregation" + }, + "children": { + "$ref": "#/components/schemas/_types.aggregations:ChildrenAggregation" + }, + "composite": { + "$ref": "#/components/schemas/_types.aggregations:CompositeAggregation" + }, + "cumulative_cardinality": { + "$ref": "#/components/schemas/_types.aggregations:CumulativeCardinalityAggregation" + }, + "cumulative_sum": { + "$ref": "#/components/schemas/_types.aggregations:CumulativeSumAggregation" + }, + "date_histogram": { + "$ref": "#/components/schemas/_types.aggregations:DateHistogramAggregation" + }, + "date_range": { + "$ref": "#/components/schemas/_types.aggregations:DateRangeAggregation" + }, + "derivative": { + "$ref": "#/components/schemas/_types.aggregations:DerivativeAggregation" + }, + "diversified_sampler": { + "$ref": "#/components/schemas/_types.aggregations:DiversifiedSamplerAggregation" + }, + "extended_stats": { + "$ref": "#/components/schemas/_types.aggregations:ExtendedStatsAggregation" + }, + "extended_stats_bucket": { + "$ref": "#/components/schemas/_types.aggregations:ExtendedStatsBucketAggregation" + }, + "frequent_item_sets": { + "$ref": "#/components/schemas/_types.aggregations:FrequentItemSetsAggregation" + }, + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "filters": { + "$ref": "#/components/schemas/_types.aggregations:FiltersAggregation" + }, + "geo_bounds": { + "$ref": "#/components/schemas/_types.aggregations:GeoBoundsAggregation" + }, + "geo_centroid": { + "$ref": "#/components/schemas/_types.aggregations:GeoCentroidAggregation" + }, + "geo_distance": { + "$ref": "#/components/schemas/_types.aggregations:GeoDistanceAggregation" + }, + "geohash_grid": { + "$ref": "#/components/schemas/_types.aggregations:GeoHashGridAggregation" + }, + "geo_line": { + "$ref": "#/components/schemas/_types.aggregations:GeoLineAggregation" + }, + "geotile_grid": { + "$ref": "#/components/schemas/_types.aggregations:GeoTileGridAggregation" + }, + "geohex_grid": { + "$ref": "#/components/schemas/_types.aggregations:GeohexGridAggregation" + }, + "global": { + "$ref": "#/components/schemas/_types.aggregations:GlobalAggregation" + }, + "histogram": { + "$ref": "#/components/schemas/_types.aggregations:HistogramAggregation" + }, + "ip_range": { + "$ref": "#/components/schemas/_types.aggregations:IpRangeAggregation" + }, + "ip_prefix": { + "$ref": "#/components/schemas/_types.aggregations:IpPrefixAggregation" + }, + "inference": { + "$ref": "#/components/schemas/_types.aggregations:InferenceAggregation" + }, + "line": { + "$ref": "#/components/schemas/_types.aggregations:GeoLineAggregation" + }, + "matrix_stats": { + "$ref": "#/components/schemas/_types.aggregations:MatrixStatsAggregation" + }, + "max": { + "$ref": "#/components/schemas/_types.aggregations:MaxAggregation" + }, + "max_bucket": { + "$ref": "#/components/schemas/_types.aggregations:MaxBucketAggregation" + }, + "median_absolute_deviation": { + "$ref": "#/components/schemas/_types.aggregations:MedianAbsoluteDeviationAggregation" + }, + "min": { + "$ref": "#/components/schemas/_types.aggregations:MinAggregation" + }, + "min_bucket": { + "$ref": "#/components/schemas/_types.aggregations:MinBucketAggregation" + }, + "missing": { + "$ref": "#/components/schemas/_types.aggregations:MissingAggregation" + }, + "moving_avg": { + "$ref": "#/components/schemas/_types.aggregations:MovingAverageAggregation" + }, + "moving_percentiles": { + "$ref": "#/components/schemas/_types.aggregations:MovingPercentilesAggregation" + }, + "moving_fn": { + "$ref": "#/components/schemas/_types.aggregations:MovingFunctionAggregation" + }, + "multi_terms": { + "$ref": "#/components/schemas/_types.aggregations:MultiTermsAggregation" + }, + "nested": { + "$ref": "#/components/schemas/_types.aggregations:NestedAggregation" + }, + "normalize": { + "$ref": "#/components/schemas/_types.aggregations:NormalizeAggregation" + }, + "parent": { + "$ref": "#/components/schemas/_types.aggregations:ParentAggregation" + }, + "percentile_ranks": { + "$ref": "#/components/schemas/_types.aggregations:PercentileRanksAggregation" + }, + "percentiles": { + "$ref": "#/components/schemas/_types.aggregations:PercentilesAggregation" + }, + "percentiles_bucket": { + "$ref": "#/components/schemas/_types.aggregations:PercentilesBucketAggregation" + }, + "range": { + "$ref": "#/components/schemas/_types.aggregations:RangeAggregation" + }, + "rare_terms": { + "$ref": "#/components/schemas/_types.aggregations:RareTermsAggregation" + }, + "rate": { + "$ref": "#/components/schemas/_types.aggregations:RateAggregation" + }, + "reverse_nested": { + "$ref": "#/components/schemas/_types.aggregations:ReverseNestedAggregation" + }, + "sampler": { + "$ref": "#/components/schemas/_types.aggregations:SamplerAggregation" + }, + "scripted_metric": { + "$ref": "#/components/schemas/_types.aggregations:ScriptedMetricAggregation" + }, + "serial_diff": { + "$ref": "#/components/schemas/_types.aggregations:SerialDifferencingAggregation" + }, + "significant_terms": { + "$ref": "#/components/schemas/_types.aggregations:SignificantTermsAggregation" + }, + "significant_text": { + "$ref": "#/components/schemas/_types.aggregations:SignificantTextAggregation" + }, + "stats": { + "$ref": "#/components/schemas/_types.aggregations:StatsAggregation" + }, + "stats_bucket": { + "$ref": "#/components/schemas/_types.aggregations:StatsBucketAggregation" + }, + "string_stats": { + "$ref": "#/components/schemas/_types.aggregations:StringStatsAggregation" + }, + "sum": { + "$ref": "#/components/schemas/_types.aggregations:SumAggregation" + }, + "sum_bucket": { + "$ref": "#/components/schemas/_types.aggregations:SumBucketAggregation" + }, + "terms": { + "$ref": "#/components/schemas/_types.aggregations:TermsAggregation" + }, + "top_hits": { + "$ref": "#/components/schemas/_types.aggregations:TopHitsAggregation" + }, + "t_test": { + "$ref": "#/components/schemas/_types.aggregations:TTestAggregation" + }, + "top_metrics": { + "$ref": "#/components/schemas/_types.aggregations:TopMetricsAggregation" + }, + "value_count": { + "$ref": "#/components/schemas/_types.aggregations:ValueCountAggregation" + }, + "weighted_avg": { + "$ref": "#/components/schemas/_types.aggregations:WeightedAverageAggregation" + }, + "variable_width_histogram": { + "$ref": "#/components/schemas/_types.aggregations:VariableWidthHistogramAggregation" + } + }, + "minProperties": 1, + "maxProperties": 1 + } + ] + }, + "_types:Metadata": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "_types.aggregations:AdjacencyMatrixAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "filters": { + "description": "Filters used to create buckets.\nAt least one filter is required.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "separator": { + "description": "Separator used to concatenate filter names. Defaults to &.", + "type": "string" + } + } + } + ] + }, + "_types.aggregations:BucketAggregationBase": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:Aggregation" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:Aggregation": { + "type": "object" + }, + "_types.query_dsl:QueryContainer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html" + }, + "type": "object", + "properties": { + "bool": { + "$ref": "#/components/schemas/_types.query_dsl:BoolQuery" + }, + "boosting": { + "$ref": "#/components/schemas/_types.query_dsl:BoostingQuery" + }, + "common": { + "deprecated": true, + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:CommonTermsQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "combined_fields": { + "$ref": "#/components/schemas/_types.query_dsl:CombinedFieldsQuery" + }, + "constant_score": { + "$ref": "#/components/schemas/_types.query_dsl:ConstantScoreQuery" + }, + "dis_max": { + "$ref": "#/components/schemas/_types.query_dsl:DisMaxQuery" + }, + "distance_feature": { + "$ref": "#/components/schemas/_types.query_dsl:DistanceFeatureQuery" + }, + "exists": { + "$ref": "#/components/schemas/_types.query_dsl:ExistsQuery" + }, + "function_score": { + "$ref": "#/components/schemas/_types.query_dsl:FunctionScoreQuery" + }, + "fuzzy": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html" + }, + "description": "Returns documents that contain terms similar to the search term, as measured by a Levenshtein edit distance.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:FuzzyQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "geo_bounding_box": { + "$ref": "#/components/schemas/_types.query_dsl:GeoBoundingBoxQuery" + }, + "geo_distance": { + "$ref": "#/components/schemas/_types.query_dsl:GeoDistanceQuery" + }, + "geo_polygon": { + "$ref": "#/components/schemas/_types.query_dsl:GeoPolygonQuery" + }, + "geo_shape": { + "$ref": "#/components/schemas/_types.query_dsl:GeoShapeQuery" + }, + "has_child": { + "$ref": "#/components/schemas/_types.query_dsl:HasChildQuery" + }, + "has_parent": { + "$ref": "#/components/schemas/_types.query_dsl:HasParentQuery" + }, + "ids": { + "$ref": "#/components/schemas/_types.query_dsl:IdsQuery" + }, + "intervals": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-intervals-query.html" + }, + "description": "Returns documents based on the order and proximity of matching terms.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "knn": { + "$ref": "#/components/schemas/_types:KnnQuery" + }, + "match": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html" + }, + "description": "Returns documents that match a provided text, number, date or boolean value.\nThe provided text is analyzed before matching.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:MatchQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "match_all": { + "$ref": "#/components/schemas/_types.query_dsl:MatchAllQuery" + }, + "match_bool_prefix": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-bool-prefix-query.html" + }, + "description": "Analyzes its input and constructs a `bool` query from the terms.\nEach term except the last is used in a `term` query.\nThe last term is used in a prefix query.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:MatchBoolPrefixQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "match_none": { + "$ref": "#/components/schemas/_types.query_dsl:MatchNoneQuery" + }, + "match_phrase": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query-phrase.html" + }, + "description": "Analyzes the text and creates a phrase query out of the analyzed text.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:MatchPhraseQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "match_phrase_prefix": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query-phrase-prefix.html" + }, + "description": "Returns documents that contain the words of a provided text, in the same order as provided.\nThe last term of the provided text is treated as a prefix, matching any words that begin with that term.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:MatchPhrasePrefixQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "more_like_this": { + "$ref": "#/components/schemas/_types.query_dsl:MoreLikeThisQuery" + }, + "multi_match": { + "$ref": "#/components/schemas/_types.query_dsl:MultiMatchQuery" + }, + "nested": { + "$ref": "#/components/schemas/_types.query_dsl:NestedQuery" + }, + "parent_id": { + "$ref": "#/components/schemas/_types.query_dsl:ParentIdQuery" + }, + "percolate": { + "$ref": "#/components/schemas/_types.query_dsl:PercolateQuery" + }, + "pinned": { + "$ref": "#/components/schemas/_types.query_dsl:PinnedQuery" + }, + "prefix": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-prefix-query.html" + }, + "description": "Returns documents that contain a specific prefix in a provided field.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:PrefixQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "query_string": { + "$ref": "#/components/schemas/_types.query_dsl:QueryStringQuery" + }, + "range": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html" + }, + "description": "Returns documents that contain terms within a provided range.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:RangeQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "rank_feature": { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureQuery" + }, + "regexp": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html" + }, + "description": "Returns documents that contain terms matching a regular expression.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:RegexpQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "rule_query": { + "$ref": "#/components/schemas/_types.query_dsl:RuleQuery" + }, + "script": { + "$ref": "#/components/schemas/_types.query_dsl:ScriptQuery" + }, + "script_score": { + "$ref": "#/components/schemas/_types.query_dsl:ScriptScoreQuery" + }, + "shape": { + "$ref": "#/components/schemas/_types.query_dsl:ShapeQuery" + }, + "simple_query_string": { + "$ref": "#/components/schemas/_types.query_dsl:SimpleQueryStringQuery" + }, + "span_containing": { + "$ref": "#/components/schemas/_types.query_dsl:SpanContainingQuery" + }, + "field_masking_span": { + "$ref": "#/components/schemas/_types.query_dsl:SpanFieldMaskingQuery" + }, + "span_first": { + "$ref": "#/components/schemas/_types.query_dsl:SpanFirstQuery" + }, + "span_multi": { + "$ref": "#/components/schemas/_types.query_dsl:SpanMultiTermQuery" + }, + "span_near": { + "$ref": "#/components/schemas/_types.query_dsl:SpanNearQuery" + }, + "span_not": { + "$ref": "#/components/schemas/_types.query_dsl:SpanNotQuery" + }, + "span_or": { + "$ref": "#/components/schemas/_types.query_dsl:SpanOrQuery" + }, + "span_term": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-span-term-query.html" + }, + "description": "Matches spans containing a term.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:SpanTermQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "span_within": { + "$ref": "#/components/schemas/_types.query_dsl:SpanWithinQuery" + }, + "term": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html" + }, + "description": "Returns documents that contain an exact term in a provided field.\nTo return a document, the query term must exactly match the queried field's value, including whitespace and capitalization.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:TermQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "terms": { + "$ref": "#/components/schemas/_types.query_dsl:TermsQuery" + }, + "terms_set": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-set-query.html" + }, + "description": "Returns documents that contain a minimum number of exact terms in a provided field.\nTo return a document, a required number of terms must exactly match the field values, including whitespace and capitalization.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:TermsSetQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "text_expansion": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-text-expansion-query.html" + }, + "description": "Uses a natural language processing model to convert the query text into a list of token-weight pairs which are then used in a query against a sparse vector or rank features field.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:TextExpansionQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "weighted_tokens": { + "description": "Supports returning text_expansion query results by sending in precomputed tokens with the query.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:WeightedTokensQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "wildcard": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html" + }, + "description": "Returns documents that contain terms matching a wildcard pattern.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:WildcardQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "wrapper": { + "$ref": "#/components/schemas/_types.query_dsl:WrapperQuery" + }, + "type": { + "$ref": "#/components/schemas/_types.query_dsl:TypeQuery" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types.query_dsl:BoolQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "filter": { + "description": "The clause (query) must appear in matching documents.\nHowever, unlike `must`, the score of the query will be ignored.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + } + ] + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "must": { + "description": "The clause (query) must appear in matching documents and will contribute to the score.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + } + ] + }, + "must_not": { + "description": "The clause (query) must not appear in the matching documents.\nBecause scoring is ignored, a score of `0` is returned for all documents.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + } + ] + }, + "should": { + "description": "The clause (query) should appear in the matching document.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + } + ] + } + } + } + ] + }, + "_types.query_dsl:QueryBase": { + "type": "object", + "properties": { + "boost": { + "description": "Floating point number used to decrease or increase the relevance scores of the query.\nBoost values are relative to the default value of 1.0.\nA boost value between 0 and 1.0 decreases the relevance score.\nA value greater than 1.0 increases the relevance score.", + "type": "number" + }, + "_name": { + "type": "string" + } + } + }, + "_types:MinimumShouldMatch": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-minimum-should-match.html" + }, + "description": "The minimum number of terms that should match as integer, percentage or range", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "_types.query_dsl:BoostingQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "negative_boost": { + "description": "Floating point number between 0 and 1.0 used to decrease the relevance scores of documents matching the `negative` query.", + "type": "number" + }, + "negative": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "positive": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "required": [ + "negative_boost", + "negative", + "positive" + ] + } + ] + }, + "_types.query_dsl:CommonTermsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "type": "string" + }, + "cutoff_frequency": { + "type": "number" + }, + "high_freq_operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "low_freq_operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "query": { + "type": "string" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:Operator": { + "type": "string", + "enum": [ + "and", + "AND", + "or", + "OR" + ] + }, + "_types.query_dsl:CombinedFieldsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "fields": { + "description": "List of fields to search. Field wildcard patterns are allowed. Only `text` fields are supported, and they must all have the same search `analyzer`.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "query": { + "description": "Text to search for in the provided `fields`.\nThe `combined_fields` query analyzes the provided text before performing a search.", + "type": "string" + }, + "auto_generate_synonyms_phrase_query": { + "description": "If true, match phrase queries are automatically created for multi-term synonyms.", + "type": "boolean" + }, + "operator": { + "$ref": "#/components/schemas/_types.query_dsl:CombinedFieldsOperator" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "zero_terms_query": { + "$ref": "#/components/schemas/_types.query_dsl:CombinedFieldsZeroTerms" + } + }, + "required": [ + "fields", + "query" + ] + } + ] + }, + "_types:Field": { + "description": "Path to field or array of paths. Some API's support wildcards in the path to select multiple fields.", + "type": "string" + }, + "_types.query_dsl:CombinedFieldsOperator": { + "type": "string", + "enum": [ + "or", + "and" + ] + }, + "_types.query_dsl:CombinedFieldsZeroTerms": { + "type": "string", + "enum": [ + "none", + "all" + ] + }, + "_types.query_dsl:ConstantScoreQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "required": [ + "filter" + ] + } + ] + }, + "_types.query_dsl:DisMaxQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "queries": { + "description": "One or more query clauses.\nReturned documents must match one or more of these queries.\nIf a document matches multiple queries, Elasticsearch uses the highest relevance score.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "tie_breaker": { + "description": "Floating point number between 0 and 1.0 used to increase the relevance scores of documents matching multiple query clauses.", + "type": "number" + } + }, + "required": [ + "queries" + ] + } + ] + }, + "_types.query_dsl:DistanceFeatureQuery": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:GeoDistanceFeatureQuery" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:DateDistanceFeatureQuery" + } + ] + }, + "_types.query_dsl:GeoDistanceFeatureQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DistanceFeatureQueryBaseGeoLocationDistance" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:DistanceFeatureQueryBaseGeoLocationDistance": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "origin": { + "$ref": "#/components/schemas/_types:GeoLocation" + }, + "pivot": { + "$ref": "#/components/schemas/_types:Distance" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "origin", + "pivot", + "field" + ] + } + ] + }, + "_types:GeoLocation": { + "description": "A latitude/longitude as a 2 dimensional point. It can be represented in various ways:\n- as a `{lat, long}` object\n- as a geo hash value\n- as a `[lon, lat]` array\n- as a string in `\", \"` or WKT point formats", + "oneOf": [ + { + "$ref": "#/components/schemas/_types:LatLonGeoLocation" + }, + { + "$ref": "#/components/schemas/_types:GeoHashLocation" + }, + { + "type": "array", + "items": { + "type": "number" + } + }, + { + "type": "string" + } + ] + }, + "_types:LatLonGeoLocation": { + "type": "object", + "properties": { + "lat": { + "description": "Latitude", + "type": "number" + }, + "lon": { + "description": "Longitude", + "type": "number" + } + }, + "required": [ + "lat", + "lon" + ] + }, + "_types:GeoHashLocation": { + "type": "object", + "properties": { + "geohash": { + "$ref": "#/components/schemas/_types:GeoHash" + } + }, + "required": [ + "geohash" + ] + }, + "_types:GeoHash": { + "type": "string" + }, + "_types:Distance": { + "type": "string" + }, + "_types.query_dsl:DateDistanceFeatureQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DistanceFeatureQueryBaseDateMathDuration" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:DistanceFeatureQueryBaseDateMathDuration": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "origin": { + "$ref": "#/components/schemas/_types:DateMath" + }, + "pivot": { + "$ref": "#/components/schemas/_types:Duration" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "origin", + "pivot", + "field" + ] + } + ] + }, + "_types:DateMath": { + "type": "string" + }, + "_types:Duration": { + "externalDocs": { + "url": "https://github.com/elastic/elasticsearch/blob/current/libs/core/src/main/java/org/elasticsearch/core/TimeValue.java" + }, + "description": "A duration. Units can be `nanos`, `micros`, `ms` (milliseconds), `s` (seconds), `m` (minutes), `h` (hours) and\n`d` (days). Also accepts \"0\" without a unit and \"-1\" to indicate an unspecified value.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "string", + "enum": [ + "-1" + ] + }, + { + "type": "string", + "enum": [ + "0" + ] + } + ] + }, + "_types.query_dsl:ExistsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "field" + ] + } + ] + }, + "_types.query_dsl:FunctionScoreQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "boost_mode": { + "$ref": "#/components/schemas/_types.query_dsl:FunctionBoostMode" + }, + "functions": { + "description": "One or more functions that compute a new score for each document returned by the query.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:FunctionScoreContainer" + } + }, + "max_boost": { + "description": "Restricts the new score to not exceed the provided limit.", + "type": "number" + }, + "min_score": { + "description": "Excludes documents that do not meet the provided score threshold.", + "type": "number" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "score_mode": { + "$ref": "#/components/schemas/_types.query_dsl:FunctionScoreMode" + } + } + } + ] + }, + "_types.query_dsl:FunctionBoostMode": { + "type": "string", + "enum": [ + "multiply", + "replace", + "sum", + "avg", + "max", + "min" + ] + }, + "_types.query_dsl:FunctionScoreContainer": { + "allOf": [ + { + "type": "object", + "properties": { + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "weight": { + "type": "number" + } + } + }, + { + "type": "object", + "properties": { + "exp": { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunction" + }, + "gauss": { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunction" + }, + "linear": { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunction" + }, + "field_value_factor": { + "$ref": "#/components/schemas/_types.query_dsl:FieldValueFactorScoreFunction" + }, + "random_score": { + "$ref": "#/components/schemas/_types.query_dsl:RandomScoreFunction" + }, + "script_score": { + "$ref": "#/components/schemas/_types.query_dsl:ScriptScoreFunction" + } + }, + "minProperties": 1, + "maxProperties": 1 + } + ] + }, + "_types.query_dsl:DecayFunction": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DateDecayFunction" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:NumericDecayFunction" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:GeoDecayFunction" + } + ] + }, + "_types.query_dsl:DateDecayFunction": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunctionBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:DecayFunctionBase": { + "type": "object", + "properties": { + "multi_value_mode": { + "$ref": "#/components/schemas/_types.query_dsl:MultiValueMode" + } + } + }, + "_types.query_dsl:MultiValueMode": { + "type": "string", + "enum": [ + "min", + "max", + "avg", + "sum" + ] + }, + "_types.query_dsl:NumericDecayFunction": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunctionBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:GeoDecayFunction": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DecayFunctionBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:FieldValueFactorScoreFunction": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "factor": { + "description": "Optional factor to multiply the field value with.", + "type": "number" + }, + "missing": { + "description": "Value used if the document doesn’t have that field.\nThe modifier and factor are still applied to it as though it were read from the document.", + "type": "number" + }, + "modifier": { + "$ref": "#/components/schemas/_types.query_dsl:FieldValueFactorModifier" + } + }, + "required": [ + "field" + ] + }, + "_types.query_dsl:FieldValueFactorModifier": { + "type": "string", + "enum": [ + "none", + "log", + "log1p", + "log2p", + "ln", + "ln1p", + "ln2p", + "square", + "sqrt", + "reciprocal" + ] + }, + "_types.query_dsl:RandomScoreFunction": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "seed": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + } + } + }, + "_types.query_dsl:ScriptScoreFunction": { + "type": "object", + "properties": { + "script": { + "$ref": "#/components/schemas/_types:Script" + } + }, + "required": [ + "script" + ] + }, + "_types:Script": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:InlineScript" + }, + { + "$ref": "#/components/schemas/_types:StoredScriptId" + } + ] + }, + "_types:InlineScript": { + "allOf": [ + { + "$ref": "#/components/schemas/_types:ScriptBase" + }, + { + "type": "object", + "properties": { + "lang": { + "$ref": "#/components/schemas/_types:ScriptLanguage" + }, + "options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "source": { + "description": "The script source.", + "type": "string" + } + }, + "required": [ + "source" + ] + } + ] + }, + "_types:ScriptBase": { + "type": "object", + "properties": { + "params": { + "description": "Specifies any named parameters that are passed into the script as variables.\nUse parameters instead of hard-coded values to decrease compile time.", + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + }, + "_types:ScriptLanguage": { + "anyOf": [ + { + "type": "string", + "enum": [ + "painless", + "expression", + "mustache", + "java" + ] + }, + { + "type": "string" + } + ] + }, + "_types:StoredScriptId": { + "allOf": [ + { + "$ref": "#/components/schemas/_types:ScriptBase" + }, + { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/_types:Id" + } + }, + "required": [ + "id" + ] + } + ] + }, + "_types:Id": { + "type": "string" + }, + "_types.query_dsl:FunctionScoreMode": { + "type": "string", + "enum": [ + "multiply", + "sum", + "avg", + "first", + "max", + "min" + ] + }, + "_types.query_dsl:FuzzyQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "max_expansions": { + "description": "Maximum number of variations created.", + "type": "number" + }, + "prefix_length": { + "description": "Number of beginning characters left unchanged when creating expansions.", + "type": "number" + }, + "rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "transpositions": { + "description": "Indicates whether edits include transpositions of two adjacent characters (for example `ab` to `ba`).", + "type": "boolean" + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "value": { + "description": "Term you wish to find in the provided field.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ] + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types:MultiTermQueryRewrite": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-term-rewrite.html" + }, + "type": "string" + }, + "_types:Fuzziness": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#fuzziness" + }, + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "_types.query_dsl:GeoBoundingBoxQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/_types.query_dsl:GeoExecution" + }, + "validation_method": { + "$ref": "#/components/schemas/_types.query_dsl:GeoValidationMethod" + }, + "ignore_unmapped": { + "description": "Set to `true` to ignore an unmapped field and not match any documents for this query.\nSet to `false` to throw an exception if the field is not mapped.", + "type": "boolean" + } + } + } + ] + }, + "_types.query_dsl:GeoExecution": { + "type": "string", + "enum": [ + "memory", + "indexed" + ] + }, + "_types.query_dsl:GeoValidationMethod": { + "type": "string", + "enum": [ + "coerce", + "ignore_malformed", + "strict" + ] + }, + "_types.query_dsl:GeoDistanceQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "distance": { + "$ref": "#/components/schemas/_types:Distance" + }, + "distance_type": { + "$ref": "#/components/schemas/_types:GeoDistanceType" + }, + "validation_method": { + "$ref": "#/components/schemas/_types.query_dsl:GeoValidationMethod" + }, + "ignore_unmapped": { + "description": "Set to `true` to ignore an unmapped field and not match any documents for this query.\nSet to `false` to throw an exception if the field is not mapped.", + "type": "boolean" + } + }, + "required": [ + "distance" + ] + } + ] + }, + "_types:GeoDistanceType": { + "type": "string", + "enum": [ + "arc", + "plane" + ] + }, + "_types.query_dsl:GeoPolygonQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "validation_method": { + "$ref": "#/components/schemas/_types.query_dsl:GeoValidationMethod" + }, + "ignore_unmapped": { + "type": "boolean" + } + } + } + ] + }, + "_types.query_dsl:GeoShapeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "ignore_unmapped": { + "description": "Set to `true` to ignore an unmapped field and not match any documents for this query.\nSet to `false` to throw an exception if the field is not mapped.", + "type": "boolean" + } + } + } + ] + }, + "_types.query_dsl:HasChildQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "ignore_unmapped": { + "description": "Indicates whether to ignore an unmapped `type` and not return any documents instead of an error.", + "type": "boolean" + }, + "inner_hits": { + "$ref": "#/components/schemas/_global.search._types:InnerHits" + }, + "max_children": { + "description": "Maximum number of child documents that match the query allowed for a returned parent document.\nIf the parent document exceeds this limit, it is excluded from the search results.", + "type": "number" + }, + "min_children": { + "description": "Minimum number of child documents that match the query required to match the query for a returned parent document.\nIf the parent document does not meet this limit, it is excluded from the search results.", + "type": "number" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "score_mode": { + "$ref": "#/components/schemas/_types.query_dsl:ChildScoreMode" + }, + "type": { + "$ref": "#/components/schemas/_types:RelationName" + } + }, + "required": [ + "query", + "type" + ] + } + ] + }, + "_global.search._types:InnerHits": { + "type": "object", + "properties": { + "name": { + "$ref": "#/components/schemas/_types:Name" + }, + "size": { + "description": "The maximum number of hits to return per `inner_hits`.", + "type": "number" + }, + "from": { + "description": "Inner hit starting document offset.", + "type": "number" + }, + "collapse": { + "$ref": "#/components/schemas/_global.search._types:FieldCollapse" + }, + "docvalue_fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:FieldAndFormat" + } + }, + "explain": { + "type": "boolean" + }, + "highlight": { + "$ref": "#/components/schemas/_global.search._types:Highlight" + }, + "ignore_unmapped": { + "type": "boolean" + }, + "script_fields": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types:ScriptField" + } + }, + "seq_no_primary_term": { + "type": "boolean" + }, + "fields": { + "$ref": "#/components/schemas/_types:Fields" + }, + "sort": { + "$ref": "#/components/schemas/_types:Sort" + }, + "_source": { + "$ref": "#/components/schemas/_global.search._types:SourceConfig" + }, + "stored_fields": { + "$ref": "#/components/schemas/_types:Fields" + }, + "track_scores": { + "type": "boolean" + }, + "version": { + "type": "boolean" + } + } + }, + "_types:Name": { + "type": "string" + }, + "_global.search._types:FieldCollapse": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "inner_hits": { + "description": "The number of inner hits and their sort order", + "oneOf": [ + { + "$ref": "#/components/schemas/_global.search._types:InnerHits" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_global.search._types:InnerHits" + } + } + ] + }, + "max_concurrent_group_searches": { + "description": "The number of concurrent requests allowed to retrieve the inner_hits per group", + "type": "number" + }, + "collapse": { + "$ref": "#/components/schemas/_global.search._types:FieldCollapse" + } + }, + "required": [ + "field" + ] + }, + "_types.query_dsl:FieldAndFormat": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "format": { + "description": "Format in which the values are returned.", + "type": "string" + }, + "include_unmapped": { + "type": "boolean" + } + }, + "required": [ + "field" + ] + }, + "_global.search._types:Highlight": { + "allOf": [ + { + "$ref": "#/components/schemas/_global.search._types:HighlightBase" + }, + { + "type": "object", + "properties": { + "encoder": { + "$ref": "#/components/schemas/_global.search._types:HighlighterEncoder" + }, + "fields": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_global.search._types:HighlightField" + } + } + }, + "required": [ + "fields" + ] + } + ] + }, + "_global.search._types:HighlightBase": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/_global.search._types:HighlighterType" + }, + "boundary_chars": { + "description": "A string that contains each boundary character.", + "type": "string" + }, + "boundary_max_scan": { + "description": "How far to scan for boundary characters.", + "type": "number" + }, + "boundary_scanner": { + "$ref": "#/components/schemas/_global.search._types:BoundaryScanner" + }, + "boundary_scanner_locale": { + "description": "Controls which locale is used to search for sentence and word boundaries.\nThis parameter takes a form of a language tag, for example: `\"en-US\"`, `\"fr-FR\"`, `\"ja-JP\"`.", + "type": "string" + }, + "force_source": { + "deprecated": true, + "type": "boolean" + }, + "fragmenter": { + "$ref": "#/components/schemas/_global.search._types:HighlighterFragmenter" + }, + "fragment_size": { + "description": "The size of the highlighted fragment in characters.", + "type": "number" + }, + "highlight_filter": { + "type": "boolean" + }, + "highlight_query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "max_fragment_length": { + "type": "number" + }, + "max_analyzed_offset": { + "description": "If set to a non-negative value, highlighting stops at this defined maximum limit.\nThe rest of the text is not processed, thus not highlighted and no error is returned\nThe `max_analyzed_offset` query setting does not override the `index.highlight.max_analyzed_offset` setting, which prevails when it’s set to lower value than the query setting.", + "type": "number" + }, + "no_match_size": { + "description": "The amount of text you want to return from the beginning of the field if there are no matching fragments to highlight.", + "type": "number" + }, + "number_of_fragments": { + "description": "The maximum number of fragments to return.\nIf the number of fragments is set to `0`, no fragments are returned.\nInstead, the entire field contents are highlighted and returned.\nThis can be handy when you need to highlight short texts such as a title or address, but fragmentation is not required.\nIf `number_of_fragments` is `0`, `fragment_size` is ignored.", + "type": "number" + }, + "options": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "order": { + "$ref": "#/components/schemas/_global.search._types:HighlighterOrder" + }, + "phrase_limit": { + "description": "Controls the number of matching phrases in a document that are considered.\nPrevents the `fvh` highlighter from analyzing too many phrases and consuming too much memory.\nWhen using `matched_fields`, `phrase_limit` phrases per matched field are considered. Raising the limit increases query time and consumes more memory.\nOnly supported by the `fvh` highlighter.", + "type": "number" + }, + "post_tags": { + "description": "Use in conjunction with `pre_tags` to define the HTML tags to use for the highlighted text.\nBy default, highlighted text is wrapped in `` and `` tags.", + "type": "array", + "items": { + "type": "string" + } + }, + "pre_tags": { + "description": "Use in conjunction with `post_tags` to define the HTML tags to use for the highlighted text.\nBy default, highlighted text is wrapped in `` and `` tags.", + "type": "array", + "items": { + "type": "string" + } + }, + "require_field_match": { + "description": "By default, only fields that contains a query match are highlighted.\nSet to `false` to highlight all fields.", + "type": "boolean" + }, + "tags_schema": { + "$ref": "#/components/schemas/_global.search._types:HighlighterTagsSchema" + } + } + }, + "_global.search._types:HighlighterType": { + "anyOf": [ + { + "type": "string", + "enum": [ + "plain", + "fvh", + "unified" + ] + }, + { + "type": "string" + } + ] + }, + "_global.search._types:BoundaryScanner": { + "type": "string", + "enum": [ + "chars", + "sentence", + "word" + ] + }, + "_global.search._types:HighlighterFragmenter": { + "type": "string", + "enum": [ + "simple", + "span" + ] + }, + "_global.search._types:HighlighterOrder": { + "type": "string", + "enum": [ + "score" + ] + }, + "_global.search._types:HighlighterTagsSchema": { + "type": "string", + "enum": [ + "styled" + ] + }, + "_global.search._types:HighlighterEncoder": { + "type": "string", + "enum": [ + "default", + "html" + ] + }, + "_global.search._types:HighlightField": { + "allOf": [ + { + "$ref": "#/components/schemas/_global.search._types:HighlightBase" + }, + { + "type": "object", + "properties": { + "fragment_offset": { + "type": "number" + }, + "matched_fields": { + "$ref": "#/components/schemas/_types:Fields" + }, + "analyzer": { + "$ref": "#/components/schemas/_types.analysis:Analyzer" + } + } + } + ] + }, + "_types:Fields": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:Field" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + } + ] + }, + "_types.analysis:Analyzer": { + "discriminator": { + "propertyName": "type" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/_types.analysis:CustomAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:FingerprintAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:KeywordAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:LanguageAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:NoriAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:PatternAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:SimpleAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:StandardAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:StopAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:WhitespaceAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:IcuAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:KuromojiAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:SnowballAnalyzer" + }, + { + "$ref": "#/components/schemas/_types.analysis:DutchAnalyzer" + } + ] + }, + "_types.analysis:CustomAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "custom" + ] + }, + "char_filter": { + "type": "array", + "items": { + "type": "string" + } + }, + "filter": { + "type": "array", + "items": { + "type": "string" + } + }, + "position_increment_gap": { + "type": "number" + }, + "position_offset_gap": { + "type": "number" + }, + "tokenizer": { + "type": "string" + } + }, + "required": [ + "type", + "tokenizer" + ] + }, + "_types.analysis:FingerprintAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "fingerprint" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "max_output_size": { + "type": "number" + }, + "preserve_original": { + "type": "boolean" + }, + "separator": { + "type": "string" + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + }, + "stopwords_path": { + "type": "string" + } + }, + "required": [ + "type", + "max_output_size", + "preserve_original", + "separator" + ] + }, + "_types:VersionString": { + "type": "string" + }, + "_types.analysis:StopWords": { + "description": "Language value, such as _arabic_ or _thai_. Defaults to _english_.\nEach language value corresponds to a predefined list of stop words in Lucene. See Stop words by language for supported language values and their stop words.\nAlso accepts an array of stop words.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "_types.analysis:KeywordAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "keyword" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:LanguageAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "language" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "language": { + "$ref": "#/components/schemas/_types.analysis:Language" + }, + "stem_exclusion": { + "type": "array", + "items": { + "type": "string" + } + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + }, + "stopwords_path": { + "type": "string" + } + }, + "required": [ + "type", + "language", + "stem_exclusion" + ] + }, + "_types.analysis:Language": { + "type": "string", + "enum": [ + "Arabic", + "Armenian", + "Basque", + "Brazilian", + "Bulgarian", + "Catalan", + "Chinese", + "Cjk", + "Czech", + "Danish", + "Dutch", + "English", + "Estonian", + "Finnish", + "French", + "Galician", + "German", + "Greek", + "Hindi", + "Hungarian", + "Indonesian", + "Irish", + "Italian", + "Latvian", + "Norwegian", + "Persian", + "Portuguese", + "Romanian", + "Russian", + "Sorani", + "Spanish", + "Swedish", + "Turkish", + "Thai" + ] + }, + "_types.analysis:NoriAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "nori" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "decompound_mode": { + "$ref": "#/components/schemas/_types.analysis:NoriDecompoundMode" + }, + "stoptags": { + "type": "array", + "items": { + "type": "string" + } + }, + "user_dictionary": { + "type": "string" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:NoriDecompoundMode": { + "type": "string", + "enum": [ + "discard", + "none", + "mixed" + ] + }, + "_types.analysis:PatternAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "pattern" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "flags": { + "type": "string" + }, + "lowercase": { + "type": "boolean" + }, + "pattern": { + "type": "string" + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + } + }, + "required": [ + "type", + "pattern" + ] + }, + "_types.analysis:SimpleAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "simple" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:StandardAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "standard" + ] + }, + "max_token_length": { + "type": "number" + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:StopAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "stop" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + }, + "stopwords_path": { + "type": "string" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:WhitespaceAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "whitespace" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + } + }, + "required": [ + "type" + ] + }, + "_types.analysis:IcuAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "icu_analyzer" + ] + }, + "method": { + "$ref": "#/components/schemas/_types.analysis:IcuNormalizationType" + }, + "mode": { + "$ref": "#/components/schemas/_types.analysis:IcuNormalizationMode" + } + }, + "required": [ + "type", + "method", + "mode" + ] + }, + "_types.analysis:IcuNormalizationType": { + "type": "string", + "enum": [ + "nfc", + "nfkc", + "nfkc_cf" + ] + }, + "_types.analysis:IcuNormalizationMode": { + "type": "string", + "enum": [ + "decompose", + "compose" + ] + }, + "_types.analysis:KuromojiAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "kuromoji" + ] + }, + "mode": { + "$ref": "#/components/schemas/_types.analysis:KuromojiTokenizationMode" + }, + "user_dictionary": { + "type": "string" + } + }, + "required": [ + "type", + "mode" + ] + }, + "_types.analysis:KuromojiTokenizationMode": { + "type": "string", + "enum": [ + "normal", + "search", + "extended" + ] + }, + "_types.analysis:SnowballAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "snowball" + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionString" + }, + "language": { + "$ref": "#/components/schemas/_types.analysis:SnowballLanguage" + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + } + }, + "required": [ + "type", + "language" + ] + }, + "_types.analysis:SnowballLanguage": { + "type": "string", + "enum": [ + "Armenian", + "Basque", + "Catalan", + "Danish", + "Dutch", + "English", + "Finnish", + "French", + "German", + "German2", + "Hungarian", + "Italian", + "Kp", + "Lovins", + "Norwegian", + "Porter", + "Portuguese", + "Romanian", + "Russian", + "Spanish", + "Swedish", + "Turkish" + ] + }, + "_types.analysis:DutchAnalyzer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dutch" + ] + }, + "stopwords": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + } + }, + "required": [ + "type" + ] + }, + "_types:ScriptField": { + "type": "object", + "properties": { + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "ignore_failure": { + "type": "boolean" + } + }, + "required": [ + "script" + ] + }, + "_types:Sort": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:SortCombinations" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:SortCombinations" + } + } + ] + }, + "_types:SortCombinations": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:Field" + }, + { + "$ref": "#/components/schemas/_types:SortOptions" + } + ] + }, + "_types:SortOptions": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/sort-search-results.html" + }, + "type": "object", + "properties": { + "_score": { + "$ref": "#/components/schemas/_types:ScoreSort" + }, + "_doc": { + "$ref": "#/components/schemas/_types:ScoreSort" + }, + "_geo_distance": { + "$ref": "#/components/schemas/_types:GeoDistanceSort" + }, + "_script": { + "$ref": "#/components/schemas/_types:ScriptSort" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types:ScoreSort": { + "type": "object", + "properties": { + "order": { + "$ref": "#/components/schemas/_types:SortOrder" + } + } + }, + "_types:SortOrder": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "_types:GeoDistanceSort": { + "type": "object", + "properties": { + "mode": { + "$ref": "#/components/schemas/_types:SortMode" + }, + "distance_type": { + "$ref": "#/components/schemas/_types:GeoDistanceType" + }, + "ignore_unmapped": { + "type": "boolean" + }, + "order": { + "$ref": "#/components/schemas/_types:SortOrder" + }, + "unit": { + "$ref": "#/components/schemas/_types:DistanceUnit" + } + } + }, + "_types:SortMode": { + "type": "string", + "enum": [ + "min", + "max", + "sum", + "avg", + "median" + ] + }, + "_types:DistanceUnit": { + "type": "string", + "enum": [ + "in", + "ft", + "yd", + "mi", + "nmi", + "km", + "m", + "cm", + "mm" + ] + }, + "_types:ScriptSort": { + "type": "object", + "properties": { + "order": { + "$ref": "#/components/schemas/_types:SortOrder" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "type": { + "$ref": "#/components/schemas/_types:ScriptSortType" + }, + "mode": { + "$ref": "#/components/schemas/_types:SortMode" + }, + "nested": { + "$ref": "#/components/schemas/_types:NestedSortValue" + } + }, + "required": [ + "script" + ] + }, + "_types:ScriptSortType": { + "type": "string", + "enum": [ + "string", + "number", + "version" + ] + }, + "_types:NestedSortValue": { + "type": "object", + "properties": { + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "max_children": { + "type": "number" + }, + "nested": { + "$ref": "#/components/schemas/_types:NestedSortValue" + }, + "path": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "path" + ] + }, + "_global.search._types:SourceConfig": { + "description": "Defines how to fetch a source. Fetching can be disabled entirely, or the source can be filtered.", + "oneOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/components/schemas/_global.search._types:SourceFilter" + } + ] + }, + "_global.search._types:SourceFilter": { + "type": "object", + "properties": { + "excludes": { + "$ref": "#/components/schemas/_types:Fields" + }, + "includes": { + "$ref": "#/components/schemas/_types:Fields" + } + } + }, + "_types.query_dsl:ChildScoreMode": { + "type": "string", + "enum": [ + "none", + "avg", + "sum", + "max", + "min" + ] + }, + "_types:RelationName": { + "type": "string" + }, + "_types.query_dsl:HasParentQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "ignore_unmapped": { + "description": "Indicates whether to ignore an unmapped `parent_type` and not return any documents instead of an error.\nYou can use this parameter to query multiple indices that may not contain the `parent_type`.", + "type": "boolean" + }, + "inner_hits": { + "$ref": "#/components/schemas/_global.search._types:InnerHits" + }, + "parent_type": { + "$ref": "#/components/schemas/_types:RelationName" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "score": { + "description": "Indicates whether the relevance score of a matching parent document is aggregated into its child documents.", + "type": "boolean" + } + }, + "required": [ + "parent_type", + "query" + ] + } + ] + }, + "_types.query_dsl:IdsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "values": { + "$ref": "#/components/schemas/_types:Ids" + } + } + } + ] + }, + "_types:Ids": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:Id" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Id" + } + } + ] + }, + "_types.query_dsl:IntervalsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "all_of": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsAllOf" + }, + "any_of": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsAnyOf" + }, + "fuzzy": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsFuzzy" + }, + "match": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsMatch" + }, + "prefix": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsPrefix" + }, + "wildcard": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsWildcard" + } + }, + "minProperties": 1, + "maxProperties": 1 + } + ] + }, + "_types.query_dsl:IntervalsAllOf": { + "type": "object", + "properties": { + "intervals": { + "description": "An array of rules to combine. All rules must produce a match in a document for the overall source to match.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + } + }, + "max_gaps": { + "description": "Maximum number of positions between the matching terms.\nIntervals produced by the rules further apart than this are not considered matches.", + "type": "number" + }, + "ordered": { + "description": "If `true`, intervals produced by the rules should appear in the order in which they are specified.", + "type": "boolean" + }, + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsFilter" + } + }, + "required": [ + "intervals" + ] + }, + "_types.query_dsl:IntervalsContainer": { + "type": "object", + "properties": { + "all_of": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsAllOf" + }, + "any_of": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsAnyOf" + }, + "fuzzy": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsFuzzy" + }, + "match": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsMatch" + }, + "prefix": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsPrefix" + }, + "wildcard": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsWildcard" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types.query_dsl:IntervalsAnyOf": { + "type": "object", + "properties": { + "intervals": { + "description": "An array of rules to match.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + } + }, + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsFilter" + } + }, + "required": [ + "intervals" + ] + }, + "_types.query_dsl:IntervalsFilter": { + "type": "object", + "properties": { + "after": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "before": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "contained_by": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "containing": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "not_contained_by": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "not_containing": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "not_overlapping": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "overlapping": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsContainer" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types.query_dsl:IntervalsFuzzy": { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to normalize the term.", + "type": "string" + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "prefix_length": { + "description": "Number of beginning characters left unchanged when creating expansions.", + "type": "number" + }, + "term": { + "description": "The term to match.", + "type": "string" + }, + "transpositions": { + "description": "Indicates whether edits include transpositions of two adjacent characters (for example, `ab` to `ba`).", + "type": "boolean" + }, + "use_field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "term" + ] + }, + "_types.query_dsl:IntervalsMatch": { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to analyze terms in the query.", + "type": "string" + }, + "max_gaps": { + "description": "Maximum number of positions between the matching terms.\nTerms further apart than this are not considered matches.", + "type": "number" + }, + "ordered": { + "description": "If `true`, matching terms must appear in their specified order.", + "type": "boolean" + }, + "query": { + "description": "Text you wish to find in the provided field.", + "type": "string" + }, + "use_field": { + "$ref": "#/components/schemas/_types:Field" + }, + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:IntervalsFilter" + } + }, + "required": [ + "query" + ] + }, + "_types.query_dsl:IntervalsPrefix": { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to analyze the `prefix`.", + "type": "string" + }, + "prefix": { + "description": "Beginning characters of terms you wish to find in the top-level field.", + "type": "string" + }, + "use_field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "prefix" + ] + }, + "_types.query_dsl:IntervalsWildcard": { + "type": "object", + "properties": { + "analyzer": { + "description": "Analyzer used to analyze the `pattern`.\nDefaults to the top-level field's analyzer.", + "type": "string" + }, + "pattern": { + "description": "Wildcard pattern used to find matching terms.", + "type": "string" + }, + "use_field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "pattern" + ] + }, + "_types:KnnQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "query_vector": { + "$ref": "#/components/schemas/_types:QueryVector" + }, + "query_vector_builder": { + "$ref": "#/components/schemas/_types:QueryVectorBuilder" + }, + "num_candidates": { + "description": "The number of nearest neighbor candidates to consider per shard", + "type": "number" + }, + "filter": { + "description": "Filters for the kNN search query", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + } + ] + }, + "similarity": { + "description": "The minimum similarity for a vector to be considered a match", + "type": "number" + } + }, + "required": [ + "field" + ] + } + ] + }, + "_types:QueryVector": { + "type": "array", + "items": { + "type": "number" + } + }, + "_types:QueryVectorBuilder": { + "type": "object", + "properties": { + "text_embedding": { + "$ref": "#/components/schemas/_types:TextEmbedding" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types:TextEmbedding": { + "type": "object", + "properties": { + "model_id": { + "type": "string" + }, + "model_text": { + "type": "string" + } + }, + "required": [ + "model_id", + "model_text" + ] + }, + "_types.query_dsl:MatchQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert the text in the query value into tokens.", + "type": "string" + }, + "auto_generate_synonyms_phrase_query": { + "description": "If `true`, match phrase queries are automatically created for multi-term synonyms.", + "type": "boolean" + }, + "cutoff_frequency": { + "deprecated": true, + "type": "number" + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "fuzzy_rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "fuzzy_transpositions": { + "description": "If `true`, edits for fuzzy matching include transpositions of two adjacent characters (for example, `ab` to `ba`).", + "type": "boolean" + }, + "lenient": { + "description": "If `true`, format-based errors, such as providing a text query value for a numeric field, are ignored.", + "type": "boolean" + }, + "max_expansions": { + "description": "Maximum number of terms to which the query will expand.", + "type": "number" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "prefix_length": { + "description": "Number of beginning characters left unchanged for fuzzy matching.", + "type": "number" + }, + "query": { + "description": "Text, number, boolean value or date you wish to find in the provided field.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ] + }, + "zero_terms_query": { + "$ref": "#/components/schemas/_types.query_dsl:ZeroTermsQuery" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:ZeroTermsQuery": { + "type": "string", + "enum": [ + "all", + "none" + ] + }, + "_types.query_dsl:MatchAllQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:MatchBoolPrefixQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert the text in the query value into tokens.", + "type": "string" + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "fuzzy_rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "fuzzy_transpositions": { + "description": "If `true`, edits for fuzzy matching include transpositions of two adjacent characters (for example, `ab` to `ba`).\nCan be applied to the term subqueries constructed for all terms but the final term.", + "type": "boolean" + }, + "max_expansions": { + "description": "Maximum number of terms to which the query will expand.\nCan be applied to the term subqueries constructed for all terms but the final term.", + "type": "number" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "prefix_length": { + "description": "Number of beginning characters left unchanged for fuzzy matching.\nCan be applied to the term subqueries constructed for all terms but the final term.", + "type": "number" + }, + "query": { + "description": "Terms you wish to find in the provided field.\nThe last term is used in a prefix query.", + "type": "string" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:MatchNoneQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:MatchPhraseQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert the text in the query value into tokens.", + "type": "string" + }, + "query": { + "description": "Query terms that are analyzed and turned into a phrase query.", + "type": "string" + }, + "slop": { + "description": "Maximum number of positions allowed between matching tokens.", + "type": "number" + }, + "zero_terms_query": { + "$ref": "#/components/schemas/_types.query_dsl:ZeroTermsQuery" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:MatchPhrasePrefixQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert text in the query value into tokens.", + "type": "string" + }, + "max_expansions": { + "description": "Maximum number of terms to which the last provided term of the query value will expand.", + "type": "number" + }, + "query": { + "description": "Text you wish to find in the provided field.", + "type": "string" + }, + "slop": { + "description": "Maximum number of positions allowed between matching tokens.", + "type": "number" + }, + "zero_terms_query": { + "$ref": "#/components/schemas/_types.query_dsl:ZeroTermsQuery" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:MoreLikeThisQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "The analyzer that is used to analyze the free form text.\nDefaults to the analyzer associated with the first field in fields.", + "type": "string" + }, + "boost_terms": { + "description": "Each term in the formed query could be further boosted by their tf-idf score.\nThis sets the boost factor to use when using this feature.\nDefaults to deactivated (0).", + "type": "number" + }, + "fail_on_unsupported_field": { + "description": "Controls whether the query should fail (throw an exception) if any of the specified fields are not of the supported types (`text` or `keyword`).", + "type": "boolean" + }, + "fields": { + "description": "A list of fields to fetch and analyze the text from.\nDefaults to the `index.query.default_field` index setting, which has a default value of `*`.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "include": { + "description": "Specifies whether the input documents should also be included in the search results returned.", + "type": "boolean" + }, + "like": { + "description": "Specifies free form text and/or a single or multiple documents for which you want to find similar documents.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:Like" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:Like" + } + } + ] + }, + "max_doc_freq": { + "description": "The maximum document frequency above which the terms are ignored from the input document.", + "type": "number" + }, + "max_query_terms": { + "description": "The maximum number of query terms that can be selected.", + "type": "number" + }, + "max_word_length": { + "description": "The maximum word length above which the terms are ignored.\nDefaults to unbounded (`0`).", + "type": "number" + }, + "min_doc_freq": { + "description": "The minimum document frequency below which the terms are ignored from the input document.", + "type": "number" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "min_term_freq": { + "description": "The minimum term frequency below which the terms are ignored from the input document.", + "type": "number" + }, + "min_word_length": { + "description": "The minimum word length below which the terms are ignored.", + "type": "number" + }, + "routing": { + "$ref": "#/components/schemas/_types:Routing" + }, + "stop_words": { + "$ref": "#/components/schemas/_types.analysis:StopWords" + }, + "unlike": { + "description": "Used in combination with `like` to exclude documents that match a set of terms.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:Like" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:Like" + } + } + ] + }, + "version": { + "$ref": "#/components/schemas/_types:VersionNumber" + }, + "version_type": { + "$ref": "#/components/schemas/_types:VersionType" + } + }, + "required": [ + "like" + ] + } + ] + }, + "_types.query_dsl:Like": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-mlt-query.html#_document_input_parameters" + }, + "description": "Text that we want similar documents for or a lookup to a document's field for the text.", + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:LikeDocument" + } + ] + }, + "_types.query_dsl:LikeDocument": { + "type": "object", + "properties": { + "doc": { + "description": "A document not present in the index.", + "type": "object" + }, + "fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "_id": { + "$ref": "#/components/schemas/_types:Id" + }, + "_index": { + "$ref": "#/components/schemas/_types:IndexName" + }, + "per_field_analyzer": { + "description": "Overrides the default analyzer.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "routing": { + "$ref": "#/components/schemas/_types:Routing" + }, + "version": { + "$ref": "#/components/schemas/_types:VersionNumber" + }, + "version_type": { + "$ref": "#/components/schemas/_types:VersionType" + } + } + }, + "_types:IndexName": { + "type": "string" + }, + "_types:Routing": { + "type": "string" + }, + "_types:VersionNumber": { + "type": "number" + }, + "_types:VersionType": { + "type": "string", + "enum": [ + "internal", + "external", + "external_gte", + "force" + ] + }, + "_types.query_dsl:MultiMatchQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert the text in the query value into tokens.", + "type": "string" + }, + "auto_generate_synonyms_phrase_query": { + "description": "If `true`, match phrase queries are automatically created for multi-term synonyms.", + "type": "boolean" + }, + "cutoff_frequency": { + "deprecated": true, + "type": "number" + }, + "fields": { + "$ref": "#/components/schemas/_types:Fields" + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "fuzzy_rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "fuzzy_transpositions": { + "description": "If `true`, edits for fuzzy matching include transpositions of two adjacent characters (for example, `ab` to `ba`).\nCan be applied to the term subqueries constructed for all terms but the final term.", + "type": "boolean" + }, + "lenient": { + "description": "If `true`, format-based errors, such as providing a text query value for a numeric field, are ignored.", + "type": "boolean" + }, + "max_expansions": { + "description": "Maximum number of terms to which the query will expand.", + "type": "number" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "prefix_length": { + "description": "Number of beginning characters left unchanged for fuzzy matching.", + "type": "number" + }, + "query": { + "description": "Text, number, boolean value or date you wish to find in the provided field.", + "type": "string" + }, + "slop": { + "description": "Maximum number of positions allowed between matching tokens.", + "type": "number" + }, + "tie_breaker": { + "description": "Determines how scores for each per-term blended query and scores across groups are combined.", + "type": "number" + }, + "type": { + "$ref": "#/components/schemas/_types.query_dsl:TextQueryType" + }, + "zero_terms_query": { + "$ref": "#/components/schemas/_types.query_dsl:ZeroTermsQuery" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:TextQueryType": { + "type": "string", + "enum": [ + "best_fields", + "most_fields", + "cross_fields", + "phrase", + "phrase_prefix", + "bool_prefix" + ] + }, + "_types.query_dsl:NestedQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "ignore_unmapped": { + "description": "Indicates whether to ignore an unmapped path and not return any documents instead of an error.", + "type": "boolean" + }, + "inner_hits": { + "$ref": "#/components/schemas/_global.search._types:InnerHits" + }, + "path": { + "$ref": "#/components/schemas/_types:Field" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "score_mode": { + "$ref": "#/components/schemas/_types.query_dsl:ChildScoreMode" + } + }, + "required": [ + "path", + "query" + ] + } + ] + }, + "_types.query_dsl:ParentIdQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/_types:Id" + }, + "ignore_unmapped": { + "description": "Indicates whether to ignore an unmapped `type` and not return any documents instead of an error.", + "type": "boolean" + }, + "type": { + "$ref": "#/components/schemas/_types:RelationName" + } + } + } + ] + }, + "_types.query_dsl:PercolateQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "document": { + "description": "The source of the document being percolated.", + "type": "object" + }, + "documents": { + "description": "An array of sources of the documents being percolated.", + "type": "array", + "items": { + "type": "object" + } + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "id": { + "$ref": "#/components/schemas/_types:Id" + }, + "index": { + "$ref": "#/components/schemas/_types:IndexName" + }, + "name": { + "description": "The suffix used for the `_percolator_document_slot` field when multiple `percolate` queries are specified.", + "type": "string" + }, + "preference": { + "description": "Preference used to fetch document to percolate.", + "type": "string" + }, + "routing": { + "$ref": "#/components/schemas/_types:Routing" + }, + "version": { + "$ref": "#/components/schemas/_types:VersionNumber" + } + }, + "required": [ + "field" + ] + } + ] + }, + "_types.query_dsl:PinnedQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "allOf": [ + { + "type": "object", + "properties": { + "organic": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "required": [ + "organic" + ] + }, + { + "type": "object", + "properties": { + "ids": { + "description": "Document IDs listed in the order they are to appear in results.\nRequired if `docs` is not specified.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Id" + } + }, + "docs": { + "description": "Documents listed in the order they are to appear in results.\nRequired if `ids` is not specified.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:PinnedDoc" + } + } + }, + "minProperties": 1, + "maxProperties": 1 + } + ] + } + ] + }, + "_types.query_dsl:PinnedDoc": { + "type": "object", + "properties": { + "_id": { + "$ref": "#/components/schemas/_types:Id" + }, + "_index": { + "$ref": "#/components/schemas/_types:IndexName" + } + }, + "required": [ + "_id", + "_index" + ] + }, + "_types.query_dsl:PrefixQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "value": { + "description": "Beginning characters of terms you wish to find in the provided field.", + "type": "string" + }, + "case_insensitive": { + "description": "Allows ASCII case insensitive matching of the value with the indexed field values when set to `true`.\nDefault is `false` which means the case sensitivity of matching depends on the underlying field’s mapping.", + "type": "boolean" + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types.query_dsl:QueryStringQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "allow_leading_wildcard": { + "description": "If `true`, the wildcard characters `*` and `?` are allowed as the first character of the query string.", + "type": "boolean" + }, + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert text in the query string into tokens.", + "type": "string" + }, + "analyze_wildcard": { + "description": "If `true`, the query attempts to analyze wildcard terms in the query string.", + "type": "boolean" + }, + "auto_generate_synonyms_phrase_query": { + "description": "If `true`, match phrase queries are automatically created for multi-term synonyms.", + "type": "boolean" + }, + "default_field": { + "$ref": "#/components/schemas/_types:Field" + }, + "default_operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "enable_position_increments": { + "description": "If `true`, enable position increments in queries constructed from a `query_string` search.", + "type": "boolean" + }, + "escape": { + "type": "boolean" + }, + "fields": { + "description": "Array of fields to search. Supports wildcards (`*`).", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "fuzziness": { + "$ref": "#/components/schemas/_types:Fuzziness" + }, + "fuzzy_max_expansions": { + "description": "Maximum number of terms to which the query expands for fuzzy matching.", + "type": "number" + }, + "fuzzy_prefix_length": { + "description": "Number of beginning characters left unchanged for fuzzy matching.", + "type": "number" + }, + "fuzzy_rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "fuzzy_transpositions": { + "description": "If `true`, edits for fuzzy matching include transpositions of two adjacent characters (for example, `ab` to `ba`).", + "type": "boolean" + }, + "lenient": { + "description": "If `true`, format-based errors, such as providing a text value for a numeric field, are ignored.", + "type": "boolean" + }, + "max_determinized_states": { + "description": "Maximum number of automaton states required for the query.", + "type": "number" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "phrase_slop": { + "description": "Maximum number of positions allowed between matching tokens for phrases.", + "type": "number" + }, + "query": { + "description": "Query string you wish to parse and use for search.", + "type": "string" + }, + "quote_analyzer": { + "description": "Analyzer used to convert quoted text in the query string into tokens.\nFor quoted text, this parameter overrides the analyzer specified in the `analyzer` parameter.", + "type": "string" + }, + "quote_field_suffix": { + "description": "Suffix appended to quoted text in the query string.\nYou can use this suffix to use a different analysis method for exact matches.", + "type": "string" + }, + "rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "tie_breaker": { + "description": "How to combine the queries generated from the individual search terms in the resulting `dis_max` query.", + "type": "number" + }, + "time_zone": { + "$ref": "#/components/schemas/_types:TimeZone" + }, + "type": { + "$ref": "#/components/schemas/_types.query_dsl:TextQueryType" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types:TimeZone": { + "type": "string" + }, + "_types.query_dsl:RangeQuery": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:DateRangeQuery" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:NumberRangeQuery" + }, + { + "$ref": "#/components/schemas/_types.query_dsl:TermsRangeQuery" + } + ] + }, + "_types.query_dsl:DateRangeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RangeQueryBase" + }, + { + "type": "object", + "properties": { + "gt": { + "$ref": "#/components/schemas/_types:DateMath" + }, + "gte": { + "$ref": "#/components/schemas/_types:DateMath" + }, + "lt": { + "$ref": "#/components/schemas/_types:DateMath" + }, + "lte": { + "$ref": "#/components/schemas/_types:DateMath" + }, + "from": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:DateMath" + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "to": { + "oneOf": [ + { + "$ref": "#/components/schemas/_types:DateMath" + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "format": { + "$ref": "#/components/schemas/_types:DateFormat" + }, + "time_zone": { + "$ref": "#/components/schemas/_types:TimeZone" + } + } + } + ] + }, + "_types.query_dsl:RangeQueryBase": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "relation": { + "$ref": "#/components/schemas/_types.query_dsl:RangeRelation" + } + } + } + ] + }, + "_types.query_dsl:RangeRelation": { + "type": "string", + "enum": [ + "within", + "contains", + "intersects" + ] + }, + "_types:DateFormat": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html" + }, + "type": "string" + }, + "_types.query_dsl:NumberRangeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RangeQueryBase" + }, + { + "type": "object", + "properties": { + "gt": { + "description": "Greater than.", + "type": "number" + }, + "gte": { + "description": "Greater than or equal to.", + "type": "number" + }, + "lt": { + "description": "Less than.", + "type": "number" + }, + "lte": { + "description": "Less than or equal to.", + "type": "number" + }, + "from": { + "oneOf": [ + { + "type": "number" + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "to": { + "oneOf": [ + { + "type": "number" + }, + { + "nullable": true, + "type": "string" + } + ] + } + } + } + ] + }, + "_types.query_dsl:TermsRangeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RangeQueryBase" + }, + { + "type": "object", + "properties": { + "gt": { + "description": "Greater than.", + "type": "string" + }, + "gte": { + "description": "Greater than or equal to.", + "type": "string" + }, + "lt": { + "description": "Less than.", + "type": "string" + }, + "lte": { + "description": "Less than or equal to.", + "type": "string" + }, + "from": { + "oneOf": [ + { + "type": "string" + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "to": { + "oneOf": [ + { + "type": "string" + }, + { + "nullable": true, + "type": "string" + } + ] + } + } + } + ] + }, + "_types.query_dsl:RankFeatureQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "saturation": { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunctionSaturation" + }, + "log": { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunctionLogarithm" + }, + "linear": { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunctionLinear" + }, + "sigmoid": { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunctionSigmoid" + } + }, + "required": [ + "field" + ] + } + ] + }, + "_types.query_dsl:RankFeatureFunctionSaturation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunction" + }, + { + "type": "object", + "properties": { + "pivot": { + "description": "Configurable pivot value so that the result will be less than 0.5.", + "type": "number" + } + } + } + ] + }, + "_types.query_dsl:RankFeatureFunction": { + "type": "object" + }, + "_types.query_dsl:RankFeatureFunctionLogarithm": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunction" + }, + { + "type": "object", + "properties": { + "scaling_factor": { + "description": "Configurable scaling factor.", + "type": "number" + } + }, + "required": [ + "scaling_factor" + ] + } + ] + }, + "_types.query_dsl:RankFeatureFunctionLinear": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunction" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:RankFeatureFunctionSigmoid": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:RankFeatureFunction" + }, + { + "type": "object", + "properties": { + "pivot": { + "description": "Configurable pivot value so that the result will be less than 0.5.", + "type": "number" + }, + "exponent": { + "description": "Configurable Exponent.", + "type": "number" + } + }, + "required": [ + "pivot", + "exponent" + ] + } + ] + }, + "_types.query_dsl:RegexpQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "case_insensitive": { + "description": "Allows case insensitive matching of the regular expression value with the indexed field values when set to `true`.\nWhen `false`, case sensitivity of matching depends on the underlying field’s mapping.", + "type": "boolean" + }, + "flags": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/regexp-syntax.html" + }, + "description": "Enables optional operators for the regular expression.", + "type": "string" + }, + "max_determinized_states": { + "description": "Maximum number of automaton states required for the query.", + "type": "number" + }, + "rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "value": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/regexp-syntax.html" + }, + "description": "Regular expression for terms you wish to find in the provided field.", + "type": "string" + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types.query_dsl:RuleQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "organic": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "ruleset_id": { + "$ref": "#/components/schemas/_types:Id" + }, + "match_criteria": { + "type": "object" + } + }, + "required": [ + "organic", + "ruleset_id", + "match_criteria" + ] + } + ] + }, + "_types.query_dsl:ScriptQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "script": { + "$ref": "#/components/schemas/_types:Script" + } + }, + "required": [ + "script" + ] + } + ] + }, + "_types.query_dsl:ScriptScoreQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "min_score": { + "description": "Documents with a score lower than this floating point number are excluded from the search results.", + "type": "number" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + } + }, + "required": [ + "query", + "script" + ] + } + ] + }, + "_types.query_dsl:ShapeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "ignore_unmapped": { + "description": "When set to `true` the query ignores an unmapped field and will not match any documents.", + "type": "boolean" + } + } + } + ] + }, + "_types.query_dsl:SimpleQueryStringQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "analyzer": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html" + }, + "description": "Analyzer used to convert text in the query string into tokens.", + "type": "string" + }, + "analyze_wildcard": { + "description": "If `true`, the query attempts to analyze wildcard terms in the query string.", + "type": "boolean" + }, + "auto_generate_synonyms_phrase_query": { + "description": "If `true`, the parser creates a match_phrase query for each multi-position token.", + "type": "boolean" + }, + "default_operator": { + "$ref": "#/components/schemas/_types.query_dsl:Operator" + }, + "fields": { + "description": "Array of fields you wish to search.\nAccepts wildcard expressions.\nYou also can boost relevance scores for matches to particular fields using a caret (`^`) notation.\nDefaults to the `index.query.default_field index` setting, which has a default value of `*`.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "flags": { + "$ref": "#/components/schemas/_types.query_dsl:SimpleQueryStringFlags" + }, + "fuzzy_max_expansions": { + "description": "Maximum number of terms to which the query expands for fuzzy matching.", + "type": "number" + }, + "fuzzy_prefix_length": { + "description": "Number of beginning characters left unchanged for fuzzy matching.", + "type": "number" + }, + "fuzzy_transpositions": { + "description": "If `true`, edits for fuzzy matching include transpositions of two adjacent characters (for example, `ab` to `ba`).", + "type": "boolean" + }, + "lenient": { + "description": "If `true`, format-based errors, such as providing a text value for a numeric field, are ignored.", + "type": "boolean" + }, + "minimum_should_match": { + "$ref": "#/components/schemas/_types:MinimumShouldMatch" + }, + "query": { + "description": "Query string in the simple query string syntax you wish to parse and use for search.", + "type": "string" + }, + "quote_field_suffix": { + "description": "Suffix appended to quoted text in the query string.", + "type": "string" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:SimpleQueryStringFlags": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-simple-query-string-query.html#supported-flags" + }, + "description": "Query flags can be either a single flag or a combination of flags, e.g. `OR|AND|PREFIX`", + "allOf": [ + { + "$ref": "#/components/schemas/_spec_utils:PipeSeparatedFlagsSimpleQueryStringFlag" + } + ] + }, + "_spec_utils:PipeSeparatedFlagsSimpleQueryStringFlag": { + "description": "A set of flags that can be represented as a single enum value or a set of values that are encoded\nas a pipe-separated string\n\nDepending on the target language, code generators can use this hint to generate language specific\nflags enum constructs and the corresponding (de-)serialization code.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:SimpleQueryStringFlag" + }, + { + "type": "string" + } + ] + }, + "_types.query_dsl:SimpleQueryStringFlag": { + "type": "string", + "enum": [ + "NONE", + "AND", + "NOT", + "OR", + "PREFIX", + "PHRASE", + "PRECEDENCE", + "ESCAPE", + "WHITESPACE", + "FUZZY", + "NEAR", + "SLOP", + "ALL" + ] + }, + "_types.query_dsl:SpanContainingQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "big": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + }, + "little": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + }, + "required": [ + "big", + "little" + ] + } + ] + }, + "_types.query_dsl:SpanQuery": { + "type": "object", + "properties": { + "span_containing": { + "$ref": "#/components/schemas/_types.query_dsl:SpanContainingQuery" + }, + "field_masking_span": { + "$ref": "#/components/schemas/_types.query_dsl:SpanFieldMaskingQuery" + }, + "span_first": { + "$ref": "#/components/schemas/_types.query_dsl:SpanFirstQuery" + }, + "span_gap": { + "$ref": "#/components/schemas/_types.query_dsl:SpanGapQuery" + }, + "span_multi": { + "$ref": "#/components/schemas/_types.query_dsl:SpanMultiTermQuery" + }, + "span_near": { + "$ref": "#/components/schemas/_types.query_dsl:SpanNearQuery" + }, + "span_not": { + "$ref": "#/components/schemas/_types.query_dsl:SpanNotQuery" + }, + "span_or": { + "$ref": "#/components/schemas/_types.query_dsl:SpanOrQuery" + }, + "span_term": { + "description": "The equivalent of the `term` query but for use with other span queries.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:SpanTermQuery" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "span_within": { + "$ref": "#/components/schemas/_types.query_dsl:SpanWithinQuery" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types.query_dsl:SpanFieldMaskingQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "query": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + }, + "required": [ + "field", + "query" + ] + } + ] + }, + "_types.query_dsl:SpanFirstQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "end": { + "description": "Controls the maximum end position permitted in a match.", + "type": "number" + }, + "match": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + }, + "required": [ + "end", + "match" + ] + } + ] + }, + "_types.query_dsl:SpanGapQuery": { + "description": "Can only be used as a clause in a span_near query.", + "type": "object", + "additionalProperties": { + "type": "number" + }, + "minProperties": 1, + "maxProperties": 1 + }, + "_types.query_dsl:SpanMultiTermQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "match": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "required": [ + "match" + ] + } + ] + }, + "_types.query_dsl:SpanNearQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "clauses": { + "description": "Array of one or more other span type queries.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + }, + "in_order": { + "description": "Controls whether matches are required to be in-order.", + "type": "boolean" + }, + "slop": { + "description": "Controls the maximum number of intervening unmatched positions permitted.", + "type": "number" + } + }, + "required": [ + "clauses" + ] + } + ] + }, + "_types.query_dsl:SpanNotQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "dist": { + "description": "The number of tokens from within the include span that can’t have overlap with the exclude span.\nEquivalent to setting both `pre` and `post`.", + "type": "number" + }, + "exclude": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + }, + "include": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + }, + "post": { + "description": "The number of tokens after the include span that can’t have overlap with the exclude span.", + "type": "number" + }, + "pre": { + "description": "The number of tokens before the include span that can’t have overlap with the exclude span.", + "type": "number" + } + }, + "required": [ + "exclude", + "include" + ] + } + ] + }, + "_types.query_dsl:SpanOrQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "clauses": { + "description": "Array of one or more other span type queries.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + } + }, + "required": [ + "clauses" + ] + } + ] + }, + "_types.query_dsl:SpanTermQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types.query_dsl:SpanWithinQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "big": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + }, + "little": { + "$ref": "#/components/schemas/_types.query_dsl:SpanQuery" + } + }, + "required": [ + "big", + "little" + ] + } + ] + }, + "_types.query_dsl:TermQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "value": { + "$ref": "#/components/schemas/_types:FieldValue" + }, + "case_insensitive": { + "description": "Allows ASCII case insensitive matching of the value with the indexed field values when set to `true`.\nWhen `false`, the case sensitivity of matching depends on the underlying field’s mapping.", + "type": "boolean" + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types:FieldValue": { + "description": "A field value.", + "oneOf": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "nullable": true, + "type": "string" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:TermsQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object" + } + ] + }, + "_types.query_dsl:TermsSetQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "minimum_should_match_field": { + "$ref": "#/components/schemas/_types:Field" + }, + "minimum_should_match_script": { + "$ref": "#/components/schemas/_types:Script" + }, + "terms": { + "description": "Array of terms you wish to find in the provided field.", + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "terms" + ] + } + ] + }, + "_types.query_dsl:TextExpansionQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "model_id": { + "description": "The text expansion NLP model to use", + "type": "string" + }, + "model_text": { + "description": "The query text", + "type": "string" + }, + "pruning_config": { + "$ref": "#/components/schemas/_types.query_dsl:TokenPruningConfig" + } + }, + "required": [ + "model_id", + "model_text" + ] + } + ] + }, + "_types.query_dsl:TokenPruningConfig": { + "type": "object", + "properties": { + "tokens_freq_ratio_threshold": { + "description": "Tokens whose frequency is more than this threshold times the average frequency of all tokens in the specified field are considered outliers and pruned.", + "type": "number" + }, + "tokens_weight_threshold": { + "description": "Tokens whose weight is less than this threshold are considered nonsignificant and pruned.", + "type": "number" + }, + "only_score_pruned_tokens": { + "description": "Whether to only score pruned tokens, vs only scoring kept tokens.", + "type": "boolean" + } + } + }, + "_types.query_dsl:WeightedTokensQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "tokens": { + "description": "The tokens representing this query", + "type": "object", + "additionalProperties": { + "type": "number" + } + }, + "pruning_config": { + "$ref": "#/components/schemas/_types.query_dsl:TokenPruningConfig" + } + }, + "required": [ + "tokens" + ] + } + ] + }, + "_types.query_dsl:WildcardQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "case_insensitive": { + "description": "Allows case insensitive matching of the pattern with the indexed field values when set to true. Default is false which means the case sensitivity of matching depends on the underlying field’s mapping.", + "type": "boolean" + }, + "rewrite": { + "$ref": "#/components/schemas/_types:MultiTermQueryRewrite" + }, + "value": { + "description": "Wildcard pattern for terms you wish to find in the provided field. Required, when wildcard is not set.", + "type": "string" + }, + "wildcard": { + "description": "Wildcard pattern for terms you wish to find in the provided field. Required, when value is not set.", + "type": "string" + } + } + } + ] + }, + "_types.query_dsl:WrapperQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "query": { + "description": "A base64 encoded query.\nThe binary data format can be any of JSON, YAML, CBOR or SMILE encodings", + "type": "string" + } + }, + "required": [ + "query" + ] + } + ] + }, + "_types.query_dsl:TypeQuery": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.query_dsl:QueryBase" + }, + { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + } + ] + }, + "_types.aggregations:AutoDateHistogramAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "buckets": { + "description": "The target number of buckets.", + "type": "number" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "format": { + "description": "The date format used to format `key_as_string` in the response.\nIf no `format` is specified, the first date format specified in the field mapping is used.", + "type": "string" + }, + "minimum_interval": { + "$ref": "#/components/schemas/_types.aggregations:MinimumInterval" + }, + "missing": { + "$ref": "#/components/schemas/_types:DateTime" + }, + "offset": { + "description": "Time zone specified as a ISO 8601 UTC offset.", + "type": "string" + }, + "params": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "time_zone": { + "$ref": "#/components/schemas/_types:TimeZone" + } + } + } + ] + }, + "_types.aggregations:MinimumInterval": { + "type": "string", + "enum": [ + "second", + "minute", + "hour", + "day", + "month", + "year" + ] + }, + "_types:DateTime": { + "description": "A date and time, either as a string whose format can depend on the context (defaulting to ISO 8601), or a\nnumber of milliseconds since the Epoch. Elasticsearch accepts both as input, but will generally output a string\nrepresentation.", + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/_types:EpochTimeUnitMillis" + } + ] + }, + "_types:EpochTimeUnitMillis": { + "allOf": [ + { + "$ref": "#/components/schemas/_types:UnitMillis" + } + ] + }, + "_types:UnitMillis": { + "description": "Time unit for milliseconds", + "type": "number" + }, + "_types.aggregations:AverageAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:FormatMetricAggregationBase": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "format": { + "type": "string" + } + } + } + ] + }, + "_types.aggregations:MetricAggregationBase": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "missing": { + "$ref": "#/components/schemas/_types.aggregations:Missing" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + } + } + }, + "_types.aggregations:Missing": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ] + }, + "_types.aggregations:AverageBucketAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:PipelineAggregationBase": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketPathAggregation" + }, + { + "type": "object", + "properties": { + "format": { + "description": "`DecimalFormat` pattern for the output value.\nIf specified, the formatted value is returned in the aggregation’s `value_as_string` property.", + "type": "string" + }, + "gap_policy": { + "$ref": "#/components/schemas/_types.aggregations:GapPolicy" + } + } + } + ] + }, + "_types.aggregations:BucketPathAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:Aggregation" + }, + { + "type": "object", + "properties": { + "buckets_path": { + "$ref": "#/components/schemas/_types.aggregations:BucketsPath" + } + } + } + ] + }, + "_types.aggregations:BucketsPath": { + "description": "Buckets path can be expressed in different ways, and an aggregation may accept some or all of these\nforms depending on its type. Please refer to each aggregation's documentation to know what buckets\npath forms they accept.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + ] + }, + "_types.aggregations:GapPolicy": { + "type": "string", + "enum": [ + "skip", + "insert_zeros", + "keep_values" + ] + }, + "_types.aggregations:BoxplotAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "compression": { + "description": "Limits the maximum number of nodes used by the underlying TDigest algorithm to `20 * compression`, enabling control of memory usage and approximation error.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:BucketScriptAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "script": { + "$ref": "#/components/schemas/_types:Script" + } + } + } + ] + }, + "_types.aggregations:BucketSelectorAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "script": { + "$ref": "#/components/schemas/_types:Script" + } + } + } + ] + }, + "_types.aggregations:BucketSortAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:Aggregation" + }, + { + "type": "object", + "properties": { + "from": { + "description": "Buckets in positions prior to `from` will be truncated.", + "type": "number" + }, + "gap_policy": { + "$ref": "#/components/schemas/_types.aggregations:GapPolicy" + }, + "size": { + "description": "The number of buckets to return.\nDefaults to all buckets of the parent aggregation.", + "type": "number" + }, + "sort": { + "$ref": "#/components/schemas/_types:Sort" + } + } + } + ] + }, + "_types.aggregations:BucketKsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketPathAggregation" + }, + { + "type": "object", + "properties": { + "alternative": { + "description": "A list of string values indicating which K-S test alternative to calculate. The valid values\nare: \"greater\", \"less\", \"two_sided\". This parameter is key for determining the K-S statistic used\nwhen calculating the K-S test. Default value is all possible alternative hypotheses.", + "type": "array", + "items": { + "type": "string" + } + }, + "fractions": { + "description": "A list of doubles indicating the distribution of the samples with which to compare to the `buckets_path` results.\nIn typical usage this is the overall proportion of documents in each bucket, which is compared with the actual\ndocument proportions in each bucket from the sibling aggregation counts. The default is to assume that overall\ndocuments are uniformly distributed on these buckets, which they would be if one used equal percentiles of a\nmetric to define the bucket end points.", + "type": "array", + "items": { + "type": "number" + } + }, + "sampling_method": { + "description": "Indicates the sampling methodology when calculating the K-S test. Note, this is sampling of the returned values.\nThis determines the cumulative distribution function (CDF) points used comparing the two samples. Default is\n`upper_tail`, which emphasizes the upper end of the CDF points. Valid options are: `upper_tail`, `uniform`,\nand `lower_tail`.", + "type": "string" + } + } + } + ] + }, + "_types.aggregations:BucketCorrelationAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketPathAggregation" + }, + { + "type": "object", + "properties": { + "function": { + "$ref": "#/components/schemas/_types.aggregations:BucketCorrelationFunction" + } + }, + "required": [ + "function" + ] + } + ] + }, + "_types.aggregations:BucketCorrelationFunction": { + "type": "object", + "properties": { + "count_correlation": { + "$ref": "#/components/schemas/_types.aggregations:BucketCorrelationFunctionCountCorrelation" + } + }, + "required": [ + "count_correlation" + ] + }, + "_types.aggregations:BucketCorrelationFunctionCountCorrelation": { + "type": "object", + "properties": { + "indicator": { + "$ref": "#/components/schemas/_types.aggregations:BucketCorrelationFunctionCountCorrelationIndicator" + } + }, + "required": [ + "indicator" + ] + }, + "_types.aggregations:BucketCorrelationFunctionCountCorrelationIndicator": { + "type": "object", + "properties": { + "doc_count": { + "description": "The total number of documents that initially created the expectations. It’s required to be greater\nthan or equal to the sum of all values in the buckets_path as this is the originating superset of data\nto which the term values are correlated.", + "type": "number" + }, + "expectations": { + "description": "An array of numbers with which to correlate the configured `bucket_path` values.\nThe length of this value must always equal the number of buckets returned by the `bucket_path`.", + "type": "array", + "items": { + "type": "number" + } + }, + "fractions": { + "description": "An array of fractions to use when averaging and calculating variance. This should be used if\nthe pre-calculated data and the buckets_path have known gaps. The length of fractions, if provided,\nmust equal expectations.", + "type": "array", + "items": { + "type": "number" + } + } + }, + "required": [ + "doc_count", + "expectations" + ] + }, + "_types.aggregations:CardinalityAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "precision_threshold": { + "description": "A unique count below which counts are expected to be close to accurate.\nThis allows to trade memory for accuracy.", + "type": "number" + }, + "rehash": { + "type": "boolean" + }, + "execution_hint": { + "$ref": "#/components/schemas/_types.aggregations:CardinalityExecutionMode" + } + } + } + ] + }, + "_types.aggregations:CardinalityExecutionMode": { + "type": "string", + "enum": [ + "global_ordinals", + "segment_ordinals", + "direct", + "save_memory_heuristic", + "save_time_heuristic" + ] + }, + "_types.aggregations:CategorizeTextAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:Aggregation" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "max_unique_tokens": { + "description": "The maximum number of unique tokens at any position up to max_matched_tokens. Must be larger than 1.\nSmaller values use less memory and create fewer categories. Larger values will use more memory and\ncreate narrower categories. Max allowed value is 100.", + "type": "number" + }, + "max_matched_tokens": { + "description": "The maximum number of token positions to match on before attempting to merge categories. Larger\nvalues will use more memory and create narrower categories. Max allowed value is 100.", + "type": "number" + }, + "similarity_threshold": { + "description": "The minimum percentage of tokens that must match for text to be added to the category bucket. Must\nbe between 1 and 100. The larger the value the narrower the categories. Larger values will increase memory\nusage and create narrower categories.", + "type": "number" + }, + "categorization_filters": { + "description": "This property expects an array of regular expressions. The expressions are used to filter out matching\nsequences from the categorization field values. You can use this functionality to fine tune the categorization\nby excluding sequences from consideration when categories are defined. For example, you can exclude SQL\nstatements that appear in your log files. This property cannot be used at the same time as categorization_analyzer.\nIf you only want to define simple regular expression filters that are applied prior to tokenization, setting\nthis property is the easiest method. If you also want to customize the tokenizer or post-tokenization filtering,\nuse the categorization_analyzer property instead and include the filters as pattern_replace character filters.", + "type": "array", + "items": { + "type": "string" + } + }, + "categorization_analyzer": { + "$ref": "#/components/schemas/_types.aggregations:CategorizeTextAnalyzer" + }, + "shard_size": { + "description": "The number of categorization buckets to return from each shard before merging all the results.", + "type": "number" + }, + "size": { + "description": "The number of buckets to return.", + "type": "number" + }, + "min_doc_count": { + "description": "The minimum number of documents in a bucket to be returned to the results.", + "type": "number" + }, + "shard_min_doc_count": { + "description": "The minimum number of documents in a bucket to be returned from the shard before merging.", + "type": "number" + } + }, + "required": [ + "field" + ] + } + ] + }, + "_types.aggregations:CategorizeTextAnalyzer": { + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/_types.aggregations:CustomCategorizeTextAnalyzer" + } + ] + }, + "_types.aggregations:CustomCategorizeTextAnalyzer": { + "type": "object", + "properties": { + "char_filter": { + "type": "array", + "items": { + "type": "string" + } + }, + "tokenizer": { + "type": "string" + }, + "filter": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "_types.aggregations:ChildrenAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/_types:RelationName" + } + } + } + ] + }, + "_types.aggregations:CompositeAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "after": { + "$ref": "#/components/schemas/_types.aggregations:CompositeAggregateKey" + }, + "size": { + "description": "The number of composite buckets that should be returned.", + "type": "number" + }, + "sources": { + "description": "The value sources used to build composite buckets.\nKeys are returned in the order of the `sources` definition.", + "type": "array", + "items": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.aggregations:CompositeAggregationSource" + } + } + } + } + } + ] + }, + "_types.aggregations:CompositeAggregateKey": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types:FieldValue" + } + }, + "_types.aggregations:CompositeAggregationSource": { + "type": "object", + "properties": { + "terms": { + "$ref": "#/components/schemas/_types.aggregations:CompositeTermsAggregation" + }, + "histogram": { + "$ref": "#/components/schemas/_types.aggregations:CompositeHistogramAggregation" + }, + "date_histogram": { + "$ref": "#/components/schemas/_types.aggregations:CompositeDateHistogramAggregation" + }, + "geotile_grid": { + "$ref": "#/components/schemas/_types.aggregations:CompositeGeoTileGridAggregation" + } + } + }, + "_types.aggregations:CompositeTermsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:CompositeAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:CompositeAggregationBase": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "missing_bucket": { + "type": "boolean" + }, + "missing_order": { + "$ref": "#/components/schemas/_types.aggregations:MissingOrder" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "value_type": { + "$ref": "#/components/schemas/_types.aggregations:ValueType" + }, + "order": { + "$ref": "#/components/schemas/_types:SortOrder" + } + } + }, + "_types.aggregations:MissingOrder": { + "type": "string", + "enum": [ + "first", + "last", + "default" + ] + }, + "_types.aggregations:ValueType": { + "type": "string", + "enum": [ + "string", + "long", + "double", + "number", + "date", + "date_nanos", + "ip", + "numeric", + "geo_point", + "boolean" + ] + }, + "_types.aggregations:CompositeHistogramAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:CompositeAggregationBase" + }, + { + "type": "object", + "properties": { + "interval": { + "type": "number" + } + }, + "required": [ + "interval" + ] + } + ] + }, + "_types.aggregations:CompositeDateHistogramAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:CompositeAggregationBase" + }, + { + "type": "object", + "properties": { + "format": { + "type": "string" + }, + "calendar_interval": { + "$ref": "#/components/schemas/_types:DurationLarge" + }, + "fixed_interval": { + "$ref": "#/components/schemas/_types:DurationLarge" + }, + "offset": { + "$ref": "#/components/schemas/_types:Duration" + }, + "time_zone": { + "$ref": "#/components/schemas/_types:TimeZone" + } + } + } + ] + }, + "_types:DurationLarge": { + "description": "A date histogram interval. Similar to `Duration` with additional units: `w` (week), `M` (month), `q` (quarter) and\n`y` (year)", + "type": "string" + }, + "_types.aggregations:CompositeGeoTileGridAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:CompositeAggregationBase" + }, + { + "type": "object", + "properties": { + "precision": { + "type": "number" + }, + "bounds": { + "$ref": "#/components/schemas/_types:GeoBounds" + } + } + } + ] + }, + "_types:GeoBounds": { + "description": "A geo bounding box. It can be represented in various ways:\n- as 4 top/bottom/left/right coordinates\n- as 2 top_left / bottom_right points\n- as 2 top_right / bottom_left points\n- as a WKT bounding box", + "oneOf": [ + { + "$ref": "#/components/schemas/_types:CoordsGeoBounds" + }, + { + "$ref": "#/components/schemas/_types:TopLeftBottomRightGeoBounds" + }, + { + "$ref": "#/components/schemas/_types:TopRightBottomLeftGeoBounds" + }, + { + "$ref": "#/components/schemas/_types:WktGeoBounds" + } + ] + }, + "_types:CoordsGeoBounds": { + "type": "object", + "properties": { + "top": { + "type": "number" + }, + "bottom": { + "type": "number" + }, + "left": { + "type": "number" + }, + "right": { + "type": "number" + } + }, + "required": [ + "top", + "bottom", + "left", + "right" + ] + }, + "_types:TopLeftBottomRightGeoBounds": { + "type": "object", + "properties": { + "top_left": { + "$ref": "#/components/schemas/_types:GeoLocation" + }, + "bottom_right": { + "$ref": "#/components/schemas/_types:GeoLocation" + } + }, + "required": [ + "top_left", + "bottom_right" + ] + }, + "_types:TopRightBottomLeftGeoBounds": { + "type": "object", + "properties": { + "top_right": { + "$ref": "#/components/schemas/_types:GeoLocation" + }, + "bottom_left": { + "$ref": "#/components/schemas/_types:GeoLocation" + } + }, + "required": [ + "top_right", + "bottom_left" + ] + }, + "_types:WktGeoBounds": { + "type": "object", + "properties": { + "wkt": { + "type": "string" + } + }, + "required": [ + "wkt" + ] + }, + "_types.aggregations:CumulativeCardinalityAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:CumulativeSumAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:DateHistogramAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "calendar_interval": { + "$ref": "#/components/schemas/_types.aggregations:CalendarInterval" + }, + "extended_bounds": { + "$ref": "#/components/schemas/_types.aggregations:ExtendedBoundsFieldDateMath" + }, + "hard_bounds": { + "$ref": "#/components/schemas/_types.aggregations:ExtendedBoundsFieldDateMath" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "fixed_interval": { + "$ref": "#/components/schemas/_types:Duration" + }, + "format": { + "description": "The date format used to format `key_as_string` in the response.\nIf no `format` is specified, the first date format specified in the field mapping is used.", + "type": "string" + }, + "interval": { + "$ref": "#/components/schemas/_types:Duration" + }, + "min_doc_count": { + "description": "Only returns buckets that have `min_doc_count` number of documents.\nBy default, all buckets between the first bucket that matches documents and the last one are returned.", + "type": "number" + }, + "missing": { + "$ref": "#/components/schemas/_types:DateTime" + }, + "offset": { + "$ref": "#/components/schemas/_types:Duration" + }, + "order": { + "$ref": "#/components/schemas/_types.aggregations:AggregateOrder" + }, + "params": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "time_zone": { + "$ref": "#/components/schemas/_types:TimeZone" + }, + "keyed": { + "description": "Set to `true` to associate a unique string key with each bucket and return the ranges as a hash rather than an array.", + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:CalendarInterval": { + "type": "string", + "enum": [ + "second", + "1s", + "minute", + "1m", + "hour", + "1h", + "day", + "1d", + "week", + "1w", + "month", + "1M", + "quarter", + "1q", + "year", + "1Y" + ] + }, + "_types.aggregations:ExtendedBoundsFieldDateMath": { + "type": "object", + "properties": { + "max": { + "$ref": "#/components/schemas/_types.aggregations:FieldDateMath" + }, + "min": { + "$ref": "#/components/schemas/_types.aggregations:FieldDateMath" + } + } + }, + "_types.aggregations:FieldDateMath": { + "description": "A date range limit, represented either as a DateMath expression or a number expressed\naccording to the target field's precision.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types:DateMath" + }, + { + "type": "number" + } + ] + }, + "_types.aggregations:AggregateOrder": { + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types:SortOrder" + }, + "minProperties": 1, + "maxProperties": 1 + }, + { + "type": "array", + "items": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types:SortOrder" + }, + "minProperties": 1, + "maxProperties": 1 + } + } + ] + }, + "_types.aggregations:DateRangeAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "format": { + "description": "The date format used to format `from` and `to` in the response.", + "type": "string" + }, + "missing": { + "$ref": "#/components/schemas/_types.aggregations:Missing" + }, + "ranges": { + "description": "Array of date ranges.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.aggregations:DateRangeExpression" + } + }, + "time_zone": { + "$ref": "#/components/schemas/_types:TimeZone" + }, + "keyed": { + "description": "Set to `true` to associate a unique string key with each bucket and returns the ranges as a hash rather than an array.", + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:DateRangeExpression": { + "type": "object", + "properties": { + "from": { + "$ref": "#/components/schemas/_types.aggregations:FieldDateMath" + }, + "key": { + "description": "Custom key to return the range with.", + "type": "string" + }, + "to": { + "$ref": "#/components/schemas/_types.aggregations:FieldDateMath" + } + } + }, + "_types.aggregations:DerivativeAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:DiversifiedSamplerAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "execution_hint": { + "$ref": "#/components/schemas/_types.aggregations:SamplerAggregationExecutionHint" + }, + "max_docs_per_value": { + "description": "Limits how many documents are permitted per choice of de-duplicating value.", + "type": "number" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "shard_size": { + "description": "Limits how many top-scoring documents are collected in the sample processed on each shard.", + "type": "number" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + } + } + } + ] + }, + "_types.aggregations:SamplerAggregationExecutionHint": { + "type": "string", + "enum": [ + "map", + "global_ordinals", + "bytes_hash" + ] + }, + "_types.aggregations:ExtendedStatsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object", + "properties": { + "sigma": { + "description": "The number of standard deviations above/below the mean to display.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:ExtendedStatsBucketAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "sigma": { + "description": "The number of standard deviations above/below the mean to display.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:FrequentItemSetsAggregation": { + "type": "object", + "properties": { + "fields": { + "description": "Fields to analyze.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.aggregations:FrequentItemSetsField" + } + }, + "minimum_set_size": { + "description": "The minimum size of one item set.", + "type": "number" + }, + "minimum_support": { + "description": "The minimum support of one item set.", + "type": "number" + }, + "size": { + "description": "The number of top item sets to return.", + "type": "number" + }, + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "required": [ + "fields" + ] + }, + "_types.aggregations:FrequentItemSetsField": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "exclude": { + "$ref": "#/components/schemas/_types.aggregations:TermsExclude" + }, + "include": { + "$ref": "#/components/schemas/_types.aggregations:TermsInclude" + } + }, + "required": [ + "field" + ] + }, + "_types.aggregations:TermsExclude": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "_types.aggregations:TermsInclude": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "$ref": "#/components/schemas/_types.aggregations:TermsPartition" + } + ] + }, + "_types.aggregations:TermsPartition": { + "type": "object", + "properties": { + "num_partitions": { + "description": "The number of partitions.", + "type": "number" + }, + "partition": { + "description": "The partition number for this request.", + "type": "number" + } + }, + "required": [ + "num_partitions", + "partition" + ] + }, + "_types.aggregations:FiltersAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "filters": { + "$ref": "#/components/schemas/_types.aggregations:BucketsQueryContainer" + }, + "other_bucket": { + "description": "Set to `true` to add a bucket to the response which will contain all documents that do not match any of the given filters.", + "type": "boolean" + }, + "other_bucket_key": { + "description": "The key with which the other bucket is returned.", + "type": "string" + }, + "keyed": { + "description": "By default, the named filters aggregation returns the buckets as an object.\nSet to `false` to return the buckets as an array of objects.", + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:BucketsQueryContainer": { + "description": "Aggregation buckets. By default they are returned as an array, but if the aggregation has keys configured for\nthe different buckets, the result is a dictionary.", + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + } + ] + }, + "_types.aggregations:GeoBoundsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "wrap_longitude": { + "description": "Specifies whether the bounding box should be allowed to overlap the international date line.", + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:GeoCentroidAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "count": { + "type": "number" + }, + "location": { + "$ref": "#/components/schemas/_types:GeoLocation" + } + } + } + ] + }, + "_types.aggregations:GeoDistanceAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "distance_type": { + "$ref": "#/components/schemas/_types:GeoDistanceType" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "origin": { + "$ref": "#/components/schemas/_types:GeoLocation" + }, + "ranges": { + "description": "An array of ranges used to bucket documents.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.aggregations:AggregationRange" + } + }, + "unit": { + "$ref": "#/components/schemas/_types:DistanceUnit" + } + } + } + ] + }, + "_types.aggregations:AggregationRange": { + "type": "object", + "properties": { + "from": { + "description": "Start of the range (inclusive).", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "key": { + "description": "Custom key to return the range with.", + "type": "string" + }, + "to": { + "description": "End of the range (exclusive).", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "nullable": true, + "type": "string" + } + ] + } + } + }, + "_types.aggregations:GeoHashGridAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "bounds": { + "$ref": "#/components/schemas/_types:GeoBounds" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "precision": { + "$ref": "#/components/schemas/_types:GeoHashPrecision" + }, + "shard_size": { + "description": "Allows for more accurate counting of the top cells returned in the final result the aggregation.\nDefaults to returning `max(10,(size x number-of-shards))` buckets from each shard.", + "type": "number" + }, + "size": { + "description": "The maximum number of geohash buckets to return.", + "type": "number" + } + } + } + ] + }, + "_types:GeoHashPrecision": { + "description": "A precision that can be expressed as a geohash length between 1 and 12, or a distance measure like \"1km\", \"10m\".", + "oneOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "_types.aggregations:GeoLineAggregation": { + "type": "object", + "properties": { + "point": { + "$ref": "#/components/schemas/_types.aggregations:GeoLinePoint" + }, + "sort": { + "$ref": "#/components/schemas/_types.aggregations:GeoLineSort" + }, + "include_sort": { + "description": "When `true`, returns an additional array of the sort values in the feature properties.", + "type": "boolean" + }, + "sort_order": { + "$ref": "#/components/schemas/_types:SortOrder" + }, + "size": { + "description": "The maximum length of the line represented in the aggregation.\nValid sizes are between 1 and 10000.", + "type": "number" + } + }, + "required": [ + "point", + "sort" + ] + }, + "_types.aggregations:GeoLinePoint": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "field" + ] + }, + "_types.aggregations:GeoLineSort": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "field" + ] + }, + "_types.aggregations:GeoTileGridAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "precision": { + "$ref": "#/components/schemas/_types:GeoTilePrecision" + }, + "shard_size": { + "description": "Allows for more accurate counting of the top cells returned in the final result the aggregation.\nDefaults to returning `max(10,(size x number-of-shards))` buckets from each shard.", + "type": "number" + }, + "size": { + "description": "The maximum number of buckets to return.", + "type": "number" + }, + "bounds": { + "$ref": "#/components/schemas/_types:GeoBounds" + } + } + } + ] + }, + "_types:GeoTilePrecision": { + "type": "number" + }, + "_types.aggregations:GeohexGridAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "precision": { + "description": "Integer zoom of the key used to defined cells or buckets\nin the results. Value should be between 0-15.", + "type": "number" + }, + "bounds": { + "$ref": "#/components/schemas/_types:GeoBounds" + }, + "size": { + "description": "Maximum number of buckets to return.", + "type": "number" + }, + "shard_size": { + "description": "Number of buckets returned from each shard.", + "type": "number" + } + }, + "required": [ + "field" + ] + } + ] + }, + "_types.aggregations:GlobalAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:HistogramAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "extended_bounds": { + "$ref": "#/components/schemas/_types.aggregations:ExtendedBoundsdouble" + }, + "hard_bounds": { + "$ref": "#/components/schemas/_types.aggregations:ExtendedBoundsdouble" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "interval": { + "description": "The interval for the buckets.\nMust be a positive decimal.", + "type": "number" + }, + "min_doc_count": { + "description": "Only returns buckets that have `min_doc_count` number of documents.\nBy default, the response will fill gaps in the histogram with empty buckets.", + "type": "number" + }, + "missing": { + "description": "The value to apply to documents that do not have a value.\nBy default, documents without a value are ignored.", + "type": "number" + }, + "offset": { + "description": "By default, the bucket keys start with 0 and then continue in even spaced steps of `interval`.\nThe bucket boundaries can be shifted by using the `offset` option.", + "type": "number" + }, + "order": { + "$ref": "#/components/schemas/_types.aggregations:AggregateOrder" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "format": { + "type": "string" + }, + "keyed": { + "description": "If `true`, returns buckets as a hash instead of an array, keyed by the bucket keys.", + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:ExtendedBoundsdouble": { + "type": "object", + "properties": { + "max": { + "description": "Maximum value for the bound.", + "type": "number" + }, + "min": { + "description": "Minimum value for the bound.", + "type": "number" + } + } + }, + "_types.aggregations:IpRangeAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "ranges": { + "description": "Array of IP ranges.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.aggregations:IpRangeAggregationRange" + } + } + } + } + ] + }, + "_types.aggregations:IpRangeAggregationRange": { + "type": "object", + "properties": { + "from": { + "description": "Start of the range.", + "oneOf": [ + { + "type": "string" + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "mask": { + "description": "IP range defined as a CIDR mask.", + "type": "string" + }, + "to": { + "description": "End of the range.", + "oneOf": [ + { + "type": "string" + }, + { + "nullable": true, + "type": "string" + } + ] + } + } + }, + "_types.aggregations:IpPrefixAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "prefix_length": { + "description": "Length of the network prefix. For IPv4 addresses the accepted range is [0, 32].\nFor IPv6 addresses the accepted range is [0, 128].", + "type": "number" + }, + "is_ipv6": { + "description": "Defines whether the prefix applies to IPv6 addresses.", + "type": "boolean" + }, + "append_prefix_length": { + "description": "Defines whether the prefix length is appended to IP address keys in the response.", + "type": "boolean" + }, + "keyed": { + "description": "Defines whether buckets are returned as a hash rather than an array in the response.", + "type": "boolean" + }, + "min_doc_count": { + "description": "Minimum number of documents in a bucket for it to be included in the response.", + "type": "number" + } + }, + "required": [ + "field", + "prefix_length" + ] + } + ] + }, + "_types.aggregations:InferenceAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "model_id": { + "$ref": "#/components/schemas/_types:Name" + }, + "inference_config": { + "$ref": "#/components/schemas/_types.aggregations:InferenceConfigContainer" + } + }, + "required": [ + "model_id" + ] + } + ] + }, + "_types.aggregations:InferenceConfigContainer": { + "type": "object", + "properties": { + "regression": { + "$ref": "#/components/schemas/ml._types:RegressionInferenceOptions" + }, + "classification": { + "$ref": "#/components/schemas/ml._types:ClassificationInferenceOptions" + } + }, + "minProperties": 1, + "maxProperties": 1 + }, + "ml._types:RegressionInferenceOptions": { + "type": "object", + "properties": { + "results_field": { + "$ref": "#/components/schemas/_types:Field" + }, + "num_top_feature_importance_values": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/machine-learning/current/ml-feature-importance.html" + }, + "description": "Specifies the maximum number of feature importance values per document.", + "type": "number" + } + } + }, + "ml._types:ClassificationInferenceOptions": { + "type": "object", + "properties": { + "num_top_classes": { + "description": "Specifies the number of top class predictions to return. Defaults to 0.", + "type": "number" + }, + "num_top_feature_importance_values": { + "externalDocs": { + "url": "https://www.elastic.co/guide/en/machine-learning/current/ml-feature-importance.html" + }, + "description": "Specifies the maximum number of feature importance values per document.", + "type": "number" + }, + "prediction_field_type": { + "description": "Specifies the type of the predicted field to write. Acceptable values are: string, number, boolean. When boolean is provided 1.0 is transformed to true and 0.0 to false.", + "type": "string" + }, + "results_field": { + "description": "The field that is added to incoming documents to contain the inference prediction. Defaults to predicted_value.", + "type": "string" + }, + "top_classes_results_field": { + "description": "Specifies the field to which the top classes are written. Defaults to top_classes.", + "type": "string" + } + } + }, + "_types.aggregations:MatrixStatsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MatrixAggregation" + }, + { + "type": "object", + "properties": { + "mode": { + "$ref": "#/components/schemas/_types:SortMode" + } + } + } + ] + }, + "_types.aggregations:MatrixAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:Aggregation" + }, + { + "type": "object", + "properties": { + "fields": { + "$ref": "#/components/schemas/_types:Fields" + }, + "missing": { + "description": "The value to apply to documents that do not have a value.\nBy default, documents without a value are ignored.", + "type": "object", + "additionalProperties": { + "type": "number" + } + } + } + } + ] + }, + "_types.aggregations:MaxAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:MaxBucketAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:MedianAbsoluteDeviationAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object", + "properties": { + "compression": { + "description": "Limits the maximum number of nodes used by the underlying TDigest algorithm to `20 * compression`, enabling control of memory usage and approximation error.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:MinAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:MinBucketAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:MissingAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "missing": { + "$ref": "#/components/schemas/_types.aggregations:Missing" + } + } + } + ] + }, + "_types.aggregations:MovingAverageAggregation": { + "discriminator": { + "propertyName": "model" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:LinearMovingAverageAggregation" + }, + { + "$ref": "#/components/schemas/_types.aggregations:SimpleMovingAverageAggregation" + }, + { + "$ref": "#/components/schemas/_types.aggregations:EwmaMovingAverageAggregation" + }, + { + "$ref": "#/components/schemas/_types.aggregations:HoltMovingAverageAggregation" + }, + { + "$ref": "#/components/schemas/_types.aggregations:HoltWintersMovingAverageAggregation" + } + ] + }, + "_types.aggregations:LinearMovingAverageAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MovingAverageAggregationBase" + }, + { + "type": "object", + "properties": { + "model": { + "type": "string", + "enum": [ + "linear" + ] + }, + "settings": { + "$ref": "#/components/schemas/_types:EmptyObject" + } + }, + "required": [ + "model", + "settings" + ] + } + ] + }, + "_types.aggregations:MovingAverageAggregationBase": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "minimize": { + "type": "boolean" + }, + "predict": { + "type": "number" + }, + "window": { + "type": "number" + } + } + } + ] + }, + "_types:EmptyObject": { + "type": "object" + }, + "_types.aggregations:SimpleMovingAverageAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MovingAverageAggregationBase" + }, + { + "type": "object", + "properties": { + "model": { + "type": "string", + "enum": [ + "simple" + ] + }, + "settings": { + "$ref": "#/components/schemas/_types:EmptyObject" + } + }, + "required": [ + "model", + "settings" + ] + } + ] + }, + "_types.aggregations:EwmaMovingAverageAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MovingAverageAggregationBase" + }, + { + "type": "object", + "properties": { + "model": { + "type": "string", + "enum": [ + "ewma" + ] + }, + "settings": { + "$ref": "#/components/schemas/_types.aggregations:EwmaModelSettings" + } + }, + "required": [ + "model", + "settings" + ] + } + ] + }, + "_types.aggregations:EwmaModelSettings": { + "type": "object", + "properties": { + "alpha": { + "type": "number" + } + } + }, + "_types.aggregations:HoltMovingAverageAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MovingAverageAggregationBase" + }, + { + "type": "object", + "properties": { + "model": { + "type": "string", + "enum": [ + "holt" + ] + }, + "settings": { + "$ref": "#/components/schemas/_types.aggregations:HoltLinearModelSettings" + } + }, + "required": [ + "model", + "settings" + ] + } + ] + }, + "_types.aggregations:HoltLinearModelSettings": { + "type": "object", + "properties": { + "alpha": { + "type": "number" + }, + "beta": { + "type": "number" + } + } + }, + "_types.aggregations:HoltWintersMovingAverageAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MovingAverageAggregationBase" + }, + { + "type": "object", + "properties": { + "model": { + "type": "string", + "enum": [ + "holt_winters" + ] + }, + "settings": { + "$ref": "#/components/schemas/_types.aggregations:HoltWintersModelSettings" + } + }, + "required": [ + "model", + "settings" + ] + } + ] + }, + "_types.aggregations:HoltWintersModelSettings": { + "type": "object", + "properties": { + "alpha": { + "type": "number" + }, + "beta": { + "type": "number" + }, + "gamma": { + "type": "number" + }, + "pad": { + "type": "boolean" + }, + "period": { + "type": "number" + }, + "type": { + "$ref": "#/components/schemas/_types.aggregations:HoltWintersType" + } + } + }, + "_types.aggregations:HoltWintersType": { + "type": "string", + "enum": [ + "add", + "mult" + ] + }, + "_types.aggregations:MovingPercentilesAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "window": { + "description": "The size of window to \"slide\" across the histogram.", + "type": "number" + }, + "shift": { + "description": "By default, the window consists of the last n values excluding the current bucket.\nIncreasing `shift` by 1, moves the starting window position by 1 to the right.", + "type": "number" + }, + "keyed": { + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:MovingFunctionAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "script": { + "description": "The script that should be executed on each window of data.", + "type": "string" + }, + "shift": { + "description": "By default, the window consists of the last n values excluding the current bucket.\nIncreasing `shift` by 1, moves the starting window position by 1 to the right.", + "type": "number" + }, + "window": { + "description": "The size of window to \"slide\" across the histogram.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:MultiTermsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "collect_mode": { + "$ref": "#/components/schemas/_types.aggregations:TermsAggregationCollectMode" + }, + "order": { + "$ref": "#/components/schemas/_types.aggregations:AggregateOrder" + }, + "min_doc_count": { + "description": "The minimum number of documents in a bucket for it to be returned.", + "type": "number" + }, + "shard_min_doc_count": { + "description": "The minimum number of documents in a bucket on each shard for it to be returned.", + "type": "number" + }, + "shard_size": { + "description": "The number of candidate terms produced by each shard.\nBy default, `shard_size` will be automatically estimated based on the number of shards and the `size` parameter.", + "type": "number" + }, + "show_term_doc_count_error": { + "description": "Calculates the doc count error on per term basis.", + "type": "boolean" + }, + "size": { + "description": "The number of term buckets should be returned out of the overall terms list.", + "type": "number" + }, + "terms": { + "description": "The field from which to generate sets of terms.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.aggregations:MultiTermLookup" + } + } + }, + "required": [ + "terms" + ] + } + ] + }, + "_types.aggregations:TermsAggregationCollectMode": { + "type": "string", + "enum": [ + "depth_first", + "breadth_first" + ] + }, + "_types.aggregations:MultiTermLookup": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "missing": { + "$ref": "#/components/schemas/_types.aggregations:Missing" + } + }, + "required": [ + "field" + ] + }, + "_types.aggregations:NestedAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "path": { + "$ref": "#/components/schemas/_types:Field" + } + } + } + ] + }, + "_types.aggregations:NormalizeAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "method": { + "$ref": "#/components/schemas/_types.aggregations:NormalizeMethod" + } + } + } + ] + }, + "_types.aggregations:NormalizeMethod": { + "type": "string", + "enum": [ + "rescale_0_1", + "rescale_0_100", + "percent_of_sum", + "mean", + "z-score", + "softmax" + ] + }, + "_types.aggregations:ParentAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/_types:RelationName" + } + } + } + ] + }, + "_types.aggregations:PercentileRanksAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object", + "properties": { + "keyed": { + "description": "By default, the aggregation associates a unique string key with each bucket and returns the ranges as a hash rather than an array.\nSet to `false` to disable this behavior.", + "type": "boolean" + }, + "values": { + "description": "An array of values for which to calculate the percentile ranks.", + "oneOf": [ + { + "type": "array", + "items": { + "type": "number" + } + }, + { + "nullable": true, + "type": "string" + } + ] + }, + "hdr": { + "$ref": "#/components/schemas/_types.aggregations:HdrMethod" + }, + "tdigest": { + "$ref": "#/components/schemas/_types.aggregations:TDigest" + } + } + } + ] + }, + "_types.aggregations:HdrMethod": { + "type": "object", + "properties": { + "number_of_significant_value_digits": { + "description": "Specifies the resolution of values for the histogram in number of significant digits.", + "type": "number" + } + } + }, + "_types.aggregations:TDigest": { + "type": "object", + "properties": { + "compression": { + "description": "Limits the maximum number of nodes used by the underlying TDigest algorithm to `20 * compression`, enabling control of memory usage and approximation error.", + "type": "number" + } + } + }, + "_types.aggregations:PercentilesAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object", + "properties": { + "keyed": { + "description": "By default, the aggregation associates a unique string key with each bucket and returns the ranges as a hash rather than an array.\nSet to `false` to disable this behavior.", + "type": "boolean" + }, + "percents": { + "description": "The percentiles to calculate.", + "type": "array", + "items": { + "type": "number" + } + }, + "hdr": { + "$ref": "#/components/schemas/_types.aggregations:HdrMethod" + }, + "tdigest": { + "$ref": "#/components/schemas/_types.aggregations:TDigest" + } + } + } + ] + }, + "_types.aggregations:PercentilesBucketAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "percents": { + "description": "The list of percentiles to calculate.", + "type": "array", + "items": { + "type": "number" + } + } + } + } + ] + }, + "_types.aggregations:RangeAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "missing": { + "description": "The value to apply to documents that do not have a value.\nBy default, documents without a value are ignored.", + "type": "number" + }, + "ranges": { + "description": "An array of ranges used to bucket documents.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.aggregations:AggregationRange" + } + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "keyed": { + "description": "Set to `true` to associate a unique string key with each bucket and return the ranges as a hash rather than an array.", + "type": "boolean" + }, + "format": { + "type": "string" + } + } + } + ] + }, + "_types.aggregations:RareTermsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "exclude": { + "$ref": "#/components/schemas/_types.aggregations:TermsExclude" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "include": { + "$ref": "#/components/schemas/_types.aggregations:TermsInclude" + }, + "max_doc_count": { + "description": "The maximum number of documents a term should appear in.", + "type": "number" + }, + "missing": { + "$ref": "#/components/schemas/_types.aggregations:Missing" + }, + "precision": { + "description": "The precision of the internal CuckooFilters.\nSmaller precision leads to better approximation, but higher memory usage.", + "type": "number" + }, + "value_type": { + "type": "string" + } + } + } + ] + }, + "_types.aggregations:RateAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object", + "properties": { + "unit": { + "$ref": "#/components/schemas/_types.aggregations:CalendarInterval" + }, + "mode": { + "$ref": "#/components/schemas/_types.aggregations:RateMode" + } + } + } + ] + }, + "_types.aggregations:RateMode": { + "type": "string", + "enum": [ + "sum", + "value_count" + ] + }, + "_types.aggregations:ReverseNestedAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "path": { + "$ref": "#/components/schemas/_types:Field" + } + } + } + ] + }, + "_types.aggregations:SamplerAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "shard_size": { + "description": "Limits how many top-scoring documents are collected in the sample processed on each shard.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:ScriptedMetricAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "combine_script": { + "$ref": "#/components/schemas/_types:Script" + }, + "init_script": { + "$ref": "#/components/schemas/_types:Script" + }, + "map_script": { + "$ref": "#/components/schemas/_types:Script" + }, + "params": { + "description": "A global object with script parameters for `init`, `map` and `combine` scripts.\nIt is shared between the scripts.", + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "reduce_script": { + "$ref": "#/components/schemas/_types:Script" + } + } + } + ] + }, + "_types.aggregations:SerialDifferencingAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object", + "properties": { + "lag": { + "description": "The historical bucket to subtract from the current value.\nMust be a positive, non-zero integer.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:SignificantTermsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "background_filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "chi_square": { + "$ref": "#/components/schemas/_types.aggregations:ChiSquareHeuristic" + }, + "exclude": { + "$ref": "#/components/schemas/_types.aggregations:TermsExclude" + }, + "execution_hint": { + "$ref": "#/components/schemas/_types.aggregations:TermsAggregationExecutionHint" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "gnd": { + "$ref": "#/components/schemas/_types.aggregations:GoogleNormalizedDistanceHeuristic" + }, + "include": { + "$ref": "#/components/schemas/_types.aggregations:TermsInclude" + }, + "jlh": { + "$ref": "#/components/schemas/_types:EmptyObject" + }, + "min_doc_count": { + "description": "Only return terms that are found in more than `min_doc_count` hits.", + "type": "number" + }, + "mutual_information": { + "$ref": "#/components/schemas/_types.aggregations:MutualInformationHeuristic" + }, + "percentage": { + "$ref": "#/components/schemas/_types.aggregations:PercentageScoreHeuristic" + }, + "script_heuristic": { + "$ref": "#/components/schemas/_types.aggregations:ScriptedHeuristic" + }, + "shard_min_doc_count": { + "description": "Regulates the certainty a shard has if the term should actually be added to the candidate list or not with respect to the `min_doc_count`.\nTerms will only be considered if their local shard frequency within the set is higher than the `shard_min_doc_count`.", + "type": "number" + }, + "shard_size": { + "description": "Can be used to control the volumes of candidate terms produced by each shard.\nBy default, `shard_size` will be automatically estimated based on the number of shards and the `size` parameter.", + "type": "number" + }, + "size": { + "description": "The number of buckets returned out of the overall terms list.", + "type": "number" + } + } + } + ] + }, + "_types.aggregations:ChiSquareHeuristic": { + "type": "object", + "properties": { + "background_is_superset": { + "description": "Set to `false` if you defined a custom background filter that represents a different set of documents that you want to compare to.", + "type": "boolean" + }, + "include_negatives": { + "description": "Set to `false` to filter out the terms that appear less often in the subset than in documents outside the subset.", + "type": "boolean" + } + }, + "required": [ + "background_is_superset", + "include_negatives" + ] + }, + "_types.aggregations:TermsAggregationExecutionHint": { + "type": "string", + "enum": [ + "map", + "global_ordinals", + "global_ordinals_hash", + "global_ordinals_low_cardinality" + ] + }, + "_types.aggregations:GoogleNormalizedDistanceHeuristic": { + "type": "object", + "properties": { + "background_is_superset": { + "description": "Set to `false` if you defined a custom background filter that represents a different set of documents that you want to compare to.", + "type": "boolean" + } + } + }, + "_types.aggregations:MutualInformationHeuristic": { + "type": "object", + "properties": { + "background_is_superset": { + "description": "Set to `false` if you defined a custom background filter that represents a different set of documents that you want to compare to.", + "type": "boolean" + }, + "include_negatives": { + "description": "Set to `false` to filter out the terms that appear less often in the subset than in documents outside the subset.", + "type": "boolean" + } + } + }, + "_types.aggregations:PercentageScoreHeuristic": { + "type": "object" + }, + "_types.aggregations:ScriptedHeuristic": { + "type": "object", + "properties": { + "script": { + "$ref": "#/components/schemas/_types:Script" + } + }, + "required": [ + "script" + ] + }, + "_types.aggregations:SignificantTextAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "background_filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + }, + "chi_square": { + "$ref": "#/components/schemas/_types.aggregations:ChiSquareHeuristic" + }, + "exclude": { + "$ref": "#/components/schemas/_types.aggregations:TermsExclude" + }, + "execution_hint": { + "$ref": "#/components/schemas/_types.aggregations:TermsAggregationExecutionHint" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "filter_duplicate_text": { + "description": "Whether to out duplicate text to deal with noisy data.", + "type": "boolean" + }, + "gnd": { + "$ref": "#/components/schemas/_types.aggregations:GoogleNormalizedDistanceHeuristic" + }, + "include": { + "$ref": "#/components/schemas/_types.aggregations:TermsInclude" + }, + "jlh": { + "$ref": "#/components/schemas/_types:EmptyObject" + }, + "min_doc_count": { + "description": "Only return values that are found in more than `min_doc_count` hits.", + "type": "number" + }, + "mutual_information": { + "$ref": "#/components/schemas/_types.aggregations:MutualInformationHeuristic" + }, + "percentage": { + "$ref": "#/components/schemas/_types.aggregations:PercentageScoreHeuristic" + }, + "script_heuristic": { + "$ref": "#/components/schemas/_types.aggregations:ScriptedHeuristic" + }, + "shard_min_doc_count": { + "description": "Regulates the certainty a shard has if the values should actually be added to the candidate list or not with respect to the min_doc_count.\nValues will only be considered if their local shard frequency within the set is higher than the `shard_min_doc_count`.", + "type": "number" + }, + "shard_size": { + "description": "The number of candidate terms produced by each shard.\nBy default, `shard_size` will be automatically estimated based on the number of shards and the `size` parameter.", + "type": "number" + }, + "size": { + "description": "The number of buckets returned out of the overall terms list.", + "type": "number" + }, + "source_fields": { + "$ref": "#/components/schemas/_types:Fields" + } + } + } + ] + }, + "_types.aggregations:StatsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:StatsBucketAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:StringStatsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "show_distribution": { + "description": "Shows the probability distribution for all characters.", + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:SumAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormatMetricAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:SumBucketAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:PipelineAggregationBase" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:TermsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:BucketAggregationBase" + }, + { + "type": "object", + "properties": { + "collect_mode": { + "$ref": "#/components/schemas/_types.aggregations:TermsAggregationCollectMode" + }, + "exclude": { + "$ref": "#/components/schemas/_types.aggregations:TermsExclude" + }, + "execution_hint": { + "$ref": "#/components/schemas/_types.aggregations:TermsAggregationExecutionHint" + }, + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "include": { + "$ref": "#/components/schemas/_types.aggregations:TermsInclude" + }, + "min_doc_count": { + "description": "Only return values that are found in more than `min_doc_count` hits.", + "type": "number" + }, + "missing": { + "$ref": "#/components/schemas/_types.aggregations:Missing" + }, + "missing_order": { + "$ref": "#/components/schemas/_types.aggregations:MissingOrder" + }, + "missing_bucket": { + "type": "boolean" + }, + "value_type": { + "description": "Coerced unmapped fields into the specified type.", + "type": "string" + }, + "order": { + "$ref": "#/components/schemas/_types.aggregations:AggregateOrder" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "shard_size": { + "description": "The number of candidate terms produced by each shard.\nBy default, `shard_size` will be automatically estimated based on the number of shards and the `size` parameter.", + "type": "number" + }, + "show_term_doc_count_error": { + "description": "Set to `true` to return the `doc_count_error_upper_bound`, which is an upper bound to the error on the `doc_count` returned by each shard.", + "type": "boolean" + }, + "size": { + "description": "The number of buckets returned out of the overall terms list.", + "type": "number" + }, + "format": { + "type": "string" + } + } + } + ] + }, + "_types.aggregations:TopHitsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "docvalue_fields": { + "description": "Fields for which to return doc values.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:FieldAndFormat" + } + }, + "explain": { + "description": "If `true`, returns detailed information about score computation as part of a hit.", + "type": "boolean" + }, + "fields": { + "description": "Array of wildcard (*) patterns. The request returns values for field names\nmatching these patterns in the hits.fields property of the response.", + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.query_dsl:FieldAndFormat" + } + }, + "from": { + "description": "Starting document offset.", + "type": "number" + }, + "highlight": { + "$ref": "#/components/schemas/_global.search._types:Highlight" + }, + "script_fields": { + "description": "Returns the result of one or more script evaluations for each hit.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/_types:ScriptField" + } + }, + "size": { + "description": "The maximum number of top matching hits to return per bucket.", + "type": "number" + }, + "sort": { + "$ref": "#/components/schemas/_types:Sort" + }, + "_source": { + "$ref": "#/components/schemas/_global.search._types:SourceConfig" + }, + "stored_fields": { + "$ref": "#/components/schemas/_types:Fields" + }, + "track_scores": { + "description": "If `true`, calculates and returns document scores, even if the scores are not used for sorting.", + "type": "boolean" + }, + "version": { + "description": "If `true`, returns document version as part of a hit.", + "type": "boolean" + }, + "seq_no_primary_term": { + "description": "If `true`, returns sequence number and primary term of the last modification of each hit.", + "type": "boolean" + } + } + } + ] + }, + "_types.aggregations:TTestAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:Aggregation" + }, + { + "type": "object", + "properties": { + "a": { + "$ref": "#/components/schemas/_types.aggregations:TestPopulation" + }, + "b": { + "$ref": "#/components/schemas/_types.aggregations:TestPopulation" + }, + "type": { + "$ref": "#/components/schemas/_types.aggregations:TTestType" + } + } + } + ] + }, + "_types.aggregations:TestPopulation": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + }, + "filter": { + "$ref": "#/components/schemas/_types.query_dsl:QueryContainer" + } + }, + "required": [ + "field" + ] + }, + "_types.aggregations:TTestType": { + "type": "string", + "enum": [ + "paired", + "homoscedastic", + "heteroscedastic" + ] + }, + "_types.aggregations:TopMetricsAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "metrics": { + "description": "The fields of the top document to return.", + "oneOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:TopMetricsValue" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/_types.aggregations:TopMetricsValue" + } + } + ] + }, + "size": { + "description": "The number of top documents from which to return metrics.", + "type": "number" + }, + "sort": { + "$ref": "#/components/schemas/_types:Sort" + } + } + } + ] + }, + "_types.aggregations:TopMetricsValue": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + } + }, + "required": [ + "field" + ] + }, + "_types.aggregations:ValueCountAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:FormattableMetricAggregation" + }, + { + "type": "object" + } + ] + }, + "_types.aggregations:FormattableMetricAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:MetricAggregationBase" + }, + { + "type": "object", + "properties": { + "format": { + "type": "string" + } + } + } + ] + }, + "_types.aggregations:WeightedAverageAggregation": { + "allOf": [ + { + "$ref": "#/components/schemas/_types.aggregations:Aggregation" + }, + { + "type": "object", + "properties": { + "format": { + "description": "A numeric response formatter.", + "type": "string" + }, + "value": { + "$ref": "#/components/schemas/_types.aggregations:WeightedAverageValue" + }, + "value_type": { + "$ref": "#/components/schemas/_types.aggregations:ValueType" + }, + "weight": { + "$ref": "#/components/schemas/_types.aggregations:WeightedAverageValue" + } + } + } + ] + }, + "_types.aggregations:WeightedAverageValue": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "missing": { + "description": "A value or weight to use if the field is missing.", + "type": "number" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + } + } + }, + "_types.aggregations:VariableWidthHistogramAggregation": { + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/_types:Field" + }, + "buckets": { + "description": "The target number of buckets.", + "type": "number" + }, + "shard_size": { + "description": "The number of buckets that the coordinating node will request from each shard.\nDefaults to `buckets * 50`.", + "type": "number" + }, + "initial_buffer": { + "description": "Specifies the number of individual documents that will be stored in memory on a shard before the initial bucketing algorithm is run.\nDefaults to `min(10 * shard_size, 50000)`.", + "type": "number" + }, + "script": { + "$ref": "#/components/schemas/_types:Script" + } + } + }, + "transform._types:PivotGroupByContainer": { + "type": "object", + "properties": { + "date_histogram": { + "$ref": "#/components/schemas/_types.aggregations:DateHistogramAggregation" + }, + "geotile_grid": { + "$ref": "#/components/schemas/_types.aggregations:GeoTileGridAggregation" + }, + "histogram": { + "$ref": "#/components/schemas/_types.aggregations:HistogramAggregation" + }, + "terms": { + "$ref": "#/components/schemas/_types.aggregations:TermsAggregation" + } + }, + "minProperties": 1, + "maxProperties": 1 + } + } + } +} \ No newline at end of file diff --git a/x-pack/plugins/ml/server/models/json_schema_service/schema_overrides.ts b/x-pack/packages/ml/json_schemas/src/schema_overrides.ts similarity index 82% rename from x-pack/plugins/ml/server/models/json_schema_service/schema_overrides.ts rename to x-pack/packages/ml/json_schemas/src/schema_overrides.ts index bacc90389592a..a3b8fabafec1e 100644 --- a/x-pack/plugins/ml/server/models/json_schema_service/schema_overrides.ts +++ b/x-pack/packages/ml/json_schemas/src/schema_overrides.ts @@ -5,13 +5,13 @@ * 2.0. */ -import type { SupportedPath } from '../../../common/api_schemas/json_schema_schema'; +import type { EditorEndpoints } from './json_schema_service'; import type { PropertyDefinition } from './types'; /** * Extension of the schema definition extracted from the Elasticsearch specification. */ -export const jsonSchemaOverrides: Record> = { +export const jsonSchemaOverrides: Partial>> = { '/_ml/anomaly_detectors/{job_id}': { // background_persist_interval is required according to the ES spec required: ['analysis_config', 'data_description'], diff --git a/x-pack/plugins/ml/server/models/json_schema_service/types.ts b/x-pack/packages/ml/json_schemas/src/types.ts similarity index 100% rename from x-pack/plugins/ml/server/models/json_schema_service/types.ts rename to x-pack/packages/ml/json_schemas/src/types.ts diff --git a/x-pack/packages/ml/json_schemas/tsconfig.json b/x-pack/packages/ml/json_schemas/tsconfig.json new file mode 100644 index 0000000000000..e036ed4845c6b --- /dev/null +++ b/x-pack/packages/ml/json_schemas/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "**/*.ts", + "**/*.json" + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [ + "@kbn/dev-cli-runner", + ] +} diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/advanced_step/advanced_step_details.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/advanced_step/advanced_step_details.tsx index 685c03e726c23..720b89a1b011b 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/advanced_step/advanced_step_details.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/advanced_step/advanced_step_details.tsx @@ -76,7 +76,7 @@ export const AdvancedStepDetails: FC<{ defaultMessage: 'Compute feature influence', } ), - description: computeFeatureInfluence, + description: computeFeatureInfluence.toString(), }); advancedSecondCol.push({ diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/advanced_step/advanced_step_form.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/advanced_step/advanced_step_form.tsx index 6e93775486ed7..24577dd0dcc04 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/advanced_step/advanced_step_form.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/advanced_step/advanced_step_form.tsx @@ -292,11 +292,11 @@ export const AdvancedStepForm: FC = ({ ), }, ]} - value={computeFeatureInfluence} + value={computeFeatureInfluence ? 'true' : 'false'} hasNoInitialSelection={false} onChange={(e) => { setFormState({ - computeFeatureInfluence: e.target.value, + computeFeatureInfluence: e.target.value === 'true' ? true : false, }); }} /> diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/advanced_step/outlier_hyper_parameters.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/advanced_step/outlier_hyper_parameters.tsx index 83a8f4ef518d9..e590f4cb7fd88 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/advanced_step/outlier_hyper_parameters.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/advanced_step/outlier_hyper_parameters.tsx @@ -156,10 +156,10 @@ export const OutlierHyperParameters: FC = ({ actions, state, advancedPara ), }, ]} - value={standardizationEnabled} + value={standardizationEnabled ? 'true' : 'false'} hasNoInitialSelection={true} onChange={(e) => { - setFormState({ standardizationEnabled: e.target.value }); + setFormState({ standardizationEnabled: e.target.value === 'true' ? true : false }); }} /> diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/create_analytics_advanced_editor/create_analytics_advanced_editor.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/create_analytics_advanced_editor/create_analytics_advanced_editor.tsx index 1a0c0f5dab368..cdc93fbeb4feb 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/create_analytics_advanced_editor/create_analytics_advanced_editor.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/create_analytics_advanced_editor/create_analytics_advanced_editor.tsx @@ -11,15 +11,19 @@ import { debounce } from 'lodash'; import { EuiCallOut, EuiFieldText, EuiForm, EuiFormRow, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { CodeEditor } from '@kbn/code-editor'; import { extractErrorMessage } from '@kbn/ml-error-utils'; +import { dynamic } from '@kbn/shared-ux-utility'; import { useNotifications } from '../../../../../contexts/kibana'; import { ml } from '../../../../../services/ml_api_service'; import type { CreateAnalyticsFormProps } from '../../../analytics_management/hooks/use_create_analytics_form'; import { CreateStep } from '../create_step'; import { ANALYTICS_STEPS } from '../../page'; +const EditorComponent = dynamic(async () => ({ + default: (await import('./editor_component')).EditorComponent, +})); + export const CreateAnalyticsAdvancedEditor: FC = (props) => { const { actions, state } = props; const { setAdvancedEditorRawString, setFormState } = actions; @@ -141,37 +145,10 @@ export const CreateAnalyticsAdvancedEditor: FC = (prop style={{ maxWidth: '100%' }} >
-
diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/create_analytics_advanced_editor/editor_component.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/create_analytics_advanced_editor/editor_component.tsx new file mode 100644 index 0000000000000..8e81ed2373e33 --- /dev/null +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/create_analytics_advanced_editor/editor_component.tsx @@ -0,0 +1,70 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { CodeEditor } from '@kbn/code-editor'; +import { i18n } from '@kbn/i18n'; +import dfaJsonSchema from '@kbn/json-schemas/src/put___ml_data_frame_analytics__id__schema.json'; +import { monaco } from '@kbn/monaco'; +import type { FC } from 'react'; +import React from 'react'; + +export const EditorComponent: FC<{ + value: string; + onChange: (update: string) => void; + readOnly: boolean; +}> = ({ value, onChange, readOnly }) => { + return ( + { + const editorModelUri: string = editor.getModel()?.uri.toString()!; + monaco.languages.json.jsonDefaults.setDiagnosticsOptions({ + validate: true, + enableSchemaRequest: false, + schemaValidation: 'error', + schemas: [ + ...(monaco.languages.json.jsonDefaults.diagnosticsOptions.schemas ?? []), + { + uri: editorModelUri, + fileMatch: [editorModelUri], + schema: dfaJsonSchema, + }, + ], + }); + }} + /> + ); +}; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/state.ts b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/state.ts index c8ccf01cdae27..0157509867009 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/state.ts +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/state.ts @@ -51,7 +51,7 @@ export interface State { disableSwitchToForm: boolean; form: { alpha: undefined | number; - computeFeatureInfluence: string; + computeFeatureInfluence: boolean; createDataView: boolean; classAssignmentObjective: undefined | string; dependentVariable: DependentVariable; @@ -111,7 +111,7 @@ export interface State { sourceIndexNameValid: boolean; sourceIndexContainsNumericalFields: boolean; sourceIndexFieldsCheckFailed: boolean; - standardizationEnabled: undefined | string; + standardizationEnabled: undefined | boolean; timeFieldName: undefined | string; trainingPercent: number; useEstimatedMml: boolean; @@ -137,7 +137,7 @@ export const getInitialState = (): State => ({ disableSwitchToForm: false, form: { alpha: undefined, - computeFeatureInfluence: 'true', + computeFeatureInfluence: true, createDataView: true, classAssignmentObjective: undefined, dependentVariable: '', @@ -197,7 +197,7 @@ export const getInitialState = (): State => ({ sourceIndexNameValid: false, sourceIndexContainsNumericalFields: true, sourceIndexFieldsCheckFailed: false, - standardizationEnabled: 'true', + standardizationEnabled: true, timeFieldName: undefined, trainingPercent: 80, useEstimatedMml: true, diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/common/json_editor_flyout/json_editor_flyout.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/common/json_editor_flyout/json_editor_flyout.tsx index c9b50746da865..028cbc0e54f2a 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/common/json_editor_flyout/json_editor_flyout.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/common/json_editor_flyout/json_editor_flyout.tsx @@ -9,7 +9,6 @@ import type { FC } from 'react'; import React, { Fragment, useState, useContext, useEffect, useMemo } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { memoize } from 'lodash'; import { EuiFlyout, EuiFlyoutFooter, @@ -23,7 +22,6 @@ import { EuiCallOut, } from '@elastic/eui'; import { XJson } from '@kbn/es-ui-shared-plugin/public'; -import { useMlApiContext } from '../../../../../../contexts/kibana'; import type { CombinedJob, Datafeed, @@ -49,23 +47,12 @@ interface Props { datafeedEditorMode: EDITOR_MODE; } -const fetchSchemas = memoize( - async (jsonSchemaApi, path: string, method: string) => - jsonSchemaApi.getSchemaDefinition({ - path, - method, - }), - (jsonSchemaApi, path, method) => path + method -); - export const JsonEditorFlyout: FC = ({ isDisabled, jobEditorMode, datafeedEditorMode }) => { const { jobCreator, jobCreatorUpdate, jobCreatorUpdated } = useContext(JobCreatorContext); const { displayErrorToast } = useToastNotificationService(); const [showJsonFlyout, setShowJsonFlyout] = useState(false); const [showChangedIndicesWarning, setShowChangedIndicesWarning] = useState(false); - const { jsonSchema: jsonSchemaApi } = useMlApiContext(); - const [jobConfigString, setJobConfigString] = useState(jobCreator.formattedJobJson); const [datafeedConfigString, setDatafeedConfigString] = useState( jobCreator.formattedDatafeedJson @@ -98,28 +85,18 @@ export const JsonEditorFlyout: FC = ({ isDisabled, jobEditorMode, datafee // eslint-disable-next-line react-hooks/exhaustive-deps }, [showJsonFlyout]); - useEffect( - function fetchSchemasOnMount() { - fetchSchemas(jsonSchemaApi, '/_ml/anomaly_detectors/{job_id}', 'put') - .then((result) => { - setJobSchema(result); - }) - .catch((e) => { - // eslint-disable-next-line no-console - console.error(e); - }); + useEffect(function fetchSchemasOnMount() { + // async import json schema + import('@kbn/json-schemas/src/put___ml_anomaly_detectors__job_id__schema.json').then( + (result) => { + setJobSchema(result); + } + ); - fetchSchemas(jsonSchemaApi, '/_ml/datafeeds/{datafeed_id}', 'put') - .then((result) => { - setDatafeedSchema(result); - }) - .catch((e) => { - // eslint-disable-next-line no-console - console.error(e); - }); - }, - [jsonSchemaApi] - ); + import('@kbn/json-schemas/src/put___ml_datafeeds__datafeed_id__schema.json').then((result) => { + setDatafeedSchema(result); + }); + }, []); const editJsonMode = jobEditorMode === EDITOR_MODE.EDITABLE || datafeedEditorMode === EDITOR_MODE.EDITABLE; diff --git a/x-pack/plugins/ml/scripts/apidoc_scripts/apidoc_config/apidoc.json b/x-pack/plugins/ml/scripts/apidoc_scripts/apidoc_config/apidoc.json index c1dde5fda0507..f262a3c6029a7 100644 --- a/x-pack/plugins/ml/scripts/apidoc_scripts/apidoc_config/apidoc.json +++ b/x-pack/plugins/ml/scripts/apidoc_scripts/apidoc_config/apidoc.json @@ -193,9 +193,6 @@ "ModelManagement", "GetModelManagementNodesOverview", - "GetModelManagementMemoryUsage", - - "JsonSchema", - "GetJsonSchema" + "GetModelManagementMemoryUsage" ] } diff --git a/x-pack/plugins/ml/server/models/json_schema_service/json_schema_service.test.ts b/x-pack/plugins/ml/server/models/json_schema_service/json_schema_service.test.ts deleted file mode 100644 index c9c66ee5a554b..0000000000000 --- a/x-pack/plugins/ml/server/models/json_schema_service/json_schema_service.test.ts +++ /dev/null @@ -1,612 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { JsonSchemaService } from './json_schema_service'; - -describe.skip('JsonSchemaService', function () { - test('extract schema definition and applies overrides', async () => { - const service = new JsonSchemaService(); - - const result = await service.extractSchema('/_ml/anomaly_detectors/{job_id}', 'put'); - - expect(result).toEqual({ - additionalProperties: false, - properties: { - allow_lazy_open: { - description: - 'Advanced configuration option. Specifies whether this job can open when there is insufficient machine learning node capacity for it to be immediately assigned to a node. By default, if a machine learning node with capacity to run the job cannot immediately be found, the open anomaly detection jobs API returns an error. However, this is also subject to the cluster-wide `xpack.ml.max_lazy_ml_nodes` setting. If this option is set to true, the open anomaly detection jobs API does not return an error and the job waits in the opening state until sufficient machine learning node capacity is available.', - type: 'boolean', - }, - analysis_config: { - additionalProperties: false, - description: - 'Specifies how to analyze the data. After you create a job, you cannot change the analysis configuration; all the properties are informational.', - properties: { - bucket_span: { - description: - 'The size of the interval that the analysis is aggregated into, typically between `5m` and `1h`. This value should be either a whole number of days or equate to a\nwhole number of buckets in one day. If the anomaly detection job uses a datafeed with aggregations, this value must also be divisible by the interval of the date histogram aggregation.\n* @server_default 5m', - type: 'string', - }, - categorization_analyzer: { - anyOf: [ - { - type: 'string', - }, - { - additionalProperties: false, - properties: { - char_filter: { - description: - 'One or more character filters. In addition to the built-in character filters, other plugins can provide more character filters. If this property is not specified, no character filters are applied prior to categorization. If you are customizing some other aspect of the analyzer and you need to achieve the equivalent of `categorization_filters` (which are not permitted when some other aspect of the analyzer is customized), add them here as pattern replace character filters.', - items: { - anyOf: [ - { - type: 'string', - }, - { - anyOf: [{}, {}, {}, {}, {}], - }, - ], - }, - type: 'array', - }, - filter: { - description: - 'One or more token filters. In addition to the built-in token filters, other plugins can provide more token filters. If this property is not specified, no token filters are applied prior to categorization.', - items: { - anyOf: [ - { - type: 'string', - }, - { - anyOf: [ - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - ], - }, - ], - }, - type: 'array', - }, - tokenizer: { - anyOf: [ - { - type: 'string', - }, - { - anyOf: [{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}], - }, - ], - description: - 'The name or definition of the tokenizer to use after character filters are applied. This property is compulsory if `categorization_analyzer` is specified as an object. Machine learning provides a tokenizer called `ml_standard` that tokenizes in a way that has been determined to produce good categorization results on a variety of log file formats for logs in English. If you want to use that tokenizer but change the character or token filters, specify "tokenizer": "ml_standard" in your `categorization_analyzer`. Additionally, the `ml_classic` tokenizer is available, which tokenizes in the same way as the non-customizable tokenizer in old versions of the product (before 6.2). `ml_classic` was the default categorization tokenizer in versions 6.2 to 7.13, so if you need categorization identical to the default for jobs created in these versions, specify "tokenizer": "ml_classic" in your `categorization_analyzer`.', - }, - }, - type: 'object', - }, - ], - description: - 'If `categorization_field_name` is specified, you can also define the analyzer that is used to interpret the categorization field. This property cannot be used at the same time as `categorization_filters`. The categorization analyzer specifies how the `categorization_field` is interpreted by the categorization process. The `categorization_analyzer` field can be specified either as a string or as an object. If it is a string, it must refer to a built-in analyzer or one added by another plugin.', - }, - categorization_field_name: { - description: - 'If this property is specified, the values of the specified field will be categorized. The resulting categories must be used in a detector by setting `by_field_name`, `over_field_name`, or `partition_field_name` to the keyword `mlcategory`.', - type: 'string', - }, - categorization_filters: { - description: - 'If `categorization_field_name` is specified, you can also define optional filters. This property expects an array of regular expressions. The expressions are used to filter out matching sequences from the categorization field values. You can use this functionality to fine tune the categorization by excluding sequences from consideration when categories are defined. For example, you can exclude SQL statements that appear in your log files. This property cannot be used at the same time as `categorization_analyzer`. If you only want to define simple regular expression filters that are applied prior to tokenization, setting this property is the easiest method. If you also want to customize the tokenizer or post-tokenization filtering, use the `categorization_analyzer` property instead and include the filters as pattern_replace character filters. The effect is exactly the same.', - items: { - type: 'string', - }, - type: 'array', - }, - detectors: { - description: - 'Detector configuration objects specify which data fields a job analyzes. They also specify which analytical functions are used. You can specify multiple detectors for a job. If the detectors array does not contain at least one detector, no analysis can occur and an error is returned.', - items: { - additionalProperties: false, - properties: { - by_field_name: { - description: - 'The field used to split the data. In particular, this property is used for analyzing the splits with respect to their own history. It is used for finding unusual values in the context of the split.', - type: 'string', - }, - custom_rules: { - description: - 'Custom rules enable you to customize the way detectors operate. For example, a rule may dictate conditions under which results should be skipped. Kibana refers to custom rules as job rules.', - items: { - additionalProperties: false, - properties: { - actions: { - description: - 'The set of actions to be triggered when the rule applies. If more than one action is specified the effects of all actions are combined.', - items: { - enum: ['skip_result', 'skip_model_update'], - type: 'string', - }, - type: 'array', - }, - conditions: { - description: - 'An array of numeric conditions when the rule applies. A rule must either have a non-empty scope or at least one condition. Multiple conditions are combined together with a logical AND.', - items: { - additionalProperties: false, - properties: { - applies_to: { - description: - 'Specifies the result property to which the condition applies. If your detector uses `lat_long`, `metric`, `rare`, or `freq_rare` functions, you can only specify conditions that apply to time.', - enum: ['actual', 'typical', 'diff_from_typical', 'time'], - type: 'string', - }, - operator: { - description: - 'Specifies the condition operator. The available options are greater than, greater than or equals, less than, and less than or equals.', - enum: ['gt', 'gte', 'lt', 'lte'], - type: 'string', - }, - value: { - description: - 'The value that is compared against the `applies_to` field using the operator.', - type: 'number', - }, - }, - required: ['applies_to', 'operator', 'value'], - type: 'object', - }, - type: 'array', - }, - scope: { - additionalProperties: { - additionalProperties: false, - properties: { - filter_id: { - description: 'The identifier for the filter.', - type: 'string', - }, - filter_type: { - description: - 'If set to `include`, the rule applies for values in the filter. If set to `exclude`, the rule applies for values not in the filter.', - enum: ['include', 'exclude'], - type: 'string', - }, - }, - required: ['filter_id'], - type: 'object', - }, - description: - 'A scope of series where the rule applies. A rule must either have a non-empty scope or at least one condition. By default, the scope includes all series. Scoping is allowed for any of the fields that are also specified in `by_field_name`, `over_field_name`, or `partition_field_name`.', - type: 'object', - }, - }, - type: 'object', - }, - type: 'array', - }, - detector_description: { - description: 'A description of the detector.', - type: 'string', - }, - detector_index: { - description: - 'A unique identifier for the detector. This identifier is based on the order of the detectors in the `analysis_config`, starting at zero. If you specify a value for this property, it is ignored.', - type: 'number', - }, - exclude_frequent: { - description: - 'If set, frequent entities are excluded from influencing the anomaly results. Entities can be considered frequent over time or frequent in a population. If you are working with both over and by fields, you can set `exclude_frequent` to `all` for both fields, or to `by` or `over` for those specific fields.', - enum: ['all', 'none', 'by', 'over'], - type: 'string', - }, - field_name: { - description: - 'The field that the detector uses in the function. If you use an event rate function such as count or rare, do not specify this field. The `field_name` cannot contain double quotes or backslashes.', - type: 'string', - }, - function: { - description: - 'The analysis function that is used. For example, `count`, `rare`, `mean`, `min`, `max`, or `sum`.', - type: 'string', - }, - over_field_name: { - description: - 'The field used to split the data. In particular, this property is used for analyzing the splits with respect to the history of all splits. It is used for finding unusual values in the population of all splits.', - type: 'string', - }, - partition_field_name: { - description: - 'The field used to segment the analysis. When you use this property, you have completely independent baselines for each value of this field.', - type: 'string', - }, - use_null: { - description: - 'Defines whether a new series is used as the null series when there is no value for the by or partition fields.', - type: 'boolean', - }, - }, - required: ['function'], - type: 'object', - }, - type: 'array', - }, - influencers: { - description: - 'A comma separated list of influencer field names. Typically these can be the by, over, or partition fields that are used in the detector configuration. You might also want to use a field name that is not specifically named in a detector, but is available as part of the input data. When you use multiple detectors, the use of influencers is recommended as it aggregates results for each influencer entity.', - items: { - type: 'string', - }, - type: 'array', - }, - latency: { - anyOf: [ - { - type: 'string', - }, - { - type: 'number', - }, - ], - description: - 'The size of the window in which to expect data that is out of time order. If you specify a non-zero value, it must be greater than or equal to one second. NOTE: Latency is applicable only when you send data by using the post data API.', - }, - model_prune_window: { - anyOf: [ - { - type: 'string', - }, - { - type: 'number', - }, - ], - description: - 'Advanced configuration option. Affects the pruning of models that have not been updated for the given time duration. The value must be set to a multiple of the `bucket_span`. If set too low, important information may be removed from the model. For jobs created in 8.1 and later, the default value is the greater of `30d` or 20 times `bucket_span`.', - }, - multivariate_by_fields: { - description: - 'This functionality is reserved for internal use. It is not supported for use in customer environments and is not subject to the support SLA of official GA features. If set to `true`, the analysis will automatically find correlations between metrics for a given by field value and report anomalies when those correlations cease to hold. For example, suppose CPU and memory usage on host A is usually highly correlated with the same metrics on host B. Perhaps this correlation occurs because they are running a load-balanced application. If you enable this property, anomalies will be reported when, for example, CPU usage on host A is high and the value of CPU usage on host B is low. That is to say, you’ll see an anomaly when the CPU of host A is unusual given the CPU of host B. To use the `multivariate_by_fields` property, you must also specify `by_field_name` in your detector.', - type: 'boolean', - }, - per_partition_categorization: { - additionalProperties: false, - description: - 'Settings related to how categorization interacts with partition fields.', - properties: { - enabled: { - description: - 'To enable this setting, you must also set the `partition_field_name` property to the same value in every detector that uses the keyword `mlcategory`. Otherwise, job creation fails.', - type: 'boolean', - }, - stop_on_warn: { - description: - 'This setting can be set to true only if per-partition categorization is enabled. If true, both categorization and subsequent anomaly detection stops for partitions where the categorization status changes to warn. This setting makes it viable to have a job where it is expected that categorization works well for some partitions but not others; you do not pay the cost of bad categorization forever in the partitions where it works badly.', - type: 'boolean', - }, - }, - type: 'object', - }, - summary_count_field_name: { - description: - 'If this property is specified, the data that is fed to the job is expected to be pre-summarized. This property value is the name of the field that contains the count of raw data points that have been summarized. The same `summary_count_field_name` applies to all detectors in the job. NOTE: The `summary_count_field_name` property cannot be used with the `metric` function.', - type: 'string', - }, - }, - required: ['bucket_span', 'detectors'], - type: 'object', - }, - analysis_limits: { - additionalProperties: false, - description: - 'Limits can be applied for the resources required to hold the mathematical models in memory. These limits are approximate and can be set per job. They do not control the memory used by other processes, for example the Elasticsearch Java processes.', - properties: { - categorization_examples_limit: { - description: - 'The maximum number of examples stored per category in memory and in the results data store. If you increase this value, more examples are available, however it requires that you have more storage available. If you set this value to 0, no examples are stored. NOTE: The `categorization_examples_limit` applies only to analysis that uses categorization.', - type: 'number', - }, - model_memory_limit: { - description: - 'The approximate maximum amount of memory resources that are required for analytical processing. Once this limit is approached, data pruning becomes more aggressive. Upon exceeding this limit, new entities are not modeled. If the `xpack.ml.max_model_memory_limit` setting has a value greater than 0 and less than 1024mb, that value is used instead of the default. The default value is relatively small to ensure that high resource usage is a conscious decision. If you have jobs that are expected to analyze high cardinality fields, you will likely need to use a higher value. If you specify a number instead of a string, the units are assumed to be MiB. Specifying a string is recommended for clarity. If you specify a byte size unit of `b` or `kb` and the number does not equate to a discrete number of megabytes, it is rounded down to the closest MiB. The minimum valid value is 1 MiB. If you specify a value less than 1 MiB, an error occurs. If you specify a value for the `xpack.ml.max_model_memory_limit` setting, an error occurs when you try to create jobs that have `model_memory_limit` values greater than that setting value.', - type: 'string', - }, - }, - type: 'object', - }, - background_persist_interval: { - anyOf: [ - { - type: 'string', - }, - { - type: 'number', - }, - ], - description: - 'Advanced configuration option. The time between each periodic persistence of the model. The default value is a randomized value between 3 to 4 hours, which avoids all jobs persisting at exactly the same time. The smallest allowed value is 1 hour. For very large models (several GB), persistence could take 10-20 minutes, so do not set the `background_persist_interval` value too low.', - }, - custom_settings: { - description: 'Advanced configuration option. Contains custom meta data about the job.', - }, - daily_model_snapshot_retention_after_days: { - description: - 'Advanced configuration option, which affects the automatic removal of old model snapshots for this job. It specifies a period of time (in days) after which only the first snapshot per day is retained. This period is relative to the timestamp of the most recent snapshot for this job. Valid values range from 0 to `model_snapshot_retention_days`.', - type: 'number', - }, - data_description: { - additionalProperties: false, - description: - 'Defines the format of the input data when you send data to the job by using the post data API. Note that when configure a datafeed, these properties are automatically set. When data is received via the post data API, it is not stored in Elasticsearch. Only the results for anomaly detection are retained.', - properties: { - field_delimiter: { - type: 'string', - }, - format: { - description: 'Only JSON format is supported at this time.', - type: 'string', - }, - time_field: { - description: 'The name of the field that contains the timestamp.', - type: 'string', - }, - time_format: { - description: - "The time format, which can be `epoch`, `epoch_ms`, or a custom pattern. The value `epoch` refers to UNIX or Epoch time (the number of seconds since 1 Jan 1970). The value `epoch_ms` indicates that time is measured in milliseconds since the epoch. The `epoch` and `epoch_ms` time formats accept either integer or real values. Custom patterns must conform to the Java DateTimeFormatter class. When you use date-time formatting patterns, it is recommended that you provide the full date, time and time zone. For example: `yyyy-MM-dd'T'HH:mm:ssX`. If the pattern that you specify is not sufficient to produce a complete timestamp, job creation fails.", - type: 'string', - }, - }, - type: 'object', - }, - datafeed_config: { - additionalProperties: false, - description: - 'Defines a datafeed for the anomaly detection job. If Elasticsearch security features are enabled, your datafeed remembers which roles the user who created it had at the time of creation and runs the query using those same roles. If you provide secondary authorization headers, those credentials are used instead.', - properties: { - aggregations: { - additionalProperties: {}, - description: - 'If set, the datafeed performs aggregation searches. Support for aggregations is limited and should be used only with low cardinality data.', - type: 'object', - }, - aggs: { - additionalProperties: {}, - description: - 'If set, the datafeed performs aggregation searches. Support for aggregations is limited and should be used only with low cardinality data.', - type: 'object', - }, - chunking_config: { - additionalProperties: false, - description: - 'Datafeeds might be required to search over long time periods, for several months or years. This search is split into time chunks in order to ensure the load on Elasticsearch is managed. Chunking configuration controls how the size of these time chunks are calculated and is an advanced configuration option.', - properties: { - mode: { - description: - 'If the mode is `auto`, the chunk size is dynamically calculated;\nthis is the recommended value when the datafeed does not use aggregations.\nIf the mode is `manual`, chunking is applied according to the specified `time_span`;\nuse this mode when the datafeed uses aggregations. If the mode is `off`, no chunking is applied.', - enum: ['auto', 'manual', 'off'], - type: 'string', - }, - time_span: { - anyOf: [ - { - type: 'string', - }, - { - type: 'number', - }, - ], - description: - 'The time span that each search will be querying. This setting is applicable only when the `mode` is set to `manual`.', - }, - }, - required: ['mode'], - type: 'object', - }, - datafeed_id: { - description: - 'A numerical character string that uniquely identifies the datafeed. This identifier can contain lowercase alphanumeric characters (a-z and 0-9), hyphens, and underscores. It must start and end with alphanumeric characters. The default value is the job identifier.', - type: 'string', - }, - delayed_data_check_config: { - additionalProperties: false, - description: - 'Specifies whether the datafeed checks for missing data and the size of the window. The datafeed can optionally search over indices that have already been read in an effort to determine whether any data has subsequently been added to the index. If missing data is found, it is a good indication that the `query_delay` option is set too low and the data is being indexed after the datafeed has passed that moment in time. This check runs only on real-time datafeeds.', - properties: { - check_window: { - anyOf: [ - { - type: 'string', - }, - { - type: 'number', - }, - ], - description: - 'The window of time that is searched for late data. This window of time ends with the latest finalized bucket.\nIt defaults to null, which causes an appropriate `check_window` to be calculated when the real-time datafeed runs.\nIn particular, the default `check_window` span calculation is based on the maximum of `2h` or `8 * bucket_span`.', - }, - enabled: { - description: - 'Specifies whether the datafeed periodically checks for delayed data.', - type: 'boolean', - }, - }, - required: ['enabled'], - type: 'object', - }, - frequency: { - description: - 'The interval at which scheduled queries are made while the datafeed runs in real time. The default value is either the bucket span for short bucket spans, or, for longer bucket spans, a sensible fraction of the bucket span. For example: `150s`. When `frequency` is shorter than the bucket span, interim results for the last (partial) bucket are written then eventually overwritten by the full bucket results. If the datafeed uses aggregations, this value must be divisible by the interval of the date histogram aggregation.', - type: 'string', - }, - indexes: { - items: { - type: 'string', - }, - type: 'array', - }, - indices: { - description: - 'An array of index names. Wildcards are supported. If any indices are in remote clusters, the machine learning nodes must have the `remote_cluster_client` role.', - items: { - type: 'string', - }, - type: 'array', - }, - indices_options: { - description: 'Specifies index expansion options that are used during search.', - }, - job_id: { - type: 'string', - }, - max_empty_searches: { - description: - 'If a real-time datafeed has never seen any data (including during any initial training period) then it will automatically stop itself and close its associated job after this many real-time searches that return no documents. In other words, it will stop after `frequency` times `max_empty_searches` of real-time operation. If not set then a datafeed with no end time that sees no data will remain started until it is explicitly stopped.', - type: 'number', - }, - query: { - description: - 'The Elasticsearch query domain-specific language (DSL). This value corresponds to the query object in an Elasticsearch search POST body. All the options that are supported by Elasticsearch can be used, as this object is passed verbatim to Elasticsearch.', - }, - query_delay: { - description: - 'The number of seconds behind real time that data is queried. For example, if data from 10:04 a.m. might not be searchable in Elasticsearch until 10:06 a.m., set this property to 120 seconds. The default value is randomly selected between `60s` and `120s`. This randomness improves the query performance when there are multiple jobs running on the same node.', - type: 'string', - }, - runtime_mappings: { - additionalProperties: { - anyOf: [ - {}, - { - items: {}, - type: 'array', - }, - ], - }, - description: 'Specifies runtime fields for the datafeed search.', - type: 'object', - }, - script_fields: { - additionalProperties: {}, - description: - 'Specifies scripts that evaluate custom expressions and returns script fields to the datafeed. The detector configuration objects in a job can contain functions that use these script fields.', - type: 'object', - }, - scroll_size: { - description: - 'The size parameter that is used in Elasticsearch searches when the datafeed does not use aggregations. The maximum value is the value of `index.max_result_window`, which is 10,000 by default.', - type: 'number', - }, - }, - required: ['indices', 'query'], - type: 'object', - }, - description: { - description: 'A description of the job.', - type: 'string', - }, - groups: { - description: 'A list of job groups. A job can belong to no groups or many.', - items: { - type: 'string', - }, - type: 'array', - }, - job_id: { - description: 'Identifier for the anomaly detection job.', - type: 'string', - }, - model_plot_config: { - additionalProperties: false, - description: - 'This advanced configuration option stores model information along with the results. It provides a more detailed view into anomaly detection. If you enable model plot it can add considerable overhead to the performance of the system; it is not feasible for jobs with many entities. Model plot provides a simplified and indicative view of the model and its bounds. It does not display complex features such as multivariate correlations or multimodal data. As such, anomalies may occasionally be reported which cannot be seen in the model plot. Model plot config can be configured when the job is created or updated later. It must be disabled if performance issues are experienced.', - properties: { - annotations_enabled: { - description: - 'If true, enables calculation and storage of the model change annotations for each entity that is being analyzed.', - type: 'boolean', - }, - enabled: { - description: - 'If true, enables calculation and storage of the model bounds for each entity that is being analyzed.', - type: 'boolean', - }, - terms: { - description: - 'Limits data collection to this comma separated list of partition or by field values. If terms are not specified or it is an empty string, no filtering is applied. Wildcards are not supported. Only the specified terms can be viewed when using the Single Metric Viewer.', - type: 'string', - }, - }, - type: 'object', - }, - model_snapshot_retention_days: { - description: - 'Advanced configuration option, which affects the automatic removal of old model snapshots for this job. It specifies the maximum period of time (in days) that snapshots are retained. This period is relative to the timestamp of the most recent snapshot for this job. By default, snapshots ten days older than the newest snapshot are deleted.', - type: 'number', - }, - renormalization_window_days: { - description: - 'Advanced configuration option. The period over which adjustments to the score are applied, as new data is seen. The default value is the longer of 30 days or 100 bucket spans.', - type: 'number', - }, - results_index_name: { - description: - 'A text string that affects the name of the machine learning results index. By default, the job generates an index named `.ml-anomalies-shared`.', - type: 'string', - }, - results_retention_days: { - description: - 'Advanced configuration option. The period of time (in days) that results are retained. Age is calculated relative to the timestamp of the latest bucket result. If this property has a non-null value, once per day at 00:30 (server time), results that are the specified number of days older than the latest bucket result are deleted from Elasticsearch. The default value is null, which means all results are retained. Annotations generated by the system also count as results for retention purposes; they are deleted after the same number of days as results. Annotations added by users are retained forever.', - type: 'number', - }, - }, - required: ['analysis_config', 'data_description'], - type: 'object', - }); - }); -}); diff --git a/x-pack/plugins/ml/server/models/json_schema_service/json_schema_service.ts b/x-pack/plugins/ml/server/models/json_schema_service/json_schema_service.ts deleted file mode 100644 index 86cfd6a0ff7d2..0000000000000 --- a/x-pack/plugins/ml/server/models/json_schema_service/json_schema_service.ts +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import Fs from 'fs'; -import Path from 'path'; -import { type SupportedPath } from '../../../common/api_schemas/json_schema_schema'; -import { jsonSchemaOverrides } from './schema_overrides'; -import { type PropertyDefinition } from './types'; - -const supportedEndpoints = [ - { - path: '/_ml/anomaly_detectors/{job_id}' as const, - method: 'put', - }, - { - path: '/_ml/datafeeds/{datafeed_id}' as const, - method: 'put', - }, -]; - -/** - * - */ -export class JsonSchemaService { - /** - * Dictionary with the schema components - * @private - */ - private _schemaComponents: Record = {}; - - private _requiredComponents: Set = new Set(); - - /** - * Extracts properties definition - * @private - */ - private extractProperties(propertyDef: PropertyDefinition): void { - for (const key in propertyDef) { - if (propertyDef.hasOwnProperty(key)) { - const propValue = propertyDef[key as keyof PropertyDefinition]!; - - if (key === '$ref') { - const comp = (propValue as string).split('/'); - const refKey = comp[comp.length - 1]; - - delete propertyDef.$ref; - - // FIXME there is an issue with the maximum call stack size exceeded - if (!refKey.startsWith('Ml_Types_')) return; - - const schemaComponent = this._schemaComponents[refKey]; - - this._requiredComponents.add(refKey); - - Object.assign(propertyDef, schemaComponent); - - this.extractProperties(propertyDef); - } - - if (Array.isArray(propValue)) { - propValue.forEach((v) => { - if (typeof v === 'object') { - this.extractProperties(v); - } - }); - } else if (typeof propValue === 'object') { - this.extractProperties(propValue as PropertyDefinition); - } - } - } - } - - private applyOverrides(path: SupportedPath, schema: PropertyDefinition): PropertyDefinition { - const overrides = jsonSchemaOverrides[path]; - return { - ...schema, - ...overrides, - properties: { - ...schema.properties, - ...overrides.properties, - }, - }; - } - - /** - * Extracts resolved schema definition for requested path and method - * @param path - * @param method - */ - public async extractSchema(path: SupportedPath, method: string, schema?: object) { - const fileContent = - schema ?? JSON.parse(Fs.readFileSync(Path.resolve(__dirname, 'openapi.json'), 'utf8')); - - const definition = fileContent.paths[path][method]; - - if (!definition) { - throw new Error('Schema definition is not defined'); - } - - const bodySchema = definition.requestBody.content['application/json'].schema; - - this._schemaComponents = fileContent.components.schemas; - - this.extractProperties(bodySchema); - - return this.applyOverrides(path, bodySchema); - } - - /** - * Generates openapi file, removing redundant content. - * Only used internally via a node command to generate the file. - */ - public async generateSchemaFile() { - const schema = JSON.parse( - Fs.readFileSync(Path.resolve(__dirname, 'openapi_source.json'), 'utf8') - ); - - await Promise.all( - supportedEndpoints.map(async (e) => { - // need to extract schema in order to keep required components - await this.extractSchema(e.path, e.method, schema); - }) - ); - - for (const pathName in schema.paths) { - if (!schema.paths.hasOwnProperty(pathName)) continue; - - const supportedEndpoint = supportedEndpoints.find((v) => v.path === pathName); - if (supportedEndpoint) { - for (const methodName in schema.paths[pathName]) { - if (methodName !== supportedEndpoint.method) { - delete schema.paths[pathName][methodName]; - } - } - } else { - delete schema.paths[pathName]; - } - } - - const components = schema.components.schemas; - for (const componentName in components) { - if (!this._requiredComponents.has(componentName)) { - delete components[componentName]; - } - } - - Fs.writeFileSync(Path.resolve(__dirname, 'openapi.json'), JSON.stringify(schema, null, 2)); - } -} diff --git a/x-pack/plugins/ml/server/models/json_schema_service/openapi.json b/x-pack/plugins/ml/server/models/json_schema_service/openapi.json deleted file mode 100644 index 202e641e9494f..0000000000000 --- a/x-pack/plugins/ml/server/models/json_schema_service/openapi.json +++ /dev/null @@ -1,1235 +0,0 @@ -{ - "openapi": "3.0.3", - "info": { - "title": "Elasticsearch specification", - "version": "8.3.0" - }, - "paths": { - "/_ml/datafeeds/{datafeed_id}": { - "put": { - "operationId": "ml.put_datafeed", - "description": "Instantiates a datafeed.\nDatafeeds retrieve data from Elasticsearch for analysis by an anomaly detection job.\nYou can associate only one datafeed with each anomaly detection job.\nThe datafeed contains a query that runs at a defined interval (`frequency`).\nIf you are concerned about delayed data, you can add a delay (`query_delay') at each interval.\nWhen Elasticsearch security features are enabled, your datafeed remembers which roles the user who created it had\nat the time of creation and runs the query using those same roles. If you provide secondary authorization headers,\nthose credentials are used instead.\nYou must use Kibana, this API, or the create anomaly detection jobs API to create a datafeed. Do not add a datafeed\ndirectly to the `.ml-config` index. Do not give users `write` privileges on the `.ml-config` index.", - "parameters": [ - { - "name": "datafeed_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "A numerical character string that uniquely identifies the datafeed.\nThis identifier can contain lowercase alphanumeric characters (a-z and 0-9), hyphens, and underscores.\nIt must start and end with alphanumeric characters." - }, - { - "name": "allow_no_indices", - "in": "query", - "schema": { - "type": "boolean" - }, - "description": "If true, wildcard indices expressions that resolve into no concrete indices are ignored. This includes the `_all`\nstring or when no indices are specified." - }, - { - "name": "expand_wildcards", - "in": "query", - "schema": { - "anyOf": [ - { - "type": "string", - "enum": [ - "all", - "open", - "closed", - "hidden", - "none" - ] - }, - { - "type": "array", - "items": { - "type": "string", - "enum": [ - "all", - "open", - "closed", - "hidden", - "none" - ] - } - } - ] - }, - "description": "Type of index that wildcard patterns can match. If the request can target data streams, this argument determines\nwhether wildcard expressions match hidden data streams. Supports comma-separated values." - }, - { - "name": "ignore_throttled", - "in": "query", - "schema": { - "type": "boolean" - }, - "description": "If true, concrete, expanded, or aliased indices are ignored when frozen." - }, - { - "name": "ignore_unavailable", - "in": "query", - "schema": { - "type": "boolean" - }, - "description": "If true, unavailable indices (missing or closed) are ignored." - } - ], - "tags": [ - "ml" - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "aggregations": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/Types_Aggregations_AggregationContainer" - }, - "description": "If set, the datafeed performs aggregation searches.\nSupport for aggregations is limited and should be used only with low cardinality data." - }, - "chunking_config": { - "$ref": "#/components/schemas/Ml_Types_ChunkingConfig", - "description": "Datafeeds might be required to search over long time periods, for several months or years.\nThis search is split into time chunks in order to ensure the load on Elasticsearch is managed.\nChunking configuration controls how the size of these time chunks are calculated;\nit is an advanced configuration option." - }, - "delayed_data_check_config": { - "$ref": "#/components/schemas/Ml_Types_DelayedDataCheckConfig", - "description": "Specifies whether the datafeed checks for missing data and the size of the window.\nThe datafeed can optionally search over indices that have already been read in an effort to determine whether\nany data has subsequently been added to the index. If missing data is found, it is a good indication that the\n`query_delay` is set too low and the data is being indexed after the datafeed has passed that moment in time.\nThis check runs only on real-time datafeeds." - }, - "frequency": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } - ], - "description": "The interval at which scheduled queries are made while the datafeed runs in real time.\nThe default value is either the bucket span for short bucket spans, or, for longer bucket spans, a sensible\nfraction of the bucket span. When `frequency` is shorter than the bucket span, interim results for the last\n(partial) bucket are written then eventually overwritten by the full bucket results. If the datafeed uses\naggregations, this value must be divisible by the interval of the date histogram aggregation." - }, - "indices": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "array", - "items": { - "type": "string" - } - } - ], - "description": "An array of index names. Wildcards are supported. If any of the indices are in remote clusters, the machine\nlearning nodes must have the `remote_cluster_client` role." - }, - "indexes": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "array", - "items": { - "type": "string" - } - } - ], - "description": "An array of index names. Wildcards are supported. If any of the indices are in remote clusters, the machine\nlearning nodes must have the `remote_cluster_client` role." - }, - "indices_options": { - "$ref": "#/components/schemas/Types_IndicesOptions", - "description": "Specifies index expansion options that are used during search" - }, - "job_id": { - "type": "string", - "description": "Identifier for the anomaly detection job." - }, - "max_empty_searches": { - "type": "number", - "description": "If a real-time datafeed has never seen any data (including during any initial training period), it automatically\nstops and closes the associated job after this many real-time searches return no documents. In other words,\nit stops after `frequency` times `max_empty_searches` of real-time operation. If not set, a datafeed with no\nend time that sees no data remains started until it is explicitly stopped. By default, it is not set." - }, - "query": { - "$ref": "#/components/schemas/Types_QueryDsl_QueryContainer", - "description": "The Elasticsearch query domain-specific language (DSL). This value corresponds to the query object in an\nElasticsearch search POST body. All the options that are supported by Elasticsearch can be used, as this\nobject is passed verbatim to Elasticsearch." - }, - "query_delay": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } - ], - "description": "The number of seconds behind real time that data is queried. For example, if data from 10:04 a.m. might\nnot be searchable in Elasticsearch until 10:06 a.m., set this property to 120 seconds. The default\nvalue is randomly selected between `60s` and `120s`. This randomness improves the query performance\nwhen there are multiple jobs running on the same node." - }, - "runtime_mappings": { - "type": "object", - "additionalProperties": { - "anyOf": [ - { - "$ref": "#/components/schemas/Types_Mapping_RuntimeField" - }, - { - "type": "array", - "items": { - "$ref": "#/components/schemas/Types_Mapping_RuntimeField" - } - } - ] - }, - "description": "Specifies runtime fields for the datafeed search." - }, - "script_fields": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/Types_ScriptField" - }, - "description": "Specifies scripts that evaluate custom expressions and returns script fields to the datafeed.\nThe detector configuration objects in a job can contain functions that use these script fields." - }, - "scroll_size": { - "type": "number", - "description": "The size parameter that is used in Elasticsearch searches when the datafeed does not use aggregations.\nThe maximum value is the value of `index.max_result_window`, which is 10,000 by default." - }, - "headers": { - "type": "object", - "additionalProperties": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "array", - "items": { - "type": "string" - } - } - ] - } - } - }, - "additionalProperties": false - } - } - } - }, - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "aggregations": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/Types_Aggregations_AggregationContainer" - } - }, - "chunking_config": { - "$ref": "#/components/schemas/Ml_Types_ChunkingConfig" - }, - "delayed_data_check_config": { - "$ref": "#/components/schemas/Ml_Types_DelayedDataCheckConfig" - }, - "datafeed_id": { - "type": "string" - }, - "frequency": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } - ] - }, - "indices": { - "type": "array", - "items": { - "type": "string" - } - }, - "job_id": { - "type": "string" - }, - "indices_options": { - "$ref": "#/components/schemas/Types_IndicesOptions" - }, - "max_empty_searches": { - "type": "number" - }, - "query": { - "$ref": "#/components/schemas/Types_QueryDsl_QueryContainer" - }, - "query_delay": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } - ] - }, - "runtime_mappings": { - "type": "object", - "additionalProperties": { - "anyOf": [ - { - "$ref": "#/components/schemas/Types_Mapping_RuntimeField" - }, - { - "type": "array", - "items": { - "$ref": "#/components/schemas/Types_Mapping_RuntimeField" - } - } - ] - } - }, - "script_fields": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/Types_ScriptField" - } - }, - "scroll_size": { - "type": "number" - } - }, - "additionalProperties": false, - "required": [ - "aggregations", - "chunking_config", - "datafeed_id", - "frequency", - "indices", - "job_id", - "max_empty_searches", - "query", - "query_delay", - "scroll_size" - ] - } - } - } - } - } - } - }, - "/_ml/anomaly_detectors/{job_id}": { - "put": { - "operationId": "ml.put_job", - "description": "Instantiates an anomaly detection job. If you include a `datafeed_config`, you must have read index privileges on the source index.", - "parameters": [ - { - "name": "job_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "The identifier for the anomaly detection job. This identifier can contain lowercase alphanumeric characters (a-z and 0-9), hyphens, and underscores. It must start and end with alphanumeric characters." - } - ], - "tags": [ - "ml" - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "allow_lazy_open": { - "type": "boolean", - "description": "Advanced configuration option. Specifies whether this job can open when there is insufficient machine learning node capacity for it to be immediately assigned to a node. By default, if a machine learning node with capacity to run the job cannot immediately be found, the open anomaly detection jobs API returns an error. However, this is also subject to the cluster-wide `xpack.ml.max_lazy_ml_nodes` setting. If this option is set to true, the open anomaly detection jobs API does not return an error and the job waits in the opening state until sufficient machine learning node capacity is available." - }, - "analysis_config": { - "$ref": "#/components/schemas/Ml_Types_AnalysisConfig", - "description": "Specifies how to analyze the data. After you create a job, you cannot change the analysis configuration; all the properties are informational." - }, - "analysis_limits": { - "$ref": "#/components/schemas/Ml_Types_AnalysisLimits", - "description": "Limits can be applied for the resources required to hold the mathematical models in memory. These limits are approximate and can be set per job. They do not control the memory used by other processes, for example the Elasticsearch Java processes." - }, - "background_persist_interval": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } - ], - "description": "Advanced configuration option. The time between each periodic persistence of the model. The default value is a randomized value between 3 to 4 hours, which avoids all jobs persisting at exactly the same time. The smallest allowed value is 1 hour. For very large models (several GB), persistence could take 10-20 minutes, so do not set the `background_persist_interval` value too low." - }, - "custom_settings": { - "description": "Advanced configuration option. Contains custom meta data about the job." - }, - "daily_model_snapshot_retention_after_days": { - "type": "number", - "description": "Advanced configuration option, which affects the automatic removal of old model snapshots for this job. It specifies a period of time (in days) after which only the first snapshot per day is retained. This period is relative to the timestamp of the most recent snapshot for this job. Valid values range from 0 to `model_snapshot_retention_days`." - }, - "data_description": { - "$ref": "#/components/schemas/Ml_Types_DataDescription", - "description": "Defines the format of the input data when you send data to the job by using the post data API. Note that when configure a datafeed, these properties are automatically set. When data is received via the post data API, it is not stored in Elasticsearch. Only the results for anomaly detection are retained." - }, - "datafeed_config": { - "$ref": "#/components/schemas/Ml_Types_DatafeedConfig", - "description": "Defines a datafeed for the anomaly detection job. If Elasticsearch security features are enabled, your datafeed remembers which roles the user who created it had at the time of creation and runs the query using those same roles. If you provide secondary authorization headers, those credentials are used instead." - }, - "description": { - "type": "string", - "description": "A description of the job." - }, - "groups": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of job groups. A job can belong to no groups or many." - }, - "model_plot_config": { - "$ref": "#/components/schemas/Ml_Types_ModelPlotConfig", - "description": "This advanced configuration option stores model information along with the results. It provides a more detailed view into anomaly detection. If you enable model plot it can add considerable overhead to the performance of the system; it is not feasible for jobs with many entities. Model plot provides a simplified and indicative view of the model and its bounds. It does not display complex features such as multivariate correlations or multimodal data. As such, anomalies may occasionally be reported which cannot be seen in the model plot. Model plot config can be configured when the job is created or updated later. It must be disabled if performance issues are experienced." - }, - "model_snapshot_retention_days": { - "type": "number", - "description": "Advanced configuration option, which affects the automatic removal of old model snapshots for this job. It specifies the maximum period of time (in days) that snapshots are retained. This period is relative to the timestamp of the most recent snapshot for this job. By default, snapshots ten days older than the newest snapshot are deleted." - }, - "renormalization_window_days": { - "type": "number", - "description": "Advanced configuration option. The period over which adjustments to the score are applied, as new data is seen. The default value is the longer of 30 days or 100 bucket spans." - }, - "results_index_name": { - "type": "string", - "description": "A text string that affects the name of the machine learning results index. By default, the job generates an index named `.ml-anomalies-shared`." - }, - "results_retention_days": { - "type": "number", - "description": "Advanced configuration option. The period of time (in days) that results are retained. Age is calculated relative to the timestamp of the latest bucket result. If this property has a non-null value, once per day at 00:30 (server time), results that are the specified number of days older than the latest bucket result are deleted from Elasticsearch. The default value is null, which means all results are retained. Annotations generated by the system also count as results for retention purposes; they are deleted after the same number of days as results. Annotations added by users are retained forever." - } - }, - "additionalProperties": false, - "required": [ - "analysis_config", - "background_persist_interval", - "data_description" - ] - } - } - } - }, - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "allow_lazy_open": { - "type": "boolean" - }, - "analysis_config": { - "$ref": "#/components/schemas/Ml_Types_AnalysisConfigRead" - }, - "analysis_limits": { - "$ref": "#/components/schemas/Ml_Types_AnalysisLimits" - }, - "background_persist_interval": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } - ] - }, - "create_time": { - "type": "string" - }, - "custom_settings": { - "description": "User provided value" - }, - "daily_model_snapshot_retention_after_days": { - "type": "number" - }, - "data_description": { - "$ref": "#/components/schemas/Ml_Types_DataDescription" - }, - "datafeed_config": { - "$ref": "#/components/schemas/Ml_Types_Datafeed" - }, - "description": { - "type": "string" - }, - "groups": { - "type": "array", - "items": { - "type": "string" - } - }, - "job_id": { - "type": "string" - }, - "job_type": { - "type": "string" - }, - "job_version": { - "type": "string" - }, - "model_plot_config": { - "$ref": "#/components/schemas/Ml_Types_ModelPlotConfig" - }, - "model_snapshot_id": { - "type": "string" - }, - "model_snapshot_retention_days": { - "type": "number" - }, - "renormalization_window_days": { - "type": "number" - }, - "results_index_name": { - "type": "string" - }, - "results_retention_days": { - "type": "number" - } - }, - "additionalProperties": false, - "required": [ - "allow_lazy_open", - "analysis_config", - "analysis_limits", - "create_time", - "daily_model_snapshot_retention_after_days", - "data_description", - "job_id", - "job_type", - "job_version", - "model_snapshot_retention_days", - "results_index_name" - ] - } - } - } - } - } - } - } - }, - "components": { - "schemas": { - "Ml_Types_AnalysisConfig": { - "type": "object", - "properties": { - "bucket_span": { - "type": "string", - "description": "The size of the interval that the analysis is aggregated into, typically between `5m` and `1h`. This value should be either a whole number of days or equate to a\nwhole number of buckets in one day. If the anomaly detection job uses a datafeed with aggregations, this value must also be divisible by the interval of the date histogram aggregation.\n* @server_default 5m" - }, - "categorization_analyzer": { - "anyOf": [ - { - "type": "string" - }, - { - "$ref": "#/components/schemas/Ml_Types_CategorizationAnalyzerDefinition" - } - ], - "description": "If `categorization_field_name` is specified, you can also define the analyzer that is used to interpret the categorization field. This property cannot be used at the same time as `categorization_filters`. The categorization analyzer specifies how the `categorization_field` is interpreted by the categorization process. The `categorization_analyzer` field can be specified either as a string or as an object. If it is a string, it must refer to a built-in analyzer or one added by another plugin." - }, - "categorization_field_name": { - "type": "string", - "description": "If this property is specified, the values of the specified field will be categorized. The resulting categories must be used in a detector by setting `by_field_name`, `over_field_name`, or `partition_field_name` to the keyword `mlcategory`." - }, - "categorization_filters": { - "type": "array", - "items": { - "type": "string" - }, - "description": "If `categorization_field_name` is specified, you can also define optional filters. This property expects an array of regular expressions. The expressions are used to filter out matching sequences from the categorization field values. You can use this functionality to fine tune the categorization by excluding sequences from consideration when categories are defined. For example, you can exclude SQL statements that appear in your log files. This property cannot be used at the same time as `categorization_analyzer`. If you only want to define simple regular expression filters that are applied prior to tokenization, setting this property is the easiest method. If you also want to customize the tokenizer or post-tokenization filtering, use the `categorization_analyzer` property instead and include the filters as pattern_replace character filters. The effect is exactly the same." - }, - "detectors": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Ml_Types_Detector" - }, - "description": "Detector configuration objects specify which data fields a job analyzes. They also specify which analytical functions are used. You can specify multiple detectors for a job. If the detectors array does not contain at least one detector, no analysis can occur and an error is returned." - }, - "influencers": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A comma separated list of influencer field names. Typically these can be the by, over, or partition fields that are used in the detector configuration. You might also want to use a field name that is not specifically named in a detector, but is available as part of the input data. When you use multiple detectors, the use of influencers is recommended as it aggregates results for each influencer entity." - }, - "latency": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } - ], - "description": "The size of the window in which to expect data that is out of time order. If you specify a non-zero value, it must be greater than or equal to one second. NOTE: Latency is applicable only when you send data by using the post data API." - }, - "model_prune_window": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } - ], - "description": "Advanced configuration option. Affects the pruning of models that have not been updated for the given time duration. The value must be set to a multiple of the `bucket_span`. If set too low, important information may be removed from the model. For jobs created in 8.1 and later, the default value is the greater of `30d` or 20 times `bucket_span`." - }, - "multivariate_by_fields": { - "type": "boolean", - "description": "This functionality is reserved for internal use. It is not supported for use in customer environments and is not subject to the support SLA of official GA features. If set to `true`, the analysis will automatically find correlations between metrics for a given by field value and report anomalies when those correlations cease to hold. For example, suppose CPU and memory usage on host A is usually highly correlated with the same metrics on host B. Perhaps this correlation occurs because they are running a load-balanced application. If you enable this property, anomalies will be reported when, for example, CPU usage on host A is high and the value of CPU usage on host B is low. That is to say, you’ll see an anomaly when the CPU of host A is unusual given the CPU of host B. To use the `multivariate_by_fields` property, you must also specify `by_field_name` in your detector." - }, - "per_partition_categorization": { - "$ref": "#/components/schemas/Ml_Types_PerPartitionCategorization", - "description": "Settings related to how categorization interacts with partition fields." - }, - "summary_count_field_name": { - "type": "string", - "description": "If this property is specified, the data that is fed to the job is expected to be pre-summarized. This property value is the name of the field that contains the count of raw data points that have been summarized. The same `summary_count_field_name` applies to all detectors in the job. NOTE: The `summary_count_field_name` property cannot be used with the `metric` function." - } - }, - "additionalProperties": false, - "required": [ - "bucket_span", - "detectors" - ] - }, - "Ml_Types_AnalysisLimits": { - "type": "object", - "properties": { - "categorization_examples_limit": { - "type": "number", - "description": "The maximum number of examples stored per category in memory and in the results data store. If you increase this value, more examples are available, however it requires that you have more storage available. If you set this value to 0, no examples are stored. NOTE: The `categorization_examples_limit` applies only to analysis that uses categorization." - }, - "model_memory_limit": { - "type": "string", - "description": "The approximate maximum amount of memory resources that are required for analytical processing. Once this limit is approached, data pruning becomes more aggressive. Upon exceeding this limit, new entities are not modeled. If the `xpack.ml.max_model_memory_limit` setting has a value greater than 0 and less than 1024mb, that value is used instead of the default. The default value is relatively small to ensure that high resource usage is a conscious decision. If you have jobs that are expected to analyze high cardinality fields, you will likely need to use a higher value. If you specify a number instead of a string, the units are assumed to be MiB. Specifying a string is recommended for clarity. If you specify a byte size unit of `b` or `kb` and the number does not equate to a discrete number of megabytes, it is rounded down to the closest MiB. The minimum valid value is 1 MiB. If you specify a value less than 1 MiB, an error occurs. If you specify a value for the `xpack.ml.max_model_memory_limit` setting, an error occurs when you try to create jobs that have `model_memory_limit` values greater than that setting value." - } - }, - "additionalProperties": false - }, - "Ml_Types_CategorizationAnalyzerDefinition": { - "type": "object", - "properties": { - "char_filter": { - "type": "array", - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "anyOf": [ - { - "$ref": "#/components/schemas/Types_Analysis_HtmlStripCharFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_MappingCharFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_PatternReplaceCharFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_IcuNormalizationCharFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_KuromojiIterationMarkCharFilter" - } - ] - } - ] - }, - "description": "One or more character filters. In addition to the built-in character filters, other plugins can provide more character filters. If this property is not specified, no character filters are applied prior to categorization. If you are customizing some other aspect of the analyzer and you need to achieve the equivalent of `categorization_filters` (which are not permitted when some other aspect of the analyzer is customized), add them here as pattern replace character filters." - }, - "filter": { - "type": "array", - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "anyOf": [ - { - "$ref": "#/components/schemas/Types_Analysis_AsciiFoldingTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_CommonGramsTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_ConditionTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_DelimitedPayloadTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_EdgeNGramTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_ElisionTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_FingerprintTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_HunspellTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_HyphenationDecompounderTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_KeepTypesTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_KeepWordsTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_KeywordMarkerTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_KStemTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_LengthTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_LimitTokenCountTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_LowercaseTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_MultiplexerTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_NGramTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_NoriPartOfSpeechTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_PatternCaptureTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_PatternReplaceTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_PorterStemTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_PredicateTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_RemoveDuplicatesTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_ReverseTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_ShingleTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_SnowballTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_StemmerOverrideTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_StemmerTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_StopTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_SynonymGraphTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_SynonymTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_TrimTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_TruncateTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_UniqueTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_UppercaseTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_WordDelimiterGraphTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_WordDelimiterTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_KuromojiStemmerTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_KuromojiReadingFormTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_KuromojiPartOfSpeechTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_IcuTokenizer" - }, - { - "$ref": "#/components/schemas/Types_Analysis_IcuCollationTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_IcuFoldingTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_IcuNormalizationTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_IcuTransformTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_PhoneticTokenFilter" - }, - { - "$ref": "#/components/schemas/Types_Analysis_DictionaryDecompounderTokenFilter" - } - ] - } - ] - }, - "description": "One or more token filters. In addition to the built-in token filters, other plugins can provide more token filters. If this property is not specified, no token filters are applied prior to categorization." - }, - "tokenizer": { - "anyOf": [ - { - "type": "string" - }, - { - "anyOf": [ - { - "$ref": "#/components/schemas/Types_Analysis_CharGroupTokenizer" - }, - { - "$ref": "#/components/schemas/Types_Analysis_EdgeNGramTokenizer" - }, - { - "$ref": "#/components/schemas/Types_Analysis_KeywordTokenizer" - }, - { - "$ref": "#/components/schemas/Types_Analysis_LetterTokenizer" - }, - { - "$ref": "#/components/schemas/Types_Analysis_LowercaseTokenizer" - }, - { - "$ref": "#/components/schemas/Types_Analysis_NGramTokenizer" - }, - { - "$ref": "#/components/schemas/Types_Analysis_NoriTokenizer" - }, - { - "$ref": "#/components/schemas/Types_Analysis_PathHierarchyTokenizer" - }, - { - "$ref": "#/components/schemas/Types_Analysis_StandardTokenizer" - }, - { - "$ref": "#/components/schemas/Types_Analysis_UaxEmailUrlTokenizer" - }, - { - "$ref": "#/components/schemas/Types_Analysis_WhitespaceTokenizer" - }, - { - "$ref": "#/components/schemas/Types_Analysis_KuromojiTokenizer" - }, - { - "$ref": "#/components/schemas/Types_Analysis_PatternTokenizer" - }, - { - "$ref": "#/components/schemas/Types_Analysis_IcuTokenizer" - } - ] - } - ], - "description": "The name or definition of the tokenizer to use after character filters are applied. This property is compulsory if `categorization_analyzer` is specified as an object. Machine learning provides a tokenizer called `ml_standard` that tokenizes in a way that has been determined to produce good categorization results on a variety of log file formats for logs in English. If you want to use that tokenizer but change the character or token filters, specify \"tokenizer\": \"ml_standard\" in your `categorization_analyzer`. Additionally, the `ml_classic` tokenizer is available, which tokenizes in the same way as the non-customizable tokenizer in old versions of the product (before 6.2). `ml_classic` was the default categorization tokenizer in versions 6.2 to 7.13, so if you need categorization identical to the default for jobs created in these versions, specify \"tokenizer\": \"ml_classic\" in your `categorization_analyzer`." - } - }, - "additionalProperties": false - }, - "Ml_Types_ChunkingConfig": { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "auto", - "manual", - "off" - ], - "description": "If the mode is `auto`, the chunk size is dynamically calculated;\nthis is the recommended value when the datafeed does not use aggregations.\nIf the mode is `manual`, chunking is applied according to the specified `time_span`;\nuse this mode when the datafeed uses aggregations. If the mode is `off`, no chunking is applied." - }, - "time_span": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } - ], - "description": "The time span that each search will be querying. This setting is applicable only when the `mode` is set to `manual`." - } - }, - "additionalProperties": false, - "required": [ - "mode" - ] - }, - "Ml_Types_DataDescription": { - "type": "object", - "properties": { - "format": { - "type": "string", - "description": "Only JSON format is supported at this time." - }, - "time_field": { - "type": "string", - "description": "The name of the field that contains the timestamp." - }, - "time_format": { - "type": "string", - "description": "The time format, which can be `epoch`, `epoch_ms`, or a custom pattern. The value `epoch` refers to UNIX or Epoch time (the number of seconds since 1 Jan 1970). The value `epoch_ms` indicates that time is measured in milliseconds since the epoch. The `epoch` and `epoch_ms` time formats accept either integer or real values. Custom patterns must conform to the Java DateTimeFormatter class. When you use date-time formatting patterns, it is recommended that you provide the full date, time and time zone. For example: `yyyy-MM-dd'T'HH:mm:ssX`. If the pattern that you specify is not sufficient to produce a complete timestamp, job creation fails." - }, - "field_delimiter": { - "type": "string" - } - }, - "additionalProperties": false - }, - "Ml_Types_DatafeedConfig": { - "type": "object", - "properties": { - "aggregations": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/Types_Aggregations_AggregationContainer" - }, - "description": "If set, the datafeed performs aggregation searches. Support for aggregations is limited and should be used only with low cardinality data." - }, - "aggs": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/Types_Aggregations_AggregationContainer" - }, - "description": "If set, the datafeed performs aggregation searches. Support for aggregations is limited and should be used only with low cardinality data." - }, - "chunking_config": { - "$ref": "#/components/schemas/Ml_Types_ChunkingConfig", - "description": "Datafeeds might be required to search over long time periods, for several months or years. This search is split into time chunks in order to ensure the load on Elasticsearch is managed. Chunking configuration controls how the size of these time chunks are calculated and is an advanced configuration option." - }, - "datafeed_id": { - "type": "string", - "description": "A numerical character string that uniquely identifies the datafeed. This identifier can contain lowercase alphanumeric characters (a-z and 0-9), hyphens, and underscores. It must start and end with alphanumeric characters. The default value is the job identifier." - }, - "delayed_data_check_config": { - "$ref": "#/components/schemas/Ml_Types_DelayedDataCheckConfig", - "description": "Specifies whether the datafeed checks for missing data and the size of the window. The datafeed can optionally search over indices that have already been read in an effort to determine whether any data has subsequently been added to the index. If missing data is found, it is a good indication that the `query_delay` option is set too low and the data is being indexed after the datafeed has passed that moment in time. This check runs only on real-time datafeeds." - }, - "frequency": { - "type": "string", - "description": "The interval at which scheduled queries are made while the datafeed runs in real time. The default value is either the bucket span for short bucket spans, or, for longer bucket spans, a sensible fraction of the bucket span. For example: `150s`. When `frequency` is shorter than the bucket span, interim results for the last (partial) bucket are written then eventually overwritten by the full bucket results. If the datafeed uses aggregations, this value must be divisible by the interval of the date histogram aggregation." - }, - "indexes": { - "type": "array", - "items": { - "type": "string" - } - }, - "indices": { - "type": "array", - "items": { - "type": "string" - }, - "description": "An array of index names. Wildcards are supported. If any indices are in remote clusters, the machine learning nodes must have the `remote_cluster_client` role." - }, - "indices_options": { - "$ref": "#/components/schemas/Types_IndicesOptions", - "description": "Specifies index expansion options that are used during search." - }, - "job_id": { - "type": "string" - }, - "max_empty_searches": { - "type": "number", - "description": "If a real-time datafeed has never seen any data (including during any initial training period) then it will automatically stop itself and close its associated job after this many real-time searches that return no documents. In other words, it will stop after `frequency` times `max_empty_searches` of real-time operation. If not set then a datafeed with no end time that sees no data will remain started until it is explicitly stopped." - }, - "query": { - "$ref": "#/components/schemas/Types_QueryDsl_QueryContainer", - "description": "The Elasticsearch query domain-specific language (DSL). This value corresponds to the query object in an Elasticsearch search POST body. All the options that are supported by Elasticsearch can be used, as this object is passed verbatim to Elasticsearch." - }, - "query_delay": { - "type": "string", - "description": "The number of seconds behind real time that data is queried. For example, if data from 10:04 a.m. might not be searchable in Elasticsearch until 10:06 a.m., set this property to 120 seconds. The default value is randomly selected between `60s` and `120s`. This randomness improves the query performance when there are multiple jobs running on the same node." - }, - "runtime_mappings": { - "type": "object", - "additionalProperties": { - "anyOf": [ - { - "$ref": "#/components/schemas/Types_Mapping_RuntimeField" - }, - { - "type": "array", - "items": { - "$ref": "#/components/schemas/Types_Mapping_RuntimeField" - } - } - ] - }, - "description": "Specifies runtime fields for the datafeed search." - }, - "script_fields": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/Types_ScriptField" - }, - "description": "Specifies scripts that evaluate custom expressions and returns script fields to the datafeed. The detector configuration objects in a job can contain functions that use these script fields." - }, - "scroll_size": { - "type": "number", - "description": "The size parameter that is used in Elasticsearch searches when the datafeed does not use aggregations. The maximum value is the value of `index.max_result_window`, which is 10,000 by default." - } - }, - "additionalProperties": false, - "required": [ - "indices", - "query" - ] - }, - "Ml_Types_DelayedDataCheckConfig": { - "type": "object", - "properties": { - "check_window": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } - ], - "description": "The window of time that is searched for late data. This window of time ends with the latest finalized bucket.\nIt defaults to null, which causes an appropriate `check_window` to be calculated when the real-time datafeed runs.\nIn particular, the default `check_window` span calculation is based on the maximum of `2h` or `8 * bucket_span`." - }, - "enabled": { - "type": "boolean", - "description": "Specifies whether the datafeed periodically checks for delayed data." - } - }, - "additionalProperties": false, - "required": [ - "enabled" - ] - }, - "Ml_Types_DetectionRule": { - "type": "object", - "properties": { - "actions": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "skip_result", - "skip_model_update" - ] - }, - "description": "The set of actions to be triggered when the rule applies. If more than one action is specified the effects of all actions are combined." - }, - "conditions": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Ml_Types_RuleCondition" - }, - "description": "An array of numeric conditions when the rule applies. A rule must either have a non-empty scope or at least one condition. Multiple conditions are combined together with a logical AND." - }, - "scope": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/Ml_Types_FilterRef" - }, - "description": "A scope of series where the rule applies. A rule must either have a non-empty scope or at least one condition. By default, the scope includes all series. Scoping is allowed for any of the fields that are also specified in `by_field_name`, `over_field_name`, or `partition_field_name`." - } - }, - "additionalProperties": false - }, - "Ml_Types_Detector": { - "type": "object", - "properties": { - "by_field_name": { - "type": "string", - "description": "The field used to split the data. In particular, this property is used for analyzing the splits with respect to their own history. It is used for finding unusual values in the context of the split." - }, - "custom_rules": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Ml_Types_DetectionRule" - }, - "description": "Custom rules enable you to customize the way detectors operate. For example, a rule may dictate conditions under which results should be skipped. Kibana refers to custom rules as job rules." - }, - "detector_description": { - "type": "string", - "description": "A description of the detector." - }, - "detector_index": { - "type": "number", - "description": "A unique identifier for the detector. This identifier is based on the order of the detectors in the `analysis_config`, starting at zero. If you specify a value for this property, it is ignored." - }, - "exclude_frequent": { - "type": "string", - "enum": [ - "all", - "none", - "by", - "over" - ], - "description": "If set, frequent entities are excluded from influencing the anomaly results. Entities can be considered frequent over time or frequent in a population. If you are working with both over and by fields, you can set `exclude_frequent` to `all` for both fields, or to `by` or `over` for those specific fields." - }, - "field_name": { - "type": "string", - "description": "The field that the detector uses in the function. If you use an event rate function such as count or rare, do not specify this field. The `field_name` cannot contain double quotes or backslashes." - }, - "function": { - "type": "string", - "description": "The analysis function that is used. For example, `count`, `rare`, `mean`, `min`, `max`, or `sum`." - }, - "over_field_name": { - "type": "string", - "description": "The field used to split the data. In particular, this property is used for analyzing the splits with respect to the history of all splits. It is used for finding unusual values in the population of all splits." - }, - "partition_field_name": { - "type": "string", - "description": "The field used to segment the analysis. When you use this property, you have completely independent baselines for each value of this field." - }, - "use_null": { - "type": "boolean", - "description": "Defines whether a new series is used as the null series when there is no value for the by or partition fields." - } - }, - "additionalProperties": false, - "required": [ - "function" - ] - }, - "Ml_Types_FilterRef": { - "type": "object", - "properties": { - "filter_id": { - "type": "string", - "description": "The identifier for the filter." - }, - "filter_type": { - "type": "string", - "enum": [ - "include", - "exclude" - ], - "description": "If set to `include`, the rule applies for values in the filter. If set to `exclude`, the rule applies for values not in the filter." - } - }, - "additionalProperties": false, - "required": [ - "filter_id" - ] - }, - "Ml_Types_ModelPlotConfig": { - "type": "object", - "properties": { - "annotations_enabled": { - "type": "boolean", - "description": "If true, enables calculation and storage of the model change annotations for each entity that is being analyzed." - }, - "enabled": { - "type": "boolean", - "description": "If true, enables calculation and storage of the model bounds for each entity that is being analyzed." - }, - "terms": { - "type": "string", - "description": "Limits data collection to this comma separated list of partition or by field values. If terms are not specified or it is an empty string, no filtering is applied. Wildcards are not supported. Only the specified terms can be viewed when using the Single Metric Viewer." - } - }, - "additionalProperties": false - }, - "Ml_Types_PerPartitionCategorization": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "description": "To enable this setting, you must also set the `partition_field_name` property to the same value in every detector that uses the keyword `mlcategory`. Otherwise, job creation fails." - }, - "stop_on_warn": { - "type": "boolean", - "description": "This setting can be set to true only if per-partition categorization is enabled. If true, both categorization and subsequent anomaly detection stops for partitions where the categorization status changes to warn. This setting makes it viable to have a job where it is expected that categorization works well for some partitions but not others; you do not pay the cost of bad categorization forever in the partitions where it works badly." - } - }, - "additionalProperties": false - }, - "Ml_Types_RuleCondition": { - "type": "object", - "properties": { - "applies_to": { - "type": "string", - "enum": [ - "actual", - "typical", - "diff_from_typical", - "time" - ], - "description": "Specifies the result property to which the condition applies. If your detector uses `lat_long`, `metric`, `rare`, or `freq_rare` functions, you can only specify conditions that apply to time." - }, - "operator": { - "type": "string", - "enum": [ - "gt", - "gte", - "lt", - "lte" - ], - "description": "Specifies the condition operator. The available options are greater than, greater than or equals, less than, and less than or equals." - }, - "value": { - "type": "number", - "description": "The value that is compared against the `applies_to` field using the operator." - } - }, - "additionalProperties": false, - "required": [ - "applies_to", - "operator", - "value" - ] - } - } - } -} \ No newline at end of file diff --git a/x-pack/plugins/ml/server/plugin.ts b/x-pack/plugins/ml/server/plugin.ts index f8260e2211888..ac3fc8caea569 100644 --- a/x-pack/plugins/ml/server/plugin.ts +++ b/x-pack/plugins/ml/server/plugin.ts @@ -27,7 +27,6 @@ import type { HomeServerPluginSetup } from '@kbn/home-plugin/server'; import type { CasesServerSetup } from '@kbn/cases-plugin/server'; import type { PluginsSetup, PluginsStart, RouteInitialization } from './types'; import type { MlCapabilities } from '../common/types/capabilities'; -import { jsonSchemaRoutes } from './routes/json_schema'; import { notificationsRoutes } from './routes/notifications'; import { type MlFeatures, @@ -277,7 +276,6 @@ export class MlServerPlugin resolveMlCapabilities, }); notificationsRoutes(routeInit); - jsonSchemaRoutes(routeInit); alertingRoutes(routeInit, sharedServicesProviders); initMlServerLog({ log: this.log }); diff --git a/x-pack/plugins/ml/server/routes/json_schema.ts b/x-pack/plugins/ml/server/routes/json_schema.ts deleted file mode 100644 index 0c0ed7e3ea044..0000000000000 --- a/x-pack/plugins/ml/server/routes/json_schema.ts +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { ML_INTERNAL_BASE_PATH } from '../../common/constants/app'; -import { getJsonSchemaQuerySchema } from '../../common/api_schemas/json_schema_schema'; -import { wrapError } from '../client/error_wrapper'; -import type { RouteInitialization } from '../types'; -import { JsonSchemaService } from '../models/json_schema_service'; - -export function jsonSchemaRoutes({ router, routeGuard }: RouteInitialization) { - /** - * @apiGroup JsonSchema - * - * @api {get} /internal/ml/json_schema Get requested JSON schema - * @apiName GetJsonSchema - * @apiDescription Retrieves the JSON schema - */ - router.versioned - .get({ - path: `${ML_INTERNAL_BASE_PATH}/json_schema`, - access: 'internal', - options: { - tags: ['access:ml:canAccessML'], - }, - }) - .addVersion( - { - version: '1', - validate: { - request: { - query: getJsonSchemaQuerySchema, - }, - }, - }, - routeGuard.fullLicenseAPIGuard(async ({ request, response }) => { - try { - const jsonSchemaService = new JsonSchemaService(); - - const result = await jsonSchemaService.extractSchema( - request.query.path, - request.query.method - ); - - return response.ok({ - body: result, - }); - } catch (e) { - return response.customError(wrapError(e)); - } - }) - ); -} diff --git a/x-pack/plugins/ml/tsconfig.json b/x-pack/plugins/ml/tsconfig.json index 8e7ddc53038ff..d20516c7d99ec 100644 --- a/x-pack/plugins/ml/tsconfig.json +++ b/x-pack/plugins/ml/tsconfig.json @@ -127,5 +127,6 @@ "@kbn/react-kibana-context-render", "@kbn/esql-utils", "@kbn/core-lifecycle-browser", + "@kbn/json-schemas", ], } diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/advanced_pivot_editor/advanced_pivot_editor.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/advanced_pivot_editor/advanced_pivot_editor.tsx index 4e2f6796a72c6..e0379ea26366a 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/advanced_pivot_editor/advanced_pivot_editor.tsx +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/advanced_pivot_editor/advanced_pivot_editor.tsx @@ -5,16 +5,14 @@ * 2.0. */ +import { EuiFormRow } from '@elastic/eui'; +import { monaco } from '@kbn/monaco'; import { isEqual } from 'lodash'; import type { FC } from 'react'; import React, { memo } from 'react'; - -import { EuiFormRow } from '@elastic/eui'; - import { i18n } from '@kbn/i18n'; - import { CodeEditor } from '@kbn/code-editor'; - +import pivotJsonSchema from '@kbn/json-schemas/src/put___transform__transform_id___pivot_schema.json'; import type { StepDefineFormHook } from '../step_define'; export const AdvancedPivotEditor: FC = memo( @@ -66,6 +64,22 @@ export const AdvancedPivotEditor: FC wrappingIndent: 'indent', }} value={advancedEditorConfig} + editorDidMount={(editor: monaco.editor.IStandaloneCodeEditor) => { + const editorModelUri: string = editor.getModel()?.uri.toString()!; + monaco.languages.json.jsonDefaults.setDiagnosticsOptions({ + validate: true, + enableSchemaRequest: false, + schemaValidation: 'error', + schemas: [ + ...(monaco.languages.json.jsonDefaults.diagnosticsOptions.schemas ?? []), + { + uri: editorModelUri, + fileMatch: [editorModelUri], + schema: pivotJsonSchema, + }, + ], + }); + }} /> ); diff --git a/x-pack/plugins/transform/tsconfig.json b/x-pack/plugins/transform/tsconfig.json index 05d3320efadb0..2faedae945810 100644 --- a/x-pack/plugins/transform/tsconfig.json +++ b/x-pack/plugins/transform/tsconfig.json @@ -78,7 +78,9 @@ "@kbn/react-kibana-context-render", "@kbn/search-types", "@kbn/core-elasticsearch-server-mocks", - "@kbn/test-jest-helpers" + "@kbn/test-jest-helpers", + "@kbn/monaco", + "@kbn/json-schemas" ], "exclude": [ "target/**/*", diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation.ts b/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation.ts index c639b16dbb894..b06cb628d21f4 100644 --- a/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation.ts +++ b/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation.ts @@ -176,10 +176,10 @@ export default function ({ getService }: FtrProviderContext) { timing_stats: '{"elapsed_time":49}', n_neighbors: '0', method: 'ensemble', - compute_feature_influence: 'true', + compute_feature_influence: true, feature_influence_threshold: '0.1', outlier_fraction: '0.05', - standardization_enabled: 'true', + standardization_enabled: true, }, }, ], diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation_saved_search.ts b/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation_saved_search.ts index 93478ebbb766e..ddfc9e540bee1 100644 --- a/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation_saved_search.ts +++ b/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation_saved_search.ts @@ -114,10 +114,10 @@ export default function ({ getService }: FtrProviderContext) { timing_stats: '{"elapsed_time":15}', n_neighbors: '0', method: 'ensemble', - compute_feature_influence: 'true', + compute_feature_influence: true, feature_influence_threshold: '0.1', outlier_fraction: '0.05', - standardization_enabled: 'true', + standardization_enabled: true, }, }, ], @@ -191,10 +191,10 @@ export default function ({ getService }: FtrProviderContext) { timing_stats: '{"elapsed_time":12}', n_neighbors: '0', method: 'ensemble', - compute_feature_influence: 'true', + compute_feature_influence: true, feature_influence_threshold: '0.1', outlier_fraction: '0.05', - standardization_enabled: 'true', + standardization_enabled: true, }, }, ], @@ -268,10 +268,10 @@ export default function ({ getService }: FtrProviderContext) { timing_stats: '{"elapsed_time":12}', n_neighbors: '0', method: 'ensemble', - compute_feature_influence: 'true', + compute_feature_influence: true, feature_influence_threshold: '0.1', outlier_fraction: '0.05', - standardization_enabled: 'true', + standardization_enabled: true, }, }, ], @@ -346,10 +346,10 @@ export default function ({ getService }: FtrProviderContext) { timing_stats: '{"elapsed_time":12}', n_neighbors: '0', method: 'ensemble', - compute_feature_influence: 'true', + compute_feature_influence: true, feature_influence_threshold: '0.1', outlier_fraction: '0.05', - standardization_enabled: 'true', + standardization_enabled: true, }, }, ], diff --git a/yarn.lock b/yarn.lock index e0070b5f0b15a..53ab787e9861e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5241,6 +5241,10 @@ version "0.0.0" uid "" +"@kbn/json-schemas@link:x-pack/packages/ml/json_schemas": + version "0.0.0" + uid "" + "@kbn/kbn-health-gateway-status-plugin@link:test/health_gateway/plugins/status": version "0.0.0" uid "" From 7129eea6d59a6bd18214082aaf5a9e0a2dcf1052 Mon Sep 17 00:00:00 2001 From: Luke G <11671118+lgestc@users.noreply.github.com> Date: Fri, 21 Jun 2024 16:46:59 +0200 Subject: [PATCH 14/33] [Security Solution] Add Discover Data View picker to Timeline (#184928) ## Summary Add new `Dataview picker` component and some initial redux setup to feed it with data. Dont expect this to work just like the original timeline sourcerer does just yet. ### Checklist Delete any items that are not applicable to this PR. - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios ### Testing Do `localStorage.setItem('EXPERIMENTAL_SOURCERER_ENABLED', true)` in the browser console, reload the page, then open new timeline. You should see the new dataview picker (colored in red temporarily), that should allow data view switching. Known issues: dataview editor is showing behind the picker (to be fixed in subsequent PR). --- .../data_view_editor/public/open_editor.tsx | 4 + .../app/home/template_wrapper/index.tsx | 11 +- .../public/common/mock/global_state.ts | 2 + .../public/common/store/reducer.test.tsx | 4 +- .../public/common/store/reducer.ts | 7 ++ .../public/common/store/store.ts | 8 ++ .../public/common/store/types.ts | 2 + .../components/dataview_picker/index.test.tsx | 94 ++++++++++++++++ .../components/dataview_picker/index.tsx | 99 +++++++++++++++++ .../components/dataview_picker/readme.md | 3 + .../sourcerer/experimental/constants.ts | 8 ++ .../dataview_picker_provider.test.tsx | 81 ++++++++++++++ .../containers/dataview_picker_provider.tsx | 46 ++++++++ .../sourcerer/experimental/is_enabled.ts | 5 +- .../public/sourcerer/experimental/readme.md | 5 +- .../sourcerer/experimental/redux/actions.ts | 16 +++ .../experimental/redux/listeners.test.ts | 101 +++++++++++++++++ .../sourcerer/experimental/redux/listeners.ts | 102 ++++++++++++++++++ .../sourcerer/experimental/redux/reducer.ts | 55 ++++++++++ .../sourcerer/experimental/redux/selectors.ts | 32 ++++++ ...se_unstable_security_solution_data_view.ts | 22 +++- .../timeline/query_bar/eql/index.tsx | 21 ++-- .../search_or_filter/search_or_filter.tsx | 10 +- 23 files changed, 715 insertions(+), 23 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/sourcerer/experimental/components/dataview_picker/index.test.tsx create mode 100644 x-pack/plugins/security_solution/public/sourcerer/experimental/components/dataview_picker/index.tsx create mode 100644 x-pack/plugins/security_solution/public/sourcerer/experimental/components/dataview_picker/readme.md create mode 100644 x-pack/plugins/security_solution/public/sourcerer/experimental/constants.ts create mode 100644 x-pack/plugins/security_solution/public/sourcerer/experimental/containers/dataview_picker_provider.test.tsx create mode 100644 x-pack/plugins/security_solution/public/sourcerer/experimental/containers/dataview_picker_provider.tsx create mode 100644 x-pack/plugins/security_solution/public/sourcerer/experimental/redux/actions.ts create mode 100644 x-pack/plugins/security_solution/public/sourcerer/experimental/redux/listeners.test.ts create mode 100644 x-pack/plugins/security_solution/public/sourcerer/experimental/redux/listeners.ts create mode 100644 x-pack/plugins/security_solution/public/sourcerer/experimental/redux/reducer.ts create mode 100644 x-pack/plugins/security_solution/public/sourcerer/experimental/redux/selectors.ts diff --git a/src/plugins/data_view_editor/public/open_editor.tsx b/src/plugins/data_view_editor/public/open_editor.tsx index 779f141ab0fdc..a2c38c82d290e 100644 --- a/src/plugins/data_view_editor/public/open_editor.tsx +++ b/src/plugins/data_view_editor/public/open_editor.tsx @@ -85,6 +85,10 @@ export const getEditorOpener = { hideCloseButton: true, size: 'l', + maskProps: { + // EUI TODO: This z-index override of EuiOverlayMask is a workaround, and ideally should be resolved with a cleaner UI/UX flow long-term + style: 'z-index: 1003', // we need this flyout to be above the timeline flyout (which has a z-index of 1002) + }, } ); diff --git a/x-pack/plugins/security_solution/public/app/home/template_wrapper/index.tsx b/x-pack/plugins/security_solution/public/app/home/template_wrapper/index.tsx index b6492ef97cae7..5a1b8423572fc 100644 --- a/x-pack/plugins/security_solution/public/app/home/template_wrapper/index.tsx +++ b/x-pack/plugins/security_solution/public/app/home/template_wrapper/index.tsx @@ -12,6 +12,7 @@ import { IS_DRAGGING_CLASS_NAME } from '@kbn/securitysolution-t-grid'; import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; import type { KibanaPageTemplateProps } from '@kbn/shared-ux-page-kibana-template'; import { ExpandableFlyoutProvider } from '@kbn/expandable-flyout'; +import { DataViewPickerProvider } from '../../../sourcerer/experimental/containers/dataview_picker_provider'; import { AttackDiscoveryTour } from '../../../attack_discovery/tour'; import { URL_PARAM_KEY } from '../../../common/hooks/use_url_state'; import { SecuritySolutionFlyout, TimelineFlyout } from '../../../flyout'; @@ -103,10 +104,12 @@ export const SecuritySolutionTemplateWrapper: React.FC - - {children} - - + + + {children} + + + {didMount && } diff --git a/x-pack/plugins/security_solution/public/common/mock/global_state.ts b/x-pack/plugins/security_solution/public/common/mock/global_state.ts index 7a77de9d23555..2a61b964774ee 100644 --- a/x-pack/plugins/security_solution/public/common/mock/global_state.ts +++ b/x-pack/plugins/security_solution/public/common/mock/global_state.ts @@ -47,6 +47,7 @@ import { initialGroupingState } from '../store/grouping/reducer'; import type { SourcererState } from '../../sourcerer/store'; import { EMPTY_RESOLVER } from '../../resolver/store/helpers'; import { getMockDiscoverInTimelineState } from './mock_discover_state'; +import { initialState as dataViewPickerInitialState } from '../../sourcerer/experimental/redux/reducer'; const mockFieldMap: DataViewSpec['fields'] = Object.fromEntries( mockIndexFields.map((field) => [field.name, field]) @@ -501,6 +502,7 @@ export const mockGlobalState: State = { */ management: mockManagementState as ManagementState, discover: getMockDiscoverInTimelineState(), + dataViewPicker: dataViewPickerInitialState, notes: { ids: ['1'], entities: { diff --git a/x-pack/plugins/security_solution/public/common/store/reducer.test.tsx b/x-pack/plugins/security_solution/public/common/store/reducer.test.tsx index b5b6cd687205a..c04474ce5db4a 100644 --- a/x-pack/plugins/security_solution/public/common/store/reducer.test.tsx +++ b/x-pack/plugins/security_solution/public/common/store/reducer.test.tsx @@ -13,6 +13,7 @@ import { useSourcererDataView } from '../../sourcerer/containers'; import { renderHook } from '@testing-library/react-hooks'; import { initialGroupingState } from './grouping/reducer'; import { initialAnalyzerState } from '../../resolver/store/helpers'; +import { initialState as dataViewPickerInitialState } from '../../sourcerer/experimental/redux/reducer'; import { initialNotesState } from '../../notes/store/notes.slice'; jest.mock('../hooks/use_selector'); @@ -71,6 +72,7 @@ describe('createInitialState', () => { { analyzer: initialAnalyzerState, }, + dataViewPickerInitialState, initialNotesState ); @@ -110,7 +112,7 @@ describe('createInitialState', () => { { analyzer: initialAnalyzerState, }, - + dataViewPickerInitialState, initialNotesState ); const { result } = renderHook(() => useSourcererDataView(), { diff --git a/x-pack/plugins/security_solution/public/common/store/reducer.ts b/x-pack/plugins/security_solution/public/common/store/reducer.ts index ea684909a8776..3226c508b7078 100644 --- a/x-pack/plugins/security_solution/public/common/store/reducer.ts +++ b/x-pack/plugins/security_solution/public/common/store/reducer.ts @@ -35,6 +35,10 @@ import type { GroupState } from './grouping/types'; import { analyzerReducer } from '../../resolver/store/reducer'; import { securitySolutionDiscoverReducer } from './discover/reducer'; import type { AnalyzerState } from '../../resolver/types'; +import { + type DataviewPickerState, + reducer as dataviewPickerReducer, +} from '../../sourcerer/experimental/redux/reducer'; import type { NotesState } from '../../notes/store/notes.slice'; import { notesReducer } from '../../notes/store/notes.slice'; @@ -69,6 +73,7 @@ export const createInitialState = ( dataTableState: DataTableState, groupsState: GroupState, analyzerState: AnalyzerState, + dataviewPickerState: DataviewPickerState, notesState: NotesState ): State => { const initialPatterns = { @@ -131,6 +136,7 @@ export const createInitialState = ( internal: undefined, savedSearch: undefined, }, + dataViewPicker: dataviewPickerState, notes: notesState, }; @@ -150,6 +156,7 @@ export const createReducer: ( sourcerer: sourcererReducer, globalUrlParam: globalUrlParamReducer, dataTable: dataTableReducer, + dataViewPicker: dataviewPickerReducer, groups: groupsReducer, analyzer: analyzerReducer, discover: securitySolutionDiscoverReducer, diff --git a/x-pack/plugins/security_solution/public/common/store/store.ts b/x-pack/plugins/security_solution/public/common/store/store.ts index 34209fae78bcf..ed20e253db538 100644 --- a/x-pack/plugins/security_solution/public/common/store/store.ts +++ b/x-pack/plugins/security_solution/public/common/store/store.ts @@ -55,6 +55,11 @@ import { dataAccessLayerFactory } from '../../resolver/data_access_layer/factory import { sourcererActions } from '../../sourcerer/store'; import { createMiddlewares } from './middlewares'; import { addNewTimeline } from '../../timelines/store/helpers'; +import { + reducer as dataViewPickerReducer, + initialState as dataViewPickerState, +} from '../../sourcerer/experimental/redux/reducer'; +import { listenerMiddleware } from '../../sourcerer/experimental/redux/listeners'; import { initialNotesState } from '../../notes/store/notes.slice'; let store: Store | null = null; @@ -171,6 +176,7 @@ export const createStoreFactory = async ( dataTableInitialState, groupsInitialState, analyzerInitialState, + dataViewPickerState, initialNotesState ); @@ -178,12 +184,14 @@ export const createStoreFactory = async ( ...subPlugins.explore.store.reducer, timeline: timelineReducer, ...subPlugins.management.store.reducer, + dataViewPicker: dataViewPickerReducer, }; return createStore(initialState, rootReducer, coreStart, storage, [ ...(subPlugins.management.store.middleware ?? []), ...(subPlugins.explore.store.middleware ?? []), ...[resolverMiddlewareFactory(dataAccessLayerFactory(coreStart)) ?? []], + listenerMiddleware.middleware, ]); }; diff --git a/x-pack/plugins/security_solution/public/common/store/types.ts b/x-pack/plugins/security_solution/public/common/store/types.ts index bf83f9146bdb2..8809ccc6ec0fa 100644 --- a/x-pack/plugins/security_solution/public/common/store/types.ts +++ b/x-pack/plugins/security_solution/public/common/store/types.ts @@ -25,6 +25,7 @@ import type { GlobalUrlParam } from './global_url_param'; import type { GroupState } from './grouping/types'; import type { SecuritySolutionDiscoverState } from './discover/model'; import type { AnalyzerState } from '../../resolver/types'; +import { type DataviewPickerState } from '../../sourcerer/experimental/redux/reducer'; import type { NotesState } from '../../notes/store/notes.slice'; export type State = HostsPluginState & @@ -38,6 +39,7 @@ export type State = HostsPluginState & sourcerer: SourcererState; globalUrlParam: GlobalUrlParam; discover: SecuritySolutionDiscoverState; + dataViewPicker: DataviewPickerState; } & DataTableState & GroupState & AnalyzerState & { notes: NotesState }; diff --git a/x-pack/plugins/security_solution/public/sourcerer/experimental/components/dataview_picker/index.test.tsx b/x-pack/plugins/security_solution/public/sourcerer/experimental/components/dataview_picker/index.test.tsx new file mode 100644 index 0000000000000..3aee25657fb0e --- /dev/null +++ b/x-pack/plugins/security_solution/public/sourcerer/experimental/components/dataview_picker/index.test.tsx @@ -0,0 +1,94 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render, screen, fireEvent } from '@testing-library/react'; +import '@testing-library/jest-dom'; +import { useKibana } from '../../../../common/lib/kibana/kibana_react'; +import { useDispatch, useSelector } from 'react-redux'; +import { selectDataView } from '../../redux/actions'; +import { DataViewPicker } from '.'; + +// Mock the required hooks and dependencies +jest.mock('../../../../common/lib/kibana/kibana_react', () => ({ + useKibana: jest.fn(), +})); + +jest.mock('react-redux', () => ({ + useDispatch: jest.fn(), + useSelector: jest.fn(), +})); + +jest.mock('../../redux/actions', () => ({ + selectDataView: jest.fn(), +})); + +jest.mock('@kbn/unified-search-plugin/public', () => ({ + DataViewPicker: jest.fn((props) => ( +
+
{props.trigger.label}
+ + + +
+ )), +})); + +describe('DataViewPicker', () => { + const mockDispatch = jest.fn(); + const mockDataViewEditor = { + openEditor: jest.fn(), + }; + const mockDataViewFieldEditor = { + openEditor: jest.fn(), + }; + const mockData = { + dataViews: { + get: jest.fn().mockResolvedValue({}), + }, + }; + + beforeEach(() => { + (useDispatch as jest.Mock).mockReturnValue(mockDispatch); + (useKibana as jest.Mock).mockReturnValue({ + services: { + dataViewEditor: mockDataViewEditor, + data: mockData, + dataViewFieldEditor: mockDataViewFieldEditor, + }, + }); + (useSelector as jest.Mock).mockReturnValue({ dataViewId: 'test-id' }); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + test('renders the DataviewPicker component', () => { + render(); + expect(screen.getByText('Dataview')).toBeInTheDocument(); + }); + + test('calls dispatch on data view change', () => { + render(); + fireEvent.click(screen.getByText('Change DataView')); + expect(mockDispatch).toHaveBeenCalledWith(selectDataView('new-id')); + }); + + test('opens data view editor when creating a new data view', () => { + render(); + fireEvent.click(screen.getByText('Create New DataView')); + expect(mockDataViewEditor.openEditor).toHaveBeenCalled(); + }); +}); diff --git a/x-pack/plugins/security_solution/public/sourcerer/experimental/components/dataview_picker/index.tsx b/x-pack/plugins/security_solution/public/sourcerer/experimental/components/dataview_picker/index.tsx new file mode 100644 index 0000000000000..47223daee7c99 --- /dev/null +++ b/x-pack/plugins/security_solution/public/sourcerer/experimental/components/dataview_picker/index.tsx @@ -0,0 +1,99 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { DataViewPicker as USDataViewPicker } from '@kbn/unified-search-plugin/public'; +import React, { useCallback, useRef, useMemo, memo } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; + +import { useKibana } from '../../../../common/lib/kibana/kibana_react'; +import { DEFAULT_SECURITY_SOLUTION_DATA_VIEW_ID } from '../../constants'; +import { selectDataView } from '../../redux/actions'; +import { sourcererAdapterSelector } from '../../redux/selectors'; + +const TRIGGER_CONFIG = { + label: 'Dataview', + color: 'danger', + title: 'Experimental data view picker', + iconType: 'beaker', +} as const; + +export const DataViewPicker = memo(() => { + const dispatch = useDispatch(); + + const { + services: { dataViewEditor, data, dataViewFieldEditor }, + } = useKibana(); + + const closeDataViewEditor = useRef<() => void | undefined>(); + const closeFieldEditor = useRef<() => void | undefined>(); + + // TODO: should this be implemented like that? If yes, we need to source dataView somehow or implement the same thing based on the existing state value. + // const canEditDataView = + // Boolean(dataViewEditor?.userPermissions.editDataView()) || !dataView.isPersisted(); + const canEditDataView = true; + + const { dataViewId } = useSelector(sourcererAdapterSelector); + + const createNewDataView = useCallback(() => { + closeDataViewEditor.current = dataViewEditor.openEditor({ + // eslint-disable-next-line no-console + onSave: () => console.log('new data view saved'), + allowAdHocDataView: true, + }); + }, [dataViewEditor]); + + const onFieldEdited = useCallback(() => {}, []); + + const editField = useMemo(() => { + if (!canEditDataView) { + return; + } + return async (fieldName?: string, _uiAction: 'edit' | 'add' = 'edit') => { + if (!dataViewId) { + return; + } + + const dataViewInstance = await data.dataViews.get(dataViewId); + closeFieldEditor.current = dataViewFieldEditor.openEditor({ + ctx: { + dataView: dataViewInstance, + }, + fieldName, + onSave: async () => { + onFieldEdited(); + }, + }); + }; + }, [canEditDataView, dataViewId, data.dataViews, dataViewFieldEditor, onFieldEdited]); + + const addField = useMemo( + () => (canEditDataView && editField ? () => editField(undefined, 'add') : undefined), + [editField, canEditDataView] + ); + + const handleChangeDataView = useCallback( + (id: string) => { + dispatch(selectDataView(id)); + }, + [dispatch] + ); + + const handleEditDataView = useCallback(() => {}, []); + + return ( + + ); +}); + +DataViewPicker.displayName = 'DataviewPicker'; diff --git a/x-pack/plugins/security_solution/public/sourcerer/experimental/components/dataview_picker/readme.md b/x-pack/plugins/security_solution/public/sourcerer/experimental/components/dataview_picker/readme.md new file mode 100644 index 0000000000000..1ce2de83ccc05 --- /dev/null +++ b/x-pack/plugins/security_solution/public/sourcerer/experimental/components/dataview_picker/readme.md @@ -0,0 +1,3 @@ +# Dataview Picker + +A replacement for the Sourcerer component, based on the Discover implementation. diff --git a/x-pack/plugins/security_solution/public/sourcerer/experimental/constants.ts b/x-pack/plugins/security_solution/public/sourcerer/experimental/constants.ts new file mode 100644 index 0000000000000..357e38c11c906 --- /dev/null +++ b/x-pack/plugins/security_solution/public/sourcerer/experimental/constants.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const DEFAULT_SECURITY_SOLUTION_DATA_VIEW_ID = 'security-solution-default'; diff --git a/x-pack/plugins/security_solution/public/sourcerer/experimental/containers/dataview_picker_provider.test.tsx b/x-pack/plugins/security_solution/public/sourcerer/experimental/containers/dataview_picker_provider.test.tsx new file mode 100644 index 0000000000000..183d03bc02007 --- /dev/null +++ b/x-pack/plugins/security_solution/public/sourcerer/experimental/containers/dataview_picker_provider.test.tsx @@ -0,0 +1,81 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render } from '@testing-library/react'; +import '@testing-library/jest-dom'; +import { useDispatch } from 'react-redux'; +import { useKibana } from '../../../common/lib/kibana'; +import { DataViewPickerProvider } from './dataview_picker_provider'; +import { + startAppListening, + listenerMiddleware, + createChangeDataviewListener, + createInitDataviewListener, +} from '../redux/listeners'; +import { init } from '../redux/actions'; +import { DEFAULT_SECURITY_SOLUTION_DATA_VIEW_ID } from '../constants'; +import type { DataViewsServicePublic } from '@kbn/data-views-plugin/public'; + +jest.mock('../../../common/lib/kibana', () => ({ + useKibana: jest.fn(), +})); + +jest.mock('react-redux', () => ({ + useDispatch: jest.fn(), +})); + +jest.mock('../redux/listeners', () => ({ + listenerMiddleware: { + clearListeners: jest.fn(), + }, + startAppListening: jest.fn(), + createChangeDataviewListener: jest.fn(), + createInitDataviewListener: jest.fn(), +})); + +describe('DataviewPickerProvider', () => { + const mockDispatch = jest.fn(); + const mockServices = { + dataViews: {} as unknown as DataViewsServicePublic, + }; + + beforeEach(() => { + (useDispatch as jest.Mock).mockReturnValue(mockDispatch); + (useKibana as jest.Mock).mockReturnValue({ services: mockServices }); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + test('starts listeners and dispatches init action on mount', () => { + render( + +
{`Test Child`}
+
+ ); + + expect(startAppListening).toHaveBeenCalledWith(createInitDataviewListener({})); + expect(startAppListening).toHaveBeenCalledWith( + createChangeDataviewListener({ dataViewsService: mockServices.dataViews }) + ); + expect(mockDispatch).toHaveBeenCalledWith(init(DEFAULT_SECURITY_SOLUTION_DATA_VIEW_ID)); + }); + + test('clears listeners on unmount', () => { + const { unmount } = render( + +
{`Test Child`}
+
+ ); + + unmount(); + + expect(listenerMiddleware.clearListeners).toHaveBeenCalled(); + }); +}); diff --git a/x-pack/plugins/security_solution/public/sourcerer/experimental/containers/dataview_picker_provider.tsx b/x-pack/plugins/security_solution/public/sourcerer/experimental/containers/dataview_picker_provider.tsx new file mode 100644 index 0000000000000..dd6d01f21e73a --- /dev/null +++ b/x-pack/plugins/security_solution/public/sourcerer/experimental/containers/dataview_picker_provider.tsx @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { memo, useEffect, type FC, type PropsWithChildren } from 'react'; +import { useDispatch } from 'react-redux'; + +import { useKibana } from '../../../common/lib/kibana'; +import { + createChangeDataviewListener, + createInitDataviewListener, + listenerMiddleware, + startAppListening, +} from '../redux/listeners'; +import { init } from '../redux/actions'; +import { DEFAULT_SECURITY_SOLUTION_DATA_VIEW_ID } from '../constants'; + +// NOTE: this can be spawned multiple times, eq. when you need something like a separate data view picker for a subsection of the app - +// for example, in the timeline. +export const DataViewPickerProvider: FC> = memo(({ children }) => { + const { services } = useKibana(); + + const dispatch = useDispatch(); + + useEffect(() => { + // NOTE: the goal here is to move all side effects and business logic to Redux, + // so that we only do presentation layer things on React side - for performance reasons and + // to make the state easier to predict. + // see: https://redux-toolkit.js.org/api/createListenerMiddleware#overview + startAppListening(createInitDataviewListener({})); + startAppListening(createChangeDataviewListener({ dataViewsService: services.dataViews })); + + // NOTE: this can be dispatched at any point, with any data view id + dispatch(init(DEFAULT_SECURITY_SOLUTION_DATA_VIEW_ID)); + + // NOTE: Clear existing listeners when services change for some reason (they should not) + return () => listenerMiddleware.clearListeners(); + }, [services, dispatch]); + + return <>{children}; +}); + +DataViewPickerProvider.displayName = 'DataviewPickerProvider'; diff --git a/x-pack/plugins/security_solution/public/sourcerer/experimental/is_enabled.ts b/x-pack/plugins/security_solution/public/sourcerer/experimental/is_enabled.ts index efdc2c7468847..caf4b92c1d5d2 100644 --- a/x-pack/plugins/security_solution/public/sourcerer/experimental/is_enabled.ts +++ b/x-pack/plugins/security_solution/public/sourcerer/experimental/is_enabled.ts @@ -11,6 +11,5 @@ * - display the experimental component instead of the stable one * - use experimental data views hook instead of the stable one */ -export const IS_EXPERIMENTAL_SOURCERER_ENABLED = !!window.localStorage.getItem( - 'EXPERIMENTAL_SOURCERER_ENABLED' -); +export const isExperimentalSourcererEnabled = () => + !!window.localStorage.getItem('EXPERIMENTAL_SOURCERER_ENABLED'); diff --git a/x-pack/plugins/security_solution/public/sourcerer/experimental/readme.md b/x-pack/plugins/security_solution/public/sourcerer/experimental/readme.md index 077bef147cbed..26894153f2e90 100644 --- a/x-pack/plugins/security_solution/public/sourcerer/experimental/readme.md +++ b/x-pack/plugins/security_solution/public/sourcerer/experimental/readme.md @@ -15,4 +15,7 @@ using the same Kibana instance deployed locally (for now). ## Architecture -TODO +- Redux based +- Limited use of useEffect or stateful hooks - in favor of thunks and redux middleware (supporting request cancellation and caching) +- Allows multiple instances of the picker - just wrap the subsection of the app with its own DataviewPickerProvider +- Data exposed back to Security Solution is memoized with `reselect` for performance diff --git a/x-pack/plugins/security_solution/public/sourcerer/experimental/redux/actions.ts b/x-pack/plugins/security_solution/public/sourcerer/experimental/redux/actions.ts new file mode 100644 index 0000000000000..f1b490f1cf734 --- /dev/null +++ b/x-pack/plugins/security_solution/public/sourcerer/experimental/redux/actions.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { type DataViewSpec } from '@kbn/data-views-plugin/common'; +import { createAction } from '@reduxjs/toolkit'; + +type DataViewId = string; + +export const init = createAction('init'); +export const selectDataView = createAction('changeDataView'); +export const setDataViewData = createAction('setDataView'); +export const setPatternList = createAction('setPatternList'); diff --git a/x-pack/plugins/security_solution/public/sourcerer/experimental/redux/listeners.test.ts b/x-pack/plugins/security_solution/public/sourcerer/experimental/redux/listeners.test.ts new file mode 100644 index 0000000000000..099fbb9dbcf3c --- /dev/null +++ b/x-pack/plugins/security_solution/public/sourcerer/experimental/redux/listeners.test.ts @@ -0,0 +1,101 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + init, + selectDataView, + setDataViewData as setDataViewSpec, + setPatternList, +} from './actions'; +import { createInitDataviewListener, createChangeDataviewListener } from './listeners'; +import { isExperimentalSourcererEnabled } from '../is_enabled'; +import type { DataViewsServicePublic } from '@kbn/data-views-plugin/public'; +import { type ListenerEffectAPI } from '@reduxjs/toolkit'; +import type { AppDispatch } from './listeners'; +import { type State } from '../../../common/store/types'; + +jest.mock('../is_enabled', () => ({ + isExperimentalSourcererEnabled: jest.fn().mockReturnValue(true), +})); + +type ListenerApi = ListenerEffectAPI; + +describe('Listeners', () => { + describe('createInitDataviewListener', () => { + let listenerOptions: ReturnType; + let listenerApi: ListenerApi; + + beforeEach(() => { + listenerOptions = createInitDataviewListener({}); + listenerApi = { + dispatch: jest.fn(), + getState: jest.fn(() => ({ dataViewPicker: { state: 'pristine' } })), + } as unknown as ListenerApi; + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + test('does not dispatch if experimental feature is disabled', async () => { + jest.mocked(isExperimentalSourcererEnabled).mockReturnValue(false); + + await listenerOptions.effect(init('test-view'), listenerApi); + expect(listenerApi.dispatch).not.toHaveBeenCalled(); + }); + + test('does not dispatch if state is not pristine', async () => { + jest.mocked(isExperimentalSourcererEnabled).mockReturnValue(true); + listenerApi.getState = jest.fn(() => ({ + dataViewPicker: { state: 'not_pristine' }, + })) as unknown as ListenerApi['getState']; + + await listenerOptions.effect(init('test-view'), listenerApi); + expect(listenerApi.dispatch).not.toHaveBeenCalled(); + }); + + test('dispatches selectDataView action if state is pristine and experimental feature is enabled', async () => { + jest.mocked(isExperimentalSourcererEnabled).mockReturnValue(true); + await listenerOptions.effect(init('test-id'), listenerApi); + expect(listenerApi.dispatch).toHaveBeenCalledWith(selectDataView('test-id')); + }); + }); + + describe('createChangeDataviewListener', () => { + let listenerOptions: ReturnType; + let listenerApi: ListenerApi; + let dataViewsServiceMock: DataViewsServicePublic; + + beforeEach(() => { + dataViewsServiceMock = { + get: jest.fn(async () => ({ + toSpec: jest.fn(() => ({ id: 'test_spec' })), + getIndexPattern: jest.fn(() => 'index_pattern'), + })), + getExistingIndices: jest.fn(async () => ['pattern1', 'pattern2']), + } as unknown as DataViewsServicePublic; + + listenerOptions = createChangeDataviewListener({ dataViewsService: dataViewsServiceMock }); + listenerApi = { + dispatch: jest.fn(), + } as unknown as ListenerApi; + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + test('fetches data view and dispatches setDataViewSpec and setPatternList actions', async () => { + await listenerOptions.effect(selectDataView('test_id'), listenerApi); + + expect(dataViewsServiceMock.get).toHaveBeenCalledWith('test_id', true, false); + expect(listenerApi.dispatch).toHaveBeenCalledWith(setDataViewSpec({ id: 'test_spec' })); + expect(dataViewsServiceMock.getExistingIndices).toHaveBeenCalledWith(['index_pattern']); + expect(listenerApi.dispatch).toHaveBeenCalledWith(setPatternList(['pattern1', 'pattern2'])); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/sourcerer/experimental/redux/listeners.ts b/x-pack/plugins/security_solution/public/sourcerer/experimental/redux/listeners.ts new file mode 100644 index 0000000000000..359794eca331a --- /dev/null +++ b/x-pack/plugins/security_solution/public/sourcerer/experimental/redux/listeners.ts @@ -0,0 +1,102 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { DataViewsServicePublic } from '@kbn/data-views-plugin/public'; +import { + createListenerMiddleware, + type ActionCreator, + type ListenerEffectAPI, +} from '@reduxjs/toolkit'; +import type { ListenerPredicate } from '@reduxjs/toolkit/dist/listenerMiddleware/types'; +import type { Action, Store } from 'redux'; + +import { ensurePatternFormat } from '../../../../common/utils/sourcerer'; +import { isExperimentalSourcererEnabled } from '../is_enabled'; +import { + init, + selectDataView, + setDataViewData as setDataViewSpec, + setPatternList, +} from './actions'; +import { type State } from '../../../common/store/types'; + +export type AppDispatch = Store['dispatch']; + +export type DatapickerActions = ReturnType; + +// NOTE: types below exist because we are using redux-toolkit version lower than 2.x +// in v2, there are TS helpers that make it easy to setup overrides that are necessary here. +export interface ListenerOptions { + // Match with a function accepting action and state. This is broken in v1.x, + // the predicate is always required + predicate?: ListenerPredicate; + // Match action by type + type?: string; + // Exact action type match based on the RTK action creator + actionCreator?: ActionCreator; + // An effect to call + effect: (action: DatapickerActions, api: ListenerEffectAPI) => Promise; +} + +/** + * This is the proposed way of handling side effects within sourcerer code. We will no longer rely on useEffect for doing things like + * enriching the store with data fetched asynchronously in response to user doing something. + * Thunks are also considered for simpler flows but this has the advantage of cancellation support through `listnerApi` below. + */ + +export type ListenerCreator = ( + // Only specify a subset of required services here, so that it is easier to mock and therefore test the listener + dependencies: TDependencies +) => ListenerOptions; + +// NOTE: this should only be executed once in the application lifecycle, to LAZILY setup the component data +export const createInitDataviewListener: ListenerCreator<{}> = (): ListenerOptions => { + return { + actionCreator: init, + effect: async (action, listenerApi) => { + // WARN: Skip the init call if the experimental implementation is disabled + if (!isExperimentalSourcererEnabled()) { + return; + } + // NOTE: We should only run this once, when particular sourcerer instance is in pristine state (not touched by the user) + if (listenerApi.getState().dataViewPicker.state !== 'pristine') { + return; + } + + // NOTE: dispatch the regular change listener + listenerApi.dispatch(selectDataView(action.payload)); + }, + }; +}; + +// NOTE: this listener is executed whenever user decides to select dataview from the picker +export const createChangeDataviewListener: ListenerCreator<{ + dataViewsService: DataViewsServicePublic; +}> = ({ dataViewsService }): ListenerOptions => { + return { + actionCreator: selectDataView, + effect: async (action, listenerApi) => { + const dataViewId = action.payload; + const refreshFields = false; + + const dataView = await dataViewsService.get(dataViewId, true, refreshFields); + const dataViewData = dataView.toSpec(); + listenerApi.dispatch(setDataViewSpec(dataViewData)); + + const defaultPatternsList = ensurePatternFormat(dataView.getIndexPattern().split(',')); + const patternList = await dataViewsService.getExistingIndices(defaultPatternsList); + listenerApi.dispatch(setPatternList(patternList)); + }, + }; +}; + +export const listenerMiddleware = createListenerMiddleware(); + +// NOTE: register side effect listeners +export const startAppListening = listenerMiddleware.startListening as unknown as ( + options: ListenerOptions +) => void; diff --git a/x-pack/plugins/security_solution/public/sourcerer/experimental/redux/reducer.ts b/x-pack/plugins/security_solution/public/sourcerer/experimental/redux/reducer.ts new file mode 100644 index 0000000000000..d8d626a1141ce --- /dev/null +++ b/x-pack/plugins/security_solution/public/sourcerer/experimental/redux/reducer.ts @@ -0,0 +1,55 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { DataViewSpec } from '@kbn/data-views-plugin/common'; +import { createReducer } from '@reduxjs/toolkit'; + +import { DEFAULT_SECURITY_SOLUTION_DATA_VIEW_ID } from '../constants'; + +import { selectDataView, setDataViewData, setPatternList } from './actions'; + +export interface SelectedDataViewState { + dataView: DataViewSpec; + patternList: string[]; + /** + * There are several states the picker can be in internally: + * - pristine - not initialized yet + * - loading + * - error - some kind of a problem during data init + * - ready - ready to provide index information to the client + */ + state: 'pristine' | 'loading' | 'error' | 'ready'; +} + +export const initialDataView: DataViewSpec = { + id: DEFAULT_SECURITY_SOLUTION_DATA_VIEW_ID, + title: '', + fields: {}, +}; + +export const initialState: SelectedDataViewState = { + dataView: initialDataView, + state: 'pristine', + patternList: [], +}; + +export const reducer = createReducer(initialState, (builder) => { + builder.addCase(selectDataView, (state) => { + state.state = 'loading'; + }); + + builder.addCase(setDataViewData, (state, action) => { + state.dataView = action.payload; + }); + + builder.addCase(setPatternList, (state, action) => { + state.patternList = action.payload; + state.state = 'ready'; + }); +}); + +export type DataviewPickerState = ReturnType; diff --git a/x-pack/plugins/security_solution/public/sourcerer/experimental/redux/selectors.ts b/x-pack/plugins/security_solution/public/sourcerer/experimental/redux/selectors.ts new file mode 100644 index 0000000000000..cdfc3a9882b0d --- /dev/null +++ b/x-pack/plugins/security_solution/public/sourcerer/experimental/redux/selectors.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { createSelector } from '@reduxjs/toolkit'; +import type { SelectedDataView } from '../../store/model'; +import { type State } from '../../../common/store/types'; + +/** + * Compatibility layer / adapter for legacy selector consumers. + * It is used in useSecuritySolutionDataView hook as alternative data source (behind a flag) + */ +export const sourcererAdapterSelector = createSelector( + [(state: State) => state.dataViewPicker], + (dataViewPicker): SelectedDataView => { + return { + loading: dataViewPicker.state === 'loading', + dataViewId: dataViewPicker.dataView.id || '', + patternList: dataViewPicker.patternList, + indicesExist: true, + browserFields: {}, + activePatterns: dataViewPicker.patternList, + runtimeMappings: {}, + selectedPatterns: dataViewPicker.patternList, + indexPattern: { fields: [], title: dataViewPicker.dataView.title || '' }, + sourcererDataView: {}, + }; + } +); diff --git a/x-pack/plugins/security_solution/public/sourcerer/experimental/use_unstable_security_solution_data_view.ts b/x-pack/plugins/security_solution/public/sourcerer/experimental/use_unstable_security_solution_data_view.ts index a841834a8b1fe..4bca209b8e50a 100644 --- a/x-pack/plugins/security_solution/public/sourcerer/experimental/use_unstable_security_solution_data_view.ts +++ b/x-pack/plugins/security_solution/public/sourcerer/experimental/use_unstable_security_solution_data_view.ts @@ -5,12 +5,16 @@ * 2.0. */ +import { useMemo } from 'react'; +import { useSelector } from 'react-redux'; + import { type SourcererScopeName, type SelectedDataView } from '../store/model'; -import { IS_EXPERIMENTAL_SOURCERER_ENABLED } from './is_enabled'; +import { isExperimentalSourcererEnabled } from './is_enabled'; +import { sourcererAdapterSelector } from './redux/selectors'; /** - * FOR INTERNAL USE ONLY + * WARN: FOR INTERNAL USE ONLY * This hook provides data for experimental Sourcerer replacement in Security Solution. * Do not use in client code as the API will change frequently. * It will be extended in the future, covering more and more functionality from the current sourcerer. @@ -19,6 +23,16 @@ export const useUnstableSecuritySolutionDataView = ( _scopeId: SourcererScopeName, fallbackDataView: SelectedDataView ): SelectedDataView => { - // TODO: extend the fallback state with values computed using new logic - return IS_EXPERIMENTAL_SOURCERER_ENABLED ? fallbackDataView : fallbackDataView; + const dataView: SelectedDataView = useSelector(sourcererAdapterSelector); + + const dataViewWithFallbacks: SelectedDataView = useMemo(() => { + return { + ...dataView, + // NOTE: temporary values sourced from the fallback. Will be replaced in the near future. + browserFields: fallbackDataView.browserFields, + sourcererDataView: fallbackDataView.sourcererDataView, + }; + }, [dataView, fallbackDataView.browserFields, fallbackDataView.sourcererDataView]); + + return isExperimentalSourcererEnabled() ? dataViewWithFallbacks : fallbackDataView; }; diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/query_bar/eql/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/query_bar/eql/index.tsx index 469c5ae1be458..59373b5d790f5 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/query_bar/eql/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/query_bar/eql/index.tsx @@ -83,14 +83,17 @@ export const EqlQueryBarTimeline = memo(({ timelineId }: { timelineId: string }) selectedPatterns, } = useSourcererDataView(SourcererScopeName.timeline); - const initialState = { - ...defaultValues, - index: selectedPatterns.sort(), - eqlQueryBar: { - ...defaultValues.eqlQueryBar, - query: { query: optionsSelected.query ?? '', language: 'eql' }, - }, - }; + const initialState = useMemo( + () => ({ + ...defaultValues, + index: [...selectedPatterns].sort(), + eqlQueryBar: { + ...defaultValues.eqlQueryBar, + query: { query: optionsSelected.query ?? '', language: 'eql' }, + }, + }), + [optionsSelected.query, selectedPatterns] + ); const { form } = useForm({ defaultValue: initialState, @@ -144,7 +147,7 @@ export const EqlQueryBarTimeline = memo(({ timelineId }: { timelineId: string }) useEffect(() => { const { index: indexField } = getFields(); - const newIndexValue = selectedPatterns.sort(); + const newIndexValue = [...selectedPatterns].sort(); const indexFieldValue = (indexField.value as string[]).sort(); if (!isEqual(indexFieldValue, newIndexValue)) { indexField.setValue(newIndexValue); diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/search_or_filter/search_or_filter.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/search_or_filter/search_or_filter.tsx index ed948b450c4e1..7fccbd9103ae9 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/search_or_filter/search_or_filter.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/search_or_filter/search_or_filter.tsx @@ -11,6 +11,8 @@ import styled from 'styled-components'; import type { Filter } from '@kbn/es-query'; import type { FilterManager } from '@kbn/data-plugin/public'; +import { DataViewPicker } from '../../../../sourcerer/experimental/components/dataview_picker'; +import { isExperimentalSourcererEnabled } from '../../../../sourcerer/experimental/is_enabled'; import { TimelineType } from '../../../../../common/api/timeline'; import { InputsModelId } from '../../../../common/store/inputs/constants'; import type { KqlMode } from '../../../store/model'; @@ -103,6 +105,12 @@ export const SearchOrFilter = React.memo( [isDataProviderEmpty, isDataProviderVisible] ); + const dataviewPicker = isExperimentalSourcererEnabled() ? ( + + ) : ( + + ); + return ( <> @@ -113,7 +121,7 @@ export const SearchOrFilter = React.memo( responsive={false} > - + {dataviewPicker} Date: Fri, 21 Jun 2024 16:05:44 +0100 Subject: [PATCH 15/33] [Rollups] Add attributes for tracking doc links clicks (#186612) Closes https://github.com/elastic/kibana/issues/186610 ## Summary This PR adds `data-test-subj` attributes to the doc links in the Rollup deprecation warning callout and the deprecation empty callout so that clicks on these links can be tracked on Fullstory. The links on the deprecation callout have test subjects with a prefix depending on whether they are on the list view page or the create form page so that we can differentiate the clicks from the different pages. --- .../deprecation_callout/deprecation_callout.tsx | 15 +++++++++++++-- .../crud_app/sections/job_create/job_create.js | 2 +- .../sections/job_list/deprecated_prompt.tsx | 1 + .../public/crud_app/sections/job_list/job_list.js | 2 +- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/rollup/public/crud_app/sections/components/deprecation_callout/deprecation_callout.tsx b/x-pack/plugins/rollup/public/crud_app/sections/components/deprecation_callout/deprecation_callout.tsx index 4b36b9a086b69..877fd87cdf10c 100644 --- a/x-pack/plugins/rollup/public/crud_app/sections/components/deprecation_callout/deprecation_callout.tsx +++ b/x-pack/plugins/rollup/public/crud_app/sections/components/deprecation_callout/deprecation_callout.tsx @@ -11,10 +11,16 @@ import { i18n } from '@kbn/i18n'; import React from 'react'; import { documentationLinks } from '../../../services/documentation_links'; +interface DeprecationCalloutProps { + /** The prefix to be applied at the test subjects for the doc links. + * Used for clicks tracking in Fullstory. */ + linksTestSubjPrefix: string; +} + /* A component for displaying a deprecation warning. */ -export const DeprecationCallout = () => { +export const DeprecationCallout = ({ linksTestSubjPrefix }: DeprecationCalloutProps) => { return ( { {i18n.translate('xpack.rollupJobs.deprecationCallout.migrationGuideLink', { defaultMessage: 'migration guide', @@ -37,7 +44,11 @@ export const DeprecationCallout = () => { ), downsamplingLink: ( - + {i18n.translate('xpack.rollupJobs.deprecationCallout.downsamplingLink', { defaultMessage: 'downsampling', })} diff --git a/x-pack/plugins/rollup/public/crud_app/sections/job_create/job_create.js b/x-pack/plugins/rollup/public/crud_app/sections/job_create/job_create.js index 4983fbb10ae8f..28ebe01d7de0c 100644 --- a/x-pack/plugins/rollup/public/crud_app/sections/job_create/job_create.js +++ b/x-pack/plugins/rollup/public/crud_app/sections/job_create/job_create.js @@ -557,7 +557,7 @@ export class JobCreateUi extends Component { - + diff --git a/x-pack/plugins/rollup/public/crud_app/sections/job_list/deprecated_prompt.tsx b/x-pack/plugins/rollup/public/crud_app/sections/job_list/deprecated_prompt.tsx index ecdae95e90813..138495d834a89 100644 --- a/x-pack/plugins/rollup/public/crud_app/sections/job_list/deprecated_prompt.tsx +++ b/x-pack/plugins/rollup/public/crud_app/sections/job_list/deprecated_prompt.tsx @@ -41,6 +41,7 @@ export const DeprecatedPrompt = () => { target="_blank" fill iconType="help" + data-test-subj="rollupDeprecatedPromptDocsLink" > - + From 44bdb82353d1be3f42454d3f72328483ba55cb6a Mon Sep 17 00:00:00 2001 From: Elena Stoeva <59341489+ElenaStoeva@users.noreply.github.com> Date: Fri, 21 Jun 2024 16:07:05 +0100 Subject: [PATCH 16/33] [Advanced Settings] Change role in security functional tests (#186602) Closes https://github.com/elastic/kibana/issues/184813 ## Summary This PR adds a role-based login in the advanced settings functional tests for security serverless project instead of using normal login where we use operator privileges. It also moves the test file to a more appropriate folder. --- .../test_suites/security/{ => ftr}/advanced_settings.ts | 6 +++--- .../functional/test_suites/security/index.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) rename x-pack/test_serverless/functional/test_suites/security/{ => ftr}/advanced_settings.ts (88%) diff --git a/x-pack/test_serverless/functional/test_suites/security/advanced_settings.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/advanced_settings.ts similarity index 88% rename from x-pack/test_serverless/functional/test_suites/security/advanced_settings.ts rename to x-pack/test_serverless/functional/test_suites/security/ftr/advanced_settings.ts index 63e3a8a9a6672..c6448aac27ec8 100644 --- a/x-pack/test_serverless/functional/test_suites/security/advanced_settings.ts +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/advanced_settings.ts @@ -7,8 +7,8 @@ import expect from '@kbn/expect'; import { SECURITY_PROJECT_SETTINGS } from '@kbn/serverless-security-settings'; -import { FtrProviderContext } from '../../ftr_provider_context'; -import { isEditorFieldSetting } from '../common/management/advanced_settings'; +import { FtrProviderContext } from '../../../ftr_provider_context'; +import { isEditorFieldSetting } from '../../common/management/advanced_settings'; export default ({ getPageObjects, getService }: FtrProviderContext) => { const testSubjects = getService('testSubjects'); @@ -18,7 +18,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { describe('Security advanced settings', function () { before(async () => { - await pageObjects.svlCommonPage.login(); + await pageObjects.svlCommonPage.loginWithRole('admin'); await pageObjects.common.navigateToApp('settings'); }); diff --git a/x-pack/test_serverless/functional/test_suites/security/index.ts b/x-pack/test_serverless/functional/test_suites/security/index.ts index fabe48960b111..1639957c901d6 100644 --- a/x-pack/test_serverless/functional/test_suites/security/index.ts +++ b/x-pack/test_serverless/functional/test_suites/security/index.ts @@ -12,7 +12,7 @@ export default function ({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./ftr/landing_page')); loadTestFile(require.resolve('./ftr/navigation')); loadTestFile(require.resolve('./ftr/cases')); - loadTestFile(require.resolve('./advanced_settings')); + loadTestFile(require.resolve('./ftr/advanced_settings')); loadTestFile(require.resolve('./ml')); }); } From b632f0011da442ac5abe9ed909136a0190266e37 Mon Sep 17 00:00:00 2001 From: Maxim Palenov Date: Fri, 21 Jun 2024 17:39:35 +0200 Subject: [PATCH 17/33] [Security Solution] Add missing Alert index API OpenAPI specs (#186401) **Addresses:** https://github.com/elastic/kibana/issues/183661 ## Summary This PR adds missing OpenAPI specs for the Alert Index API endpoints available in ESS - `POST /api/detection_engine/index` - `GET /api/detection_engine/index` - `DELETE /api/detection_engine/index` --- .../templates/zod_schema_item.handlebars | 1 - .../create_index/create_index.gen.ts | 22 ++++++++ .../create_index/create_index.schema.yaml | 47 +++++++++++++++++ .../create_index/create_index_route.ts | 10 ---- .../delete_index/delete_index.gen.ts | 22 ++++++++ .../delete_index/delete_index.schema.yaml | 48 ++++++++++++++++++ .../delete_index/delete_index_route.ts | 10 ---- .../index_management/index.ts | 6 +-- .../read_index/read_index.gen.ts | 23 +++++++++ .../read_index/read_index.schema.yaml | 50 +++++++++++++++++++ .../read_index/read_index_route.ts | 11 ---- .../routes/index/create_index_route.ts | 4 +- .../routes/index/delete_index_route.ts | 4 +- .../routes/index/read_index_route.ts | 4 +- .../services/security_solution_api.gen.ts | 21 ++++++++ 15 files changed, 242 insertions(+), 41 deletions(-) create mode 100644 x-pack/plugins/security_solution/common/api/detection_engine/index_management/create_index/create_index.gen.ts create mode 100644 x-pack/plugins/security_solution/common/api/detection_engine/index_management/create_index/create_index.schema.yaml delete mode 100644 x-pack/plugins/security_solution/common/api/detection_engine/index_management/create_index/create_index_route.ts create mode 100644 x-pack/plugins/security_solution/common/api/detection_engine/index_management/delete_index/delete_index.gen.ts create mode 100644 x-pack/plugins/security_solution/common/api/detection_engine/index_management/delete_index/delete_index.schema.yaml delete mode 100644 x-pack/plugins/security_solution/common/api/detection_engine/index_management/delete_index/delete_index_route.ts create mode 100644 x-pack/plugins/security_solution/common/api/detection_engine/index_management/read_index/read_index.gen.ts create mode 100644 x-pack/plugins/security_solution/common/api/detection_engine/index_management/read_index/read_index.schema.yaml delete mode 100644 x-pack/plugins/security_solution/common/api/detection_engine/index_management/read_index/read_index_route.ts diff --git a/packages/kbn-openapi-generator/src/template_service/templates/zod_schema_item.handlebars b/packages/kbn-openapi-generator/src/template_service/templates/zod_schema_item.handlebars index 7ad0abaf1cad8..8e4c5aef616fb 100644 --- a/packages/kbn-openapi-generator/src/template_service/templates/zod_schema_item.handlebars +++ b/packages/kbn-openapi-generator/src/template_service/templates/zod_schema_item.handlebars @@ -68,7 +68,6 @@ z.unknown() {{~#*inline "type_boolean"~}} z.boolean() - {{~#if nullable}}.nullable(){{/if~}} {{~/inline~}} {{~#*inline "type_integer"~}} diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/index_management/create_index/create_index.gen.ts b/x-pack/plugins/security_solution/common/api/detection_engine/index_management/create_index/create_index.gen.ts new file mode 100644 index 0000000000000..9de8855a091a6 --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/detection_engine/index_management/create_index/create_index.gen.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/* + * NOTICE: Do not edit this file manually. + * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. + * + * info: + * title: Create an alerts index API endpoint + * version: 2023-10-31 + */ + +import { z } from 'zod'; + +export type CreateAlertsIndexResponse = z.infer; +export const CreateAlertsIndexResponse = z.object({ + acknowledged: z.boolean(), +}); diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/index_management/create_index/create_index.schema.yaml b/x-pack/plugins/security_solution/common/api/detection_engine/index_management/create_index/create_index.schema.yaml new file mode 100644 index 0000000000000..63213117bd9fb --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/detection_engine/index_management/create_index/create_index.schema.yaml @@ -0,0 +1,47 @@ +openapi: 3.0.0 +info: + title: Create an alerts index API endpoint + version: '2023-10-31' +paths: + /api/detection_engine/index: + post: + x-labels: [ess] + operationId: CreateAlertsIndex + x-codegen-enabled: true + summary: Create an alerts index + tags: + - Alert index API + responses: + 200: + description: Successful response + content: + application/json: + schema: + type: object + properties: + acknowledged: + type: boolean + required: [acknowledged] + 401: + description: Unsuccessful authentication response + content: + application/json: + schema: + $ref: '../../../model/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + 403: + description: Not enough permissions response + content: + application/json: + schema: + $ref: '../../../model/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + 404: + content: + application/json: + schema: + $ref: '../../../model/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + 500: + description: Internal server error response + content: + application/json: + schema: + $ref: '../../../model/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/index_management/create_index/create_index_route.ts b/x-pack/plugins/security_solution/common/api/detection_engine/index_management/create_index/create_index_route.ts deleted file mode 100644 index 7ed58c18f4e96..0000000000000 --- a/x-pack/plugins/security_solution/common/api/detection_engine/index_management/create_index/create_index_route.ts +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -export interface CreateIndexResponse { - acknowledged: boolean; -} diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/index_management/delete_index/delete_index.gen.ts b/x-pack/plugins/security_solution/common/api/detection_engine/index_management/delete_index/delete_index.gen.ts new file mode 100644 index 0000000000000..e2bfef33d6167 --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/detection_engine/index_management/delete_index/delete_index.gen.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/* + * NOTICE: Do not edit this file manually. + * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. + * + * info: + * title: Delete an alerts index API endpoint + * version: 2023-10-31 + */ + +import { z } from 'zod'; + +export type DeleteAlertsIndexResponse = z.infer; +export const DeleteAlertsIndexResponse = z.object({ + acknowledged: z.boolean(), +}); diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/index_management/delete_index/delete_index.schema.yaml b/x-pack/plugins/security_solution/common/api/detection_engine/index_management/delete_index/delete_index.schema.yaml new file mode 100644 index 0000000000000..7cdb02632535e --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/detection_engine/index_management/delete_index/delete_index.schema.yaml @@ -0,0 +1,48 @@ +openapi: 3.0.0 +info: + title: Delete an alerts index API endpoint + version: '2023-10-31' +paths: + /api/detection_engine/index: + delete: + x-labels: [ess] + operationId: DeleteAlertsIndex + x-codegen-enabled: true + summary: Delete an alerts index + tags: + - Alert index API + responses: + 200: + description: Successful response + content: + application/json: + schema: + type: object + properties: + acknowledged: + type: boolean + required: [acknowledged] + 401: + description: Unsuccessful authentication response + content: + application/json: + schema: + $ref: '../../../model/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + 403: + description: Not enough permissions response + content: + application/json: + schema: + $ref: '../../../model/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + 404: + description: Index does not exist response + content: + application/json: + schema: + type: string + 500: + description: Internal server error response + content: + application/json: + schema: + $ref: '../../../model/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/index_management/delete_index/delete_index_route.ts b/x-pack/plugins/security_solution/common/api/detection_engine/index_management/delete_index/delete_index_route.ts deleted file mode 100644 index ce01b06537ee1..0000000000000 --- a/x-pack/plugins/security_solution/common/api/detection_engine/index_management/delete_index/delete_index_route.ts +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -export interface DeleteIndexResponse { - acknowledged: boolean; -} diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/index_management/index.ts b/x-pack/plugins/security_solution/common/api/detection_engine/index_management/index.ts index f0accac2fc01e..b64bea9e974b3 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/index_management/index.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/index_management/index.ts @@ -5,8 +5,8 @@ * 2.0. */ -export * from './create_index/create_index_route'; -export * from './delete_index/delete_index_route'; +export * from './create_index/create_index.gen'; +export * from './delete_index/delete_index.gen'; export * from './read_alerts_index_exists/read_alerts_index_exists_route'; -export * from './read_index/read_index_route'; +export * from './read_index/read_index.gen'; export * from './read_privileges/read_privileges_route'; diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/index_management/read_index/read_index.gen.ts b/x-pack/plugins/security_solution/common/api/detection_engine/index_management/read_index/read_index.gen.ts new file mode 100644 index 0000000000000..071d96b89fe9c --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/detection_engine/index_management/read_index/read_index.gen.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/* + * NOTICE: Do not edit this file manually. + * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. + * + * info: + * title: Get alerts index name API endpoint + * version: 2023-10-31 + */ + +import { z } from 'zod'; + +export type GetAlertsIndexResponse = z.infer; +export const GetAlertsIndexResponse = z.object({ + name: z.string(), + index_mapping_outdated: z.boolean().nullable(), +}); diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/index_management/read_index/read_index.schema.yaml b/x-pack/plugins/security_solution/common/api/detection_engine/index_management/read_index/read_index.schema.yaml new file mode 100644 index 0000000000000..4c38c57da7592 --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/detection_engine/index_management/read_index/read_index.schema.yaml @@ -0,0 +1,50 @@ +openapi: 3.0.0 +info: + title: Get alerts index name API endpoint + version: '2023-10-31' +paths: + /api/detection_engine/index: + get: + x-labels: [ess] + operationId: GetAlertsIndex + x-codegen-enabled: true + summary: Gets the alert index name if it exists + tags: + - Alert index API + responses: + 200: + description: Successful response + content: + application/json: + schema: + type: object + properties: + name: + type: string + index_mapping_outdated: + type: boolean + nullable: true + required: [name, index_mapping_outdated] + 401: + description: Unsuccessful authentication response + content: + application/json: + schema: + $ref: '../../../model/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + 403: + description: Not enough permissions response + content: + application/json: + schema: + $ref: '../../../model/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + 404: + content: + application/json: + schema: + $ref: '../../../model/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + 500: + description: Internal server error response + content: + application/json: + schema: + $ref: '../../../model/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/index_management/read_index/read_index_route.ts b/x-pack/plugins/security_solution/common/api/detection_engine/index_management/read_index/read_index_route.ts deleted file mode 100644 index 43daea9be9fe1..0000000000000 --- a/x-pack/plugins/security_solution/common/api/detection_engine/index_management/read_index/read_index_route.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -export interface ReadIndexResponse { - name: string; - index_mapping_outdated: boolean | null; -} diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/create_index_route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/create_index_route.ts index 7053c913e4a3e..b5c61bb82c29e 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/create_index_route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/create_index_route.ts @@ -15,12 +15,12 @@ import { setPolicy, createBootstrapIndex, } from '@kbn/securitysolution-es-utils'; +import type { CreateAlertsIndexResponse } from '../../../../../common/api/detection_engine/index_management'; import type { SecuritySolutionApiRequestHandlerContext, SecuritySolutionPluginRouter, } from '../../../../types'; import { DETECTION_ENGINE_INDEX_URL } from '../../../../../common/constants'; -import type { CreateIndexResponse } from '../../../../../common/api/detection_engine'; import { buildSiemResponse } from '../utils'; import { getSignalsTemplate, @@ -49,7 +49,7 @@ export const createIndexRoute = (router: SecuritySolutionPluginRouter) => { version: '2023-10-31', validate: false, }, - async (context, _, response): Promise> => { + async (context, _, response): Promise> => { const siemResponse = buildSiemResponse(response); try { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/delete_index_route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/delete_index_route.ts index 4bad93c04edc0..49b14944633cc 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/delete_index_route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/delete_index_route.ts @@ -14,10 +14,10 @@ import { } from '@kbn/securitysolution-es-utils'; import type { IKibanaResponse } from '@kbn/core/server'; +import type { DeleteAlertsIndexResponse } from '../../../../../common/api/detection_engine/index_management'; import type { SecuritySolutionPluginRouter } from '../../../../types'; import { DETECTION_ENGINE_INDEX_URL } from '../../../../../common/constants'; import { buildSiemResponse } from '../utils'; -import type { DeleteIndexResponse } from '../../../../../common/api/detection_engine'; /** * Deletes all of the indexes, template, ilm policies, and aliases. You can check @@ -44,7 +44,7 @@ export const deleteIndexRoute = (router: SecuritySolutionPluginRouter) => { version: '2023-10-31', validate: false, }, - async (context, _, response): Promise> => { + async (context, _, response): Promise> => { const siemResponse = buildSiemResponse(response); try { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/read_index_route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/read_index_route.ts index 27adbd71be823..1f7b62ee5209f 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/read_index_route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/read_index_route.ts @@ -8,6 +8,7 @@ import { transformError, getBootstrapIndexExists } from '@kbn/securitysolution-es-utils'; import type { RuleDataPluginService } from '@kbn/rule-registry-plugin/server'; import type { IKibanaResponse } from '@kbn/core/server'; +import type { GetAlertsIndexResponse } from '../../../../../common/api/detection_engine/index_management'; import type { SecuritySolutionPluginRouter } from '../../../../types'; import { DETECTION_ENGINE_INDEX_URL } from '../../../../../common/constants'; @@ -16,7 +17,6 @@ import { fieldAliasesOutdated } from './check_template_version'; import { getIndexVersion } from './get_index_version'; import { isOutdated } from '../../migrations/helpers'; import { SIGNALS_TEMPLATE_VERSION } from './get_signals_template'; -import type { ReadIndexResponse } from '../../../../../common/api/detection_engine'; export const readIndexRoute = ( router: SecuritySolutionPluginRouter, @@ -35,7 +35,7 @@ export const readIndexRoute = ( version: '2023-10-31', validate: false, }, - async (context, _, response): Promise> => { + async (context, _, response): Promise> => { const siemResponse = buildSiemResponse(response); try { diff --git a/x-pack/test/api_integration/services/security_solution_api.gen.ts b/x-pack/test/api_integration/services/security_solution_api.gen.ts index 4bc611e50bba2..9f6d717ea9dff 100644 --- a/x-pack/test/api_integration/services/security_solution_api.gen.ts +++ b/x-pack/test/api_integration/services/security_solution_api.gen.ts @@ -127,6 +127,13 @@ after 30 days. It also deletes other artifacts specific to the migration impleme .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(props.body as object); }, + createAlertsIndex() { + return supertest + .post('/api/detection_engine/index') + .set('kbn-xsrf', 'true') + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); + }, createAlertsMigration(props: CreateAlertsMigrationProps) { return supertest .post('/api/detection_engine/signals/migration') @@ -146,6 +153,13 @@ after 30 days. It also deletes other artifacts specific to the migration impleme .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(props.body as object); }, + deleteAlertsIndex() { + return supertest + .delete('/api/detection_engine/index') + .set('kbn-xsrf', 'true') + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); + }, /** * Deletes a single rule using the `rule_id` or `id` field. */ @@ -202,6 +216,13 @@ finalize it. .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query(props.query); }, + getAlertsIndex() { + return supertest + .get('/api/detection_engine/index') + .set('kbn-xsrf', 'true') + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); + }, getAlertsMigrationStatus(props: GetAlertsMigrationStatusProps) { return supertest .post('/api/detection_engine/signals/migration_status') From 108e1fadea1b1097025df3f0ce41f2d145c20bbc Mon Sep 17 00:00:00 2001 From: Paul Tavares <56442535+paul-tavares@users.noreply.github.com> Date: Fri, 21 Jun 2024 11:42:57 -0400 Subject: [PATCH 18/33] [Security Solution][Endpoint] Bug fixes to the Endpoint List (#186223) ## Summary Fixes a display bug on the Endpoint List where the Policy name column value was wrapping and causing the row to be miss-aligned. Changes include: - Moved components pieces that display the Policy Revision and the "Out-of-date" message to the `` component - this component now handles on displaying all of this information in one place via input Props - The component also dues Authz checks and ensures that if the user does not have Authz to read the Endpoint Policy Management section, the component will display the policy name as plain text (no link) - It will truncate the Policy name if not enough width is available to display its full value - Replaced the Policy List column component for Policy Name with the use of `` - Replaced the Policy Details flyout component to also use `` to display the policy name > [!NOTE] > Its still possible for the Policy Name column on the Endpoint list to display across two lines - when the Policy that the Endpoint host last reported is not longer available in Kibana. In this case/flow, the second line will display a message indicating that. See screen captures below. --- .../mock/endpoint/app_context_render.tsx | 63 +++++ .../endpoint_applied_policy_status.test.tsx | 49 ---- .../endpoint_applied_policy_status.tsx | 86 ------- .../endpoint_applied_policy_status/index.ts | 9 - .../components/endpoint_policy_link.test.tsx | 109 +++++++++ .../components/endpoint_policy_link.tsx | 224 ++++++++++++++---- .../cypress/e2e/endpoint_list/endpoints.cy.ts | 2 +- .../view/components/out_of_date.tsx | 27 --- .../view/details/endpoint_details_content.tsx | 56 ++--- .../pages/endpoint_hosts/view/index.test.tsx | 17 +- .../pages/endpoint_hosts/view/index.tsx | 63 ++--- .../translations/translations/fr-FR.json | 6 - .../translations/translations/ja-JP.json | 6 - .../translations/translations/zh-CN.json | 6 - 14 files changed, 397 insertions(+), 326 deletions(-) delete mode 100644 x-pack/plugins/security_solution/public/management/components/endpoint_applied_policy_status/endpoint_applied_policy_status.test.tsx delete mode 100644 x-pack/plugins/security_solution/public/management/components/endpoint_applied_policy_status/endpoint_applied_policy_status.tsx delete mode 100644 x-pack/plugins/security_solution/public/management/components/endpoint_applied_policy_status/index.ts create mode 100644 x-pack/plugins/security_solution/public/management/components/endpoint_policy_link.test.tsx delete mode 100644 x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/components/out_of_date.tsx diff --git a/x-pack/plugins/security_solution/public/common/mock/endpoint/app_context_render.tsx b/x-pack/plugins/security_solution/public/common/mock/endpoint/app_context_render.tsx index 11b4607ee4aae..147f52c7d4b42 100644 --- a/x-pack/plugins/security_solution/public/common/mock/endpoint/app_context_render.tsx +++ b/x-pack/plugins/security_solution/public/common/mock/endpoint/app_context_render.tsx @@ -23,6 +23,9 @@ import type { } from '@testing-library/react-hooks/src/types/react'; import type { UseBaseQueryResult } from '@tanstack/react-query'; import ReactDOM from 'react-dom'; +import type { DeepReadonly } from 'utility-types'; +import type { UserPrivilegesState } from '../../components/user_privileges/user_privileges_context'; +import { getUserPrivilegesMockDefaultValue } from '../../components/user_privileges/__mocks__'; import type { AppLinkItems } from '../../links/types'; import { ExperimentalFeaturesService } from '../../experimental_features_service'; import { applyIntersectionObserverMock } from '../intersection_observer_mock'; @@ -41,6 +44,7 @@ import { KibanaServices } from '../../lib/kibana'; import { appLinks } from '../../../app_links'; import { fleetGetPackageHttpMock } from '../../../management/mocks'; import { allowedExperimentalValues } from '../../../../common/experimental_features'; +import type { EndpointPrivileges } from '../../../../common/endpoint/types'; const REAL_REACT_DOM_CREATE_PORTAL = ReactDOM.createPortal; @@ -116,6 +120,11 @@ export type ReactQueryHookRenderer< options?: RenderHookOptions ) => Promise; +export interface UserPrivilegesMockSetter { + set: (privileges: Partial) => void; + reset: () => void; +} + /** * Mocked app root context renderer */ @@ -155,6 +164,42 @@ export interface AppContextTestRender { */ setExperimentalFlag: (flags: Partial) => void; + /** + * A helper method that will return an interface to more easily manipulate Endpoint related user authz. + * Works in conjunction with `jest.mock()` at the test level. + * @param useUserPrivilegesHookMock + * + * @example + * + * // in your test + * import { useUserPrivileges as _useUserPrivileges } from 'path/to/user_privileges' + * + * jest.mock('path/to/user_privileges'); + * + * const useUserPrivilegesMock = _useUserPrivileges as jest.Mock; + * + * // If you test - or more likely, in the `beforeEach` and `afterEach` + * let authMockSetter: UserPrivilegesMockSetter; + * + * beforeEach(() => { + * const appTestSetup = createAppRootMockRenderer(); + * + * authMockSetter = appTestSetup.getUserPrivilegesMockSetter(useUserPrivilegesMock); + * }) + * + * afterEach(() => { + * authMockSetter.reset(); + * } + * + * // Manipulate the authz in your test + * it('does something', () => { + * authMockSetter({ canReadPolicyManagement: false }); + * }); + */ + getUserPrivilegesMockSetter: ( + useUserPrivilegesHookMock: jest.MockedFn<() => DeepReadonly> + ) => UserPrivilegesMockSetter; + /** * The React Query client (setup to support jest testing) */ @@ -305,6 +350,23 @@ export const createAppRootMockRenderer = (): AppContextTestRender => { }); }; + const getUserPrivilegesMockSetter: AppContextTestRender['getUserPrivilegesMockSetter'] = ( + useUserPrivilegesHookMock + ) => { + return { + set: (authOverrides) => { + const newAuthz = getUserPrivilegesMockDefaultValue(); + + Object.assign(newAuthz.endpointPrivileges, authOverrides); + useUserPrivilegesHookMock.mockReturnValue(newAuthz); + }, + reset: () => { + useUserPrivilegesHookMock.mockReset(); + useUserPrivilegesHookMock.mockReturnValue(getUserPrivilegesMockDefaultValue()); + }, + }; + }; + // Initialize the singleton `KibanaServices` with global services created for this test instance. // The module (`../../lib/kibana`) could have been mocked at the test level via `jest.mock()`, // and if so, then we set the return value of `KibanaServices.get` instead of calling `KibanaServices.init()` @@ -336,6 +398,7 @@ export const createAppRootMockRenderer = (): AppContextTestRender => { renderHook, renderReactQueryHook, setExperimentalFlag, + getUserPrivilegesMockSetter, queryClient, }; }; diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_applied_policy_status/endpoint_applied_policy_status.test.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_applied_policy_status/endpoint_applied_policy_status.test.tsx deleted file mode 100644 index 3b98fb46ecd28..0000000000000 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_applied_policy_status/endpoint_applied_policy_status.test.tsx +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { AppContextTestRender } from '../../../common/mock/endpoint'; -import { createAppRootMockRenderer } from '../../../common/mock/endpoint'; -import type { EndpointAppliedPolicyStatusProps } from './endpoint_applied_policy_status'; -import { EndpointAppliedPolicyStatus } from './endpoint_applied_policy_status'; -import React from 'react'; -import { EndpointDocGenerator } from '../../../../common/endpoint/generate_data'; -import { POLICY_STATUS_TO_TEXT } from '../../pages/endpoint_hosts/view/host_constants'; - -describe('when using EndpointPolicyStatus component', () => { - let render: () => ReturnType; - let renderResult: ReturnType; - let renderProps: EndpointAppliedPolicyStatusProps; - - beforeEach(() => { - const appTestContext = createAppRootMockRenderer(); - - renderProps = { - policyApplied: new EndpointDocGenerator('seed').generateHostMetadata().Endpoint.policy - .applied, - }; - - render = () => { - renderResult = appTestContext.render(); - return renderResult; - }; - }); - - it('should display status from metadata `policy.applied` value', () => { - render(); - - expect(renderResult.getByTestId('policyStatus').textContent).toEqual( - POLICY_STATUS_TO_TEXT[renderProps.policyApplied.status] - ); - }); - - it('should display status passed as `children`', () => { - renderProps.children = 'status goes here'; - render(); - - expect(renderResult.getByTestId('policyStatus').textContent).toEqual('status goes here'); - }); -}); diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_applied_policy_status/endpoint_applied_policy_status.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_applied_policy_status/endpoint_applied_policy_status.tsx deleted file mode 100644 index 22574fd2d8d10..0000000000000 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_applied_policy_status/endpoint_applied_policy_status.tsx +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { PropsWithChildren } from 'react'; -import React, { memo } from 'react'; -import { EuiHealth, EuiToolTip, EuiText, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { - POLICY_STATUS_TO_HEALTH_COLOR, - POLICY_STATUS_TO_TEXT, -} from '../../pages/endpoint_hosts/view/host_constants'; -import type { HostMetadata } from '../../../../common/endpoint/types'; - -/** - * Displays the status of an applied policy on the Endpoint (using the information provided - * by the endpoint in the Metadata document `Endpoint.policy.applied`. - * By default, the policy status is displayed as plain text, however, that can be overridden - * by defining the `children` prop or passing a child component to this one. - */ -export type EndpointAppliedPolicyStatusProps = PropsWithChildren<{ - policyApplied: HostMetadata['Endpoint']['policy']['applied']; -}>; - -/** - * Display the status of the Policy applied on an endpoint - */ -export const EndpointAppliedPolicyStatus = memo( - ({ policyApplied, children }) => { - return ( - - } - anchorClassName="eui-textTruncate" - content={ - - - - {policyApplied.name} - - - - {policyApplied.endpoint_policy_version && ( - - - - - - )} - - } - > - - {children !== undefined ? children : POLICY_STATUS_TO_TEXT[policyApplied.status]} - - - ); - } -); -EndpointAppliedPolicyStatus.displayName = 'EndpointAppliedPolicyStatus'; diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_applied_policy_status/index.ts b/x-pack/plugins/security_solution/public/management/components/endpoint_applied_policy_status/index.ts deleted file mode 100644 index c1a930828314f..0000000000000 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_applied_policy_status/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -export { EndpointAppliedPolicyStatus } from './endpoint_applied_policy_status'; -export type { EndpointAppliedPolicyStatusProps } from './endpoint_applied_policy_status'; diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_policy_link.test.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_policy_link.test.tsx new file mode 100644 index 0000000000000..37a9791c58837 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_policy_link.test.tsx @@ -0,0 +1,109 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { AppContextTestRender, UserPrivilegesMockSetter } from '../../common/mock/endpoint'; +import { createAppRootMockRenderer } from '../../common/mock/endpoint'; +import React from 'react'; +import type { EndpointPolicyLinkProps } from './endpoint_policy_link'; +import { EndpointPolicyLink, POLICY_NOT_FOUND_MESSAGE } from './endpoint_policy_link'; +import { useUserPrivileges as _useUserPrivileges } from '../../common/components/user_privileges'; + +jest.mock('../../common/components/user_privileges'); + +const useUserPrivilegesMock = _useUserPrivileges as jest.Mock; + +describe('EndpointPolicyLink component', () => { + let render: () => ReturnType; + let renderResult: ReturnType; + let props: EndpointPolicyLinkProps; + let authzSettter: UserPrivilegesMockSetter; + + beforeEach(() => { + const appTestContext = createAppRootMockRenderer(); + + props = { + policyId: 'abc-123', + 'data-test-subj': 'test', + children: 'policy name here', + }; + + authzSettter = appTestContext.getUserPrivilegesMockSetter(useUserPrivilegesMock); + + render = () => { + renderResult = appTestContext.render(); + return renderResult; + }; + }); + + afterEach(() => { + authzSettter.reset(); + }); + + it('should display policy as a link to policy details page', () => { + const { getByTestId, queryByTestId } = render(); + + expect(getByTestId('test-displayContent')).toHaveTextContent(props.children as string); + expect(getByTestId('test-link')).toBeTruthy(); + expect(queryByTestId('test-revision')).toBeNull(); + expect(queryByTestId('test-outdatedMsg')).toBeNull(); + expect(queryByTestId('test-policyNotFoundMsg')).toBeNull(); + }); + + it('should display regular text (no link) if user has no authz to read policy details', () => { + authzSettter.set({ canReadPolicyManagement: false }); + const { getByTestId, queryByTestId } = render(); + + expect(getByTestId('test-displayContent')).toHaveTextContent(props.children as string); + expect(queryByTestId('test-link')).toBeNull(); + }); + + it('should display regular text (no link) if policy does not exist', () => { + props.policyExists = false; + const { getByTestId, queryByTestId } = render(); + + expect(getByTestId('test-displayContent')).toHaveTextContent(props.children as string); + expect(queryByTestId('test-link')).toBeNull(); + }); + + it('should display regular text (no link) if policy id is empty string', () => { + props.policyId = ''; + const { getByTestId, queryByTestId } = render(); + + expect(getByTestId('test-displayContent')).toHaveTextContent(props.children as string); + expect(queryByTestId('test-link')).toBeNull(); + }); + + it('should display revision', () => { + props.revision = 10; + const { getByTestId } = render(); + + expect(getByTestId('test-revision')).toHaveTextContent('rev. 10'); + }); + + it('should display out-of-date message', () => { + props.isOutdated = true; + const { getByTestId } = render(); + + expect(getByTestId('test-outdatedMsg')).toHaveTextContent('Out-of-date'); + }); + + it('should display policy no longer available', () => { + props.policyExists = false; + const { getByTestId } = render(); + + expect(getByTestId('test-policyNotFoundMsg')).toHaveTextContent(POLICY_NOT_FOUND_MESSAGE); + }); + + it('should display all info. when policy is missing and out of date', () => { + props.revision = 10; + props.isOutdated = true; + props.policyExists = false; + const { getByTestId } = render(); + + expect(getByTestId('test').textContent).toEqual('policy name hererev. 10Out-of-date'); + }); +}); diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_policy_link.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_policy_link.tsx index dab1d5e98c722..f98e16a3ef137 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_policy_link.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_policy_link.tsx @@ -6,60 +6,200 @@ */ import React, { memo, useMemo } from 'react'; -import type { EuiLinkAnchorProps } from '@elastic/eui'; -import { EuiLink, EuiText, EuiIcon } from '@elastic/eui'; +import type { EuiLinkAnchorProps, EuiTextProps } from '@elastic/eui'; +import { EuiLink, EuiText, EuiIcon, EuiFlexGroup, EuiFlexItem, EuiToolTip } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; +import { i18n } from '@kbn/i18n'; +import { useTestIdGenerator } from '../hooks/use_test_id_generator'; import { getPolicyDetailPath } from '../common/routing'; import { useNavigateByRouterEventHandler } from '../../common/hooks/endpoint/use_navigate_by_router_event_handler'; import { useAppUrl } from '../../common/lib/kibana/hooks'; import type { PolicyDetailsRouteState } from '../../../common/endpoint/types'; +import { useUserPrivileges } from '../../common/components/user_privileges'; + +export const POLICY_NOT_FOUND_MESSAGE = i18n.translate( + 'xpack.securitySolution.endpointPolicyLink.policyNotFound', + { defaultMessage: 'Policy no longer available!' } +); + +export type EndpointPolicyLinkProps = Omit & { + policyId: string; + /** + * If defined, then a tooltip will also be shown when a user hovers over the dispplayed value (`children`). + * When set to `true`, the tooltip content will be the same as the value that is + * displayed (`children`). The tooltip can also be customized by passing in the content to be shown. + */ + tooltip?: boolean | React.ReactNode; + /** + * The revision of the policy that the Endpoint is running with (normally obtained from the host's metadata. + */ + revision?: number; + /** + * Will display an "out of date" message. + */ + isOutdated?: boolean; + /** Text size to be applied to the display content (`children`) */ + textSize?: EuiTextProps['size']; + /** + * If policy still exists. In some cases, we could be displaying the policy name for a policy + * that no longer exists (ex. it was deleted, but we still have data in ES that references that deleted policy) + * When set to `true`, a link to the policy wil not be shown and the display value (`children`) + * will have a message appended to it indicating policy no longer available. + */ + policyExists?: boolean; + backLink?: PolicyDetailsRouteState['backLink']; +}; /** - * A policy link (to details) that first checks to see if the policy id exists against - * the `nonExistingPolicies` value in the store. If it does not exist, then regular - * text is returned. + * Will display the provided content (`children`) as a link that takes the user to the Endpoint + * Policy Details page. A link is only displayed if the user has Authz to that page, otherwise the + * provided display content will just be shown as is. */ -export const EndpointPolicyLink = memo< - Omit & { - policyId: string; - missingPolicies?: Record; - backLink?: PolicyDetailsRouteState['backLink']; - } ->(({ policyId, backLink, children, missingPolicies = {}, ...otherProps }) => { - const { getAppUrl } = useAppUrl(); - const { toRoutePath, toRouteUrl } = useMemo(() => { - const path = policyId ? getPolicyDetailPath(policyId) : ''; - return { - toRoutePath: backLink ? { pathname: path, state: { backLink } } : path, - toRouteUrl: getAppUrl({ path }), - }; - }, [policyId, getAppUrl, backLink]); - const clickHandler = useNavigateByRouterEventHandler(toRoutePath); +export const EndpointPolicyLink = memo( + ({ + policyId, + backLink, + children, + policyExists = true, + isOutdated = false, + tooltip = true, + revision, + textSize = 's', + ...euiLinkProps + }) => { + const { getAppUrl } = useAppUrl(); + const { canReadPolicyManagement } = useUserPrivileges().endpointPrivileges; + const testId = useTestIdGenerator(euiLinkProps['data-test-subj']); - if (!policyId || missingPolicies[policyId]) { - return ( - - {children} - { - + const { toRoutePath, toRouteUrl } = useMemo(() => { + const path = policyId ? getPolicyDetailPath(policyId) : ''; + return { + toRoutePath: backLink ? { pathname: path, state: { backLink } } : path, + toRouteUrl: getAppUrl({ path }), + }; + }, [policyId, getAppUrl, backLink]); + + const clickHandler = useNavigateByRouterEventHandler(toRoutePath); + + const displayAsLink = useMemo(() => { + return Boolean(canReadPolicyManagement && policyId && policyExists); + }, [canReadPolicyManagement, policyExists, policyId]); + + const displayValue = useMemo(() => { + const content = ( + + {children} + + ); + + return displayAsLink ? ( + // eslint-disable-next-line @elastic/eui/href-or-on-click + + {content} + + ) : ( + content + ); + }, [children, clickHandler, displayAsLink, euiLinkProps, testId, textSize, toRouteUrl]); + + const policyNoLongerAvailableMessage = useMemo(() => { + return ( + ((!policyId || !policyExists) && ( +   - + {POLICY_NOT_FOUND_MESSAGE} - } - - ); - } + )) || + null + ); + }, [policyExists, policyId, testId]); + + const tooltipContent: React.ReactNode | undefined = useMemo(() => { + const content = tooltip === true ? children : tooltip || undefined; + return content ? ( +
+ {content} + {policyNoLongerAvailableMessage && <> {`(${POLICY_NOT_FOUND_MESSAGE})`}} +
+ ) : ( + content + ); + }, [children, policyNoLongerAvailableMessage, tooltip]); + + return ( +
+ + + {tooltipContent ? ( + + {displayValue} + + ) : ( + displayValue + )} + + + {revision && ( + + + + + + )} - return ( - // eslint-disable-next-line @elastic/eui/href-or-on-click - - {children} - - ); -}); + {isOutdated && ( + + + + + + + + + )} + + {policyNoLongerAvailableMessage} +
+ ); + } +); EndpointPolicyLink.displayName = 'EndpointPolicyLink'; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints.cy.ts index 217b13f96f934..12cdfcfa6e09c 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint_list/endpoints.cy.ts @@ -125,7 +125,7 @@ describe('Endpoints page', { tags: ['@ess', '@serverless'] }, () => { cy.get('@originalPolicyRevision').then((originalRevision: number) => { const revisionRegex = new RegExp(`^rev\\. ${originalRevision + 1}$`); - cy.get('@endpointRow').findByTestSubj('policyListRevNo').contains(revisionRegex); + cy.get('@endpointRow').findByTestSubj('policyNameCellLink-revision').contains(revisionRegex); }); }); diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/components/out_of_date.tsx b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/components/out_of_date.tsx deleted file mode 100644 index 87abd4bbb9225..0000000000000 --- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/components/out_of_date.tsx +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { EuiText, EuiIcon } from '@elastic/eui'; -import { FormattedMessage } from '@kbn/i18n-react'; - -export const OutOfDate = React.memo<{ style?: React.CSSProperties }>(({ style, ...otherProps }) => { - return ( - - - - - ); -}); - -OutOfDate.displayName = 'OutOfDate'; diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/endpoint_details_content.tsx b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/endpoint_details_content.tsx index 0140cba0780ed..3832eae088ef6 100644 --- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/endpoint_details_content.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/endpoint_details_content.tsx @@ -5,7 +5,6 @@ * 2.0. */ -import styled from 'styled-components'; import { EuiDescriptionList, EuiFlexGroup, @@ -17,12 +16,12 @@ import { } from '@elastic/eui'; import React, { memo, useMemo } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; +import { isPolicyOutOfDate } from '../../utils'; import { useIsExperimentalFeatureEnabled } from '../../../../../common/hooks/use_experimental_features'; import { AgentStatus, EndpointAgentStatus, } from '../../../../../common/components/endpoint/agents/agent_status'; -import { isPolicyOutOfDate } from '../../utils'; import type { HostInfo } from '../../../../../../common/endpoint/types'; import { useEndpointSelector } from '../hooks'; import { @@ -35,13 +34,6 @@ import { FormattedDate } from '../../../../../common/components/formatted_date'; import { useNavigateByRouterEventHandler } from '../../../../../common/hooks/endpoint/use_navigate_by_router_event_handler'; import { getEndpointDetailsPath } from '../../../../common/routing'; import { EndpointPolicyLink } from '../../../../components/endpoint_policy_link'; -import { OutOfDate } from '../components/out_of_date'; - -const EndpointDetailsContentStyled = styled.div` - .policyLineText { - padding-right: 5px; - } -`; const ColumnTitle = ({ children }: { children: React.ReactNode }) => { return ( @@ -138,35 +130,15 @@ export const EndpointDetailsContent = memo( ), description: ( - - - {hostInfo.metadata.Endpoint.policy.applied.name} - - {hostInfo.metadata.Endpoint.policy.applied.endpoint_policy_version && ( - - - - )} - {isPolicyOutOfDate(hostInfo.metadata.Endpoint.policy.applied, policyInfo) && ( - - )} - + + {hostInfo.metadata.Endpoint.policy.applied.name} + ), }, { @@ -227,17 +199,17 @@ export const EndpointDetailsContent = memo( }, ]; }, [ - agentStatusClientEnabled, hostInfo, + agentStatusClientEnabled, getHostPendingActions, - missingPolicies, policyInfo, + missingPolicies, policyStatus, policyStatusClickHandler, ]); return ( - +
( listItems={detailsResults} data-test-subj="endpointDetailsList" /> - +
); } ); diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.test.tsx b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.test.tsx index ceb9f1ce10e86..f69970ab7d538 100644 --- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.test.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.test.tsx @@ -385,12 +385,11 @@ describe('when on the endpoint list page', () => { await reactTestingLibrary.act(async () => { await middlewareSpy.waitForAction('serverReturnedEndpointList'); }); - const outOfDates = await renderResult.findAllByTestId('rowPolicyOutOfDate'); + const outOfDates = await renderResult.findAllByTestId('policyNameCellLink-outdatedMsg'); expect(outOfDates).toHaveLength(4); outOfDates.forEach((item) => { expect(item.textContent).toEqual('Out-of-date'); - expect(item.querySelector(`[data-euiicon-type][color=warning]`)).not.toBeNull(); }); }); @@ -399,7 +398,7 @@ describe('when on the endpoint list page', () => { await reactTestingLibrary.act(async () => { await middlewareSpy.waitForAction('serverReturnedEndpointList'); }); - const firstPolicyName = (await renderResult.findAllByTestId('policyNameCellLink'))[0]; + const firstPolicyName = (await renderResult.findAllByTestId('policyNameCellLink-link'))[0]; expect(firstPolicyName).not.toBeNull(); expect(firstPolicyName.getAttribute('href')).toEqual( `${APP_PATH}${MANAGEMENT_PATH}/policy/${firstPolicyID}/settings` @@ -452,7 +451,9 @@ describe('when on the endpoint list page', () => { await reactTestingLibrary.act(async () => { await middlewareSpy.waitForAction('serverReturnedEndpointList'); }); - const firstPolicyRevElement = (await renderResult.findAllByTestId('policyListRevNo'))[0]; + const firstPolicyRevElement = ( + await renderResult.findAllByTestId('policyNameCellLink-revision') + )[0]; expect(firstPolicyRevElement).not.toBeNull(); expect(firstPolicyRevElement.textContent).toEqual(`rev. ${firstPolicyRev}`); }); @@ -589,7 +590,7 @@ describe('when on the endpoint list page', () => { it('should display policy name value as a link', async () => { const renderResult = render(); - const policyDetailsLink = await renderResult.findByTestId('policyDetailsValue'); + const policyDetailsLink = await renderResult.findByTestId('policyNameCellLink-link'); expect(policyDetailsLink).not.toBeNull(); expect(policyDetailsLink.getAttribute('href')).toEqual( `${APP_PATH}${MANAGEMENT_PATH}/policy/${hostInfo.metadata.Endpoint.policy.applied.id}/settings` @@ -598,7 +599,9 @@ describe('when on the endpoint list page', () => { it('should display policy revision number', async () => { const renderResult = render(); - const policyDetailsRevElement = await renderResult.findByTestId('policyDetailsRevNo'); + const policyDetailsRevElement = await renderResult.findByTestId( + 'policyNameCellLink-revision' + ); expect(policyDetailsRevElement).not.toBeNull(); expect(policyDetailsRevElement.textContent).toEqual( `rev. ${hostInfo.metadata.Endpoint.policy.applied.endpoint_policy_version}` @@ -607,7 +610,7 @@ describe('when on the endpoint list page', () => { it('should update the URL when policy name link is clicked', async () => { const renderResult = render(); - const policyDetailsLink = await renderResult.findByTestId('policyDetailsValue'); + const policyDetailsLink = await renderResult.findByTestId('policyNameCellLink-link'); const userChangedUrlChecker = middlewareSpy.waitForAction('userChangedUrl'); reactTestingLibrary.act(() => { reactTestingLibrary.fireEvent.click(policyDetailsLink); diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx index 89473ece661a3..4eebc9a6c3983 100644 --- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { type CSSProperties, useCallback, useMemo } from 'react'; +import React, { useCallback, useMemo } from 'react'; import styled from 'styled-components'; import type { CriteriaWithPagination } from '@elastic/eui'; import { @@ -32,6 +32,7 @@ import type { AgentPolicyDetailsDeployAgentAction, CreatePackagePolicyRouteState, } from '@kbn/fleet-plugin/public'; +import { isPolicyOutOfDate } from '../utils'; import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; import { TransformFailedCallout } from './components/transform_failed_callout'; import type { EndpointIndexUIQueryParams } from '../types'; @@ -42,9 +43,8 @@ import { } from '../../../../common/components/endpoint/agents/agent_status'; import { EndpointDetailsFlyout } from './details'; import * as selectors from '../store/selectors'; -import { getEndpointPendingActionsCallback } from '../store/selectors'; +import { getEndpointPendingActionsCallback, nonExistingPolicies } from '../store/selectors'; import { useEndpointSelector } from './hooks'; -import { isPolicyOutOfDate } from '../utils'; import { POLICY_STATUS_TO_HEALTH_COLOR, POLICY_STATUS_TO_TEXT } from './host_constants'; import type { CreateStructuredSelector } from '../../../../common/store'; import type { @@ -64,7 +64,6 @@ import { getEndpointDetailsPath, getEndpointListPath } from '../../../common/rou import { useFormatUrl } from '../../../../common/components/link_to'; import { useAppUrl } from '../../../../common/lib/kibana/hooks'; import type { EndpointAction } from '../store/action'; -import { OutOfDate } from './components/out_of_date'; import { AdminSearchBar } from './components/search_bar'; import { AdministrationListPage } from '../../../components/administration_list_page'; import { TableRowActions } from './components/table_row_actions'; @@ -83,7 +82,7 @@ const StyledDatePicker = styled.div` interface GetEndpointListColumnsProps { agentStatusClientEnabled: boolean; - canReadPolicyManagement: boolean; + missingPolicies: ReturnType; backToEndpointList: PolicyDetailsRouteState['backLink']; getHostPendingActions: ReturnType; queryParams: Immutable; @@ -108,7 +107,7 @@ const columnWidths: Record< const getEndpointListColumns = ({ agentStatusClientEnabled, - canReadPolicyManagement, + missingPolicies, backToEndpointList, getHostPendingActions, queryParams, @@ -118,7 +117,6 @@ const getEndpointListColumns = ({ const lastActiveColumnName = i18n.translate('xpack.securitySolution.endpoint.list.lastActive', { defaultMessage: 'Last active', }); - const padLeft: CSSProperties = { paddingLeft: '6px' }; return [ { @@ -183,42 +181,17 @@ const getEndpointListColumns = ({ item: HostInfo ) => { const policy = item.metadata.Endpoint.policy.applied; - return ( - <> - - {canReadPolicyManagement ? ( - - {policyName} - - ) : ( - <>{policyName} - )} - - {policy.endpoint_policy_version && ( - - - - )} - {isPolicyOutOfDate(policy, item.policy_info) && ( - - )} - + + {policyName} + ); }, }, @@ -375,11 +348,11 @@ export const EndpointList = () => { metadataTransformStats, isInitialized, } = useEndpointSelector(selector); + const missingPolicies = useEndpointSelector(nonExistingPolicies); const getHostPendingActions = useEndpointSelector(getEndpointPendingActionsCallback); const { canReadEndpointList, canAccessFleet, - canReadPolicyManagement, loading: endpointPrivilegesLoading, } = useUserPrivileges().endpointPrivileges; const { search } = useFormatUrl(SecurityPageName.administration); @@ -540,9 +513,9 @@ export const EndpointList = () => { () => getEndpointListColumns({ agentStatusClientEnabled, - canReadPolicyManagement, backToEndpointList, getAppUrl, + missingPolicies, getHostPendingActions, queryParams, search, @@ -550,9 +523,9 @@ export const EndpointList = () => { [ agentStatusClientEnabled, backToEndpointList, - canReadPolicyManagement, getAppUrl, getHostPendingActions, + missingPolicies, queryParams, search, ] diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index cb1314b562822..f1e9887dd606c 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -32643,7 +32643,6 @@ "xpack.securitySolution.enableRiskScore.enableRiskScoreDescription": "Une fois que vous avez activé cette fonctionnalité, vous pouvez obtenir un accès rapide aux scores de risque de {riskEntity} dans cette section. Les données pourront prendre jusqu'à une heure pour être générées après l'activation du module.", "xpack.securitySolution.enableRiskScore.upgradeRiskScore": "Mettre à niveau le score de risque de {riskEntity}", "xpack.securitySolution.endpoint.actions.unsupported.message": "La version actuelle de l'agent {agentType} ne prend pas en charge {command}. Mettez à niveau votre Elastic Agent via Fleet vers la dernière version pour activer cette action de réponse.", - "xpack.securitySolution.endpoint.details.policy.revisionNumber": "rév. {revNumber}", "xpack.securitySolution.endpoint.details.policyStatusValue": "{policyStatus, select, success {Succès} warning {Avertissement} failure {Échec} other {Inconnu}}", "xpack.securitySolution.endpoint.fleetCustomExtension.artifactsSummaryError": "Une erreur s'est produite lors de la tentative de récupération des statistiques d'artefacts : \"{error}\"", "xpack.securitySolution.endpoint.fleetCustomExtension.blocklistsSummary.error": "Une erreur s'est produite lors de la tentative de récupération des statistiques de liste noire : \"{error}\"", @@ -32663,7 +32662,6 @@ "xpack.securitySolution.endpoint.hostIsolation.unisolate.successfulMessage": "La libération de l'hôte {hostName} a été soumise", "xpack.securitySolution.endpoint.hostIsolation.unIsolateThisHost": "{hostName} est actuellement {isolated}. Voulez-vous vraiment {unisolate} cet hôte ?", "xpack.securitySolution.endpoint.list.hostStatusValue": "{hostStatus, select, healthy {Sain} unhealthy {En mauvais état} updating {En cours de mise à jour} offline {Hors ligne} inactive {Inactif} unenrolled {Désinscrit} other {En mauvais état}}", - "xpack.securitySolution.endpoint.list.policy.revisionNumber": "rév. {revNumber}", "xpack.securitySolution.endpoint.list.totalCount": "Affichage de {totalItemCount, plural, one {# point de terminaison} other {# points de terminaison}}", "xpack.securitySolution.endpoint.list.totalCount.limited": "Affichage de {limit} de {totalItemCount, plural, one {# point de terminaison} other {# points de terminaison}}", "xpack.securitySolution.endpoint.list.transformFailed.message": "Une transformation requise, {transformId}, est actuellement en échec. La plupart du temps, ce problème peut être corrigé grâce aux {transformsPage}. Pour une assistance supplémentaire, veuillez visitez la {docsPage}", @@ -32734,7 +32732,6 @@ "xpack.securitySolution.endpoint.resolver.panel.relatedEventList.countByCategory": "{count} {category}", "xpack.securitySolution.endpoint.resolver.panel.relatedEventList.numberOfEvents": "{totalCount} événements", "xpack.securitySolution.endpoint.resolver.relatedEventLimitTitle": "Cette liste inclut {numberOfEntries} événements de processus.", - "xpack.securitySolution.endpointPolicyStatus.revisionNumber": "rév. {revNumber}", "xpack.securitySolution.endpointResponseActions.actionError.errorMessage": "{ errorCount, plural, =1 {Erreur rencontrée} other {Erreurs rencontrées}} :", "xpack.securitySolution.enrichment.noInvestigationEnrichment": "Aucun renseignement supplémentaire sur les menaces n'a été détecté sur la période sélectionnée. Sélectionnez une autre plage temporelle ou {link} afin de collecter des renseignements sur les menaces pour les détecter et les comparer.", "xpack.securitySolution.entityAnalytics.anomalies.moduleNotCompatibleTitle": "{incompatibleJobCount} {incompatibleJobCount, plural, =1 {tâche est actuellement indisponible} other {tâches sont actuellement indisponibles}}", @@ -35613,7 +35610,6 @@ "xpack.securitySolution.endpoint.policyList.onboardingSectionTwo.fromEndpointPage": "À partir de cette page, vous pourrez afficher et gérer les hôtes dans votre environnement exécutant Elastic Defend.", "xpack.securitySolution.endpoint.policyList.onboardingSectionTwo.fromPolicyPage": "À partir de cette page, vous pourrez afficher et gérer les politiques d'intégration Elastic Defend dans votre environnement exécutant Elastic Defend.", "xpack.securitySolution.endpoint.policyList.onboardingTitle": "Lancez-vous avec Elastic Defend", - "xpack.securitySolution.endpoint.policyNotFound": "Politique introuvable !", "xpack.securitySolution.endpoint.policyResponse.backLinkTitle": "Détails de point de terminaison", "xpack.securitySolution.endpoint.policyResponse.title": "Réponse de politique", "xpack.securitySolution.endpoint.protectionUpdates.automaticUpdates.enabled.toggleName": "Activer les mises à jour automatique", @@ -35750,7 +35746,6 @@ "xpack.securitySolution.endpointDetails.activityLog.logEntry.response.unisolationSuccessful": "Requête de libération de l'hôte reçue par Endpoint", "xpack.securitySolution.endpointDetails.overview": "Aperçu", "xpack.securitySolution.endpointDetails.responseActionsHistory": "Historique des actions de réponse", - "xpack.securitySolution.endpointPolicyStatus.tooltipTitleLabel": "Politique appliquée", "xpack.securitySolution.endpointResponseActions.actionSubmitter.apiErrorDetails": "L'erreur suivante a été rencontrée :", "xpack.securitySolution.endpointResponseActions.executeAction.successTitle": "L'exécution de la commande a réussi.", "xpack.securitySolution.endpointResponseActions.getFileAction.successTitle": "Fichier récupéré à partir de l'hôte.", @@ -36831,7 +36826,6 @@ "xpack.securitySolution.osquery.action.permissionDenied": "Autorisation refusée", "xpack.securitySolution.osquery.action.shortEmptyTitle": "Osquery n’est pas disponible.", "xpack.securitySolution.osquery.action.unavailable": "L’intégration Osquery Manager n'a pas été ajoutée à la politique d'agent. Pour exécuter des requêtes sur l'hôte, ajoutez l'intégration Osquery Manager à la politique d'agent dans Fleet.", - "xpack.securitySolution.outOfDateLabel": "Obsolète", "xpack.securitySolution.overview.auditBeatAuditTitle": "Audit", "xpack.securitySolution.overview.auditBeatFimTitle": "File Integrity Module", "xpack.securitySolution.overview.auditBeatLoginTitle": "Connexion", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 48eee058b1aeb..2ab0ac7cadf62 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -32617,7 +32617,6 @@ "xpack.securitySolution.enableRiskScore.enableRiskScoreDescription": "この機能を有効化すると、このセクションで{riskEntity}リスクスコアにすばやくアクセスできます。モジュールを有効化した後、データの生成までに1時間かかる場合があります。", "xpack.securitySolution.enableRiskScore.upgradeRiskScore": "{riskEntity}リスクスコアをアップグレード", "xpack.securitySolution.endpoint.actions.unsupported.message": "現在のバージョンの{agentType}エージェントは、{command}をサポートしていません。この応答アクションを有効化するには、Fleet経由でElasticエージェントを最新バージョンにアップグレードしてください。", - "xpack.securitySolution.endpoint.details.policy.revisionNumber": "rev. {revNumber}", "xpack.securitySolution.endpoint.details.policyStatusValue": "{policyStatus, select, success {成功} warning {警告} failure {失敗} other {不明}}", "xpack.securitySolution.endpoint.fleetCustomExtension.artifactsSummaryError": "アーティファクト統計情報の取得中にエラーが発生しました:\"{error}\"", "xpack.securitySolution.endpoint.fleetCustomExtension.blocklistsSummary.error": "ブロックリスト統計情報の取得中にエラーが発生しました:\"{error}\"", @@ -32637,7 +32636,6 @@ "xpack.securitySolution.endpoint.hostIsolation.unisolate.successfulMessage": "ホスト{hostName}でのリリースは正常に送信されました", "xpack.securitySolution.endpoint.hostIsolation.unIsolateThisHost": "現在{hostName}は{isolated}です。このホストを{unisolate}しますか?", "xpack.securitySolution.endpoint.list.hostStatusValue": "{hostStatus, select, healthy {正常} unhealthy {異常} updating {更新中} offline {オフライン} inactive {無効} unenrolled {登録解除済み} other {異常}}", - "xpack.securitySolution.endpoint.list.policy.revisionNumber": "rev. {revNumber}", "xpack.securitySolution.endpoint.list.totalCount": "{totalItemCount, plural, other {# 個のエンドポイント}}を表示しています", "xpack.securitySolution.endpoint.list.totalCount.limited": "{totalItemCount, plural, other {# 個のエンドポイント}}の{limit}を表示しています", "xpack.securitySolution.endpoint.list.transformFailed.message": "現在、必須の変換{transformId}が失敗しています。通常、これは{transformsPage}で修正できます。ヘルプについては、{docsPage}をご覧ください", @@ -32707,7 +32705,6 @@ "xpack.securitySolution.endpoint.resolver.panel.relatedEventList.countByCategory": "{count} {category}", "xpack.securitySolution.endpoint.resolver.panel.relatedEventList.numberOfEvents": "{totalCount}件のイベント", "xpack.securitySolution.endpoint.resolver.relatedEventLimitTitle": "このリストには、{numberOfEntries} 件のプロセスイベントが含まれています。", - "xpack.securitySolution.endpointPolicyStatus.revisionNumber": "rev. {revNumber}", "xpack.securitySolution.endpointResponseActions.actionError.errorMessage": "次の{ errorCount, plural, other {件のエラー}}が発生しました:", "xpack.securitySolution.enrichment.noInvestigationEnrichment": "選択した期間内に追加の脅威情報が見つかりませんでした。別の時間枠、または{link}を試して、脅威の検出と照合のための脅威インテリジェンスを収集します。", "xpack.securitySolution.entityAnalytics.anomalies.moduleNotCompatibleTitle": "{incompatibleJobCount} {incompatibleJobCount, plural, other {件のジョブ}}が現在使用できません", @@ -35588,7 +35585,6 @@ "xpack.securitySolution.endpoint.policyList.onboardingSectionTwo.fromEndpointPage": "このページでは、Elastic Defendを実行している環境でホストを表示して管理できます。", "xpack.securitySolution.endpoint.policyList.onboardingSectionTwo.fromPolicyPage": "このページでは、Elastic Defendを実行している環境で、Elastic Defend統合ポリシーを表示して管理できます。", "xpack.securitySolution.endpoint.policyList.onboardingTitle": "Elastic Defendをはじめよう", - "xpack.securitySolution.endpoint.policyNotFound": "ポリシーが見つかりません。", "xpack.securitySolution.endpoint.policyResponse.backLinkTitle": "エンドポイント詳細", "xpack.securitySolution.endpoint.policyResponse.title": "ポリシー応答", "xpack.securitySolution.endpoint.protectionUpdates.automaticUpdates.enabled.toggleName": "自動更新を有効化", @@ -35725,7 +35721,6 @@ "xpack.securitySolution.endpointDetails.activityLog.logEntry.response.unisolationSuccessful": "エンドポイントが受信したホストリリースリクエスト", "xpack.securitySolution.endpointDetails.overview": "概要", "xpack.securitySolution.endpointDetails.responseActionsHistory": "対応アクション履歴", - "xpack.securitySolution.endpointPolicyStatus.tooltipTitleLabel": "ポリシーが適用されました", "xpack.securitySolution.endpointResponseActions.actionSubmitter.apiErrorDetails": "次のエラーが発生しました:", "xpack.securitySolution.endpointResponseActions.executeAction.successTitle": "コマンド実行が成功しました。", "xpack.securitySolution.endpointResponseActions.getFileAction.successTitle": "ファイルがホストから取得されました。", @@ -36806,7 +36801,6 @@ "xpack.securitySolution.osquery.action.permissionDenied": "パーミッションが拒否されました", "xpack.securitySolution.osquery.action.shortEmptyTitle": "Osqueryが使用できません", "xpack.securitySolution.osquery.action.unavailable": "Osqueryマネージャー統合がエージェントポリシーに追加されていません。ホストでクエリを実行するには、FleetでOsqueryマネージャー統合をエージェントポリシーに追加してください。", - "xpack.securitySolution.outOfDateLabel": "最新ではありません", "xpack.securitySolution.overview.auditBeatAuditTitle": "監査", "xpack.securitySolution.overview.auditBeatFimTitle": "File Integrityモジュール", "xpack.securitySolution.overview.auditBeatLoginTitle": "ログイン", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index f372694d38107..b2dd87a058945 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -32660,7 +32660,6 @@ "xpack.securitySolution.enableRiskScore.enableRiskScoreDescription": "一旦启用此功能,您将可以在此部分快速访问{riskEntity}风险分数。启用此模板后,可能需要一小时才能生成数据。", "xpack.securitySolution.enableRiskScore.upgradeRiskScore": "升级{riskEntity}风险分数", "xpack.securitySolution.endpoint.actions.unsupported.message": "当前版本的 {agentType} 代理不支持 {command}。通过 Fleet 将您的 Elastic 代理升级到最新版本以启用此响应操作。", - "xpack.securitySolution.endpoint.details.policy.revisionNumber": "修订版 {revNumber}", "xpack.securitySolution.endpoint.details.policyStatusValue": "{policyStatus, select, success {成功} warning {警告} failure {失败} other {未知}}", "xpack.securitySolution.endpoint.fleetCustomExtension.artifactsSummaryError": "尝试提取项目统计时出错:“{error}”", "xpack.securitySolution.endpoint.fleetCustomExtension.blocklistsSummary.error": "尝试提取阻止列表统计时出错:“{error}”", @@ -32680,7 +32679,6 @@ "xpack.securitySolution.endpoint.hostIsolation.unisolate.successfulMessage": "已成功提交主机 {hostName} 的释放", "xpack.securitySolution.endpoint.hostIsolation.unIsolateThisHost": "{hostName} 当前{isolated}。是否确定要{unisolate}此主机?", "xpack.securitySolution.endpoint.list.hostStatusValue": "{hostStatus, select, healthy {运行正常} unhealthy {运行不正常} updating {正在更新} offline {脱机} inactive {非活动} unenrolled {未注册} other {运行不正常}}", - "xpack.securitySolution.endpoint.list.policy.revisionNumber": "修订版 {revNumber}", "xpack.securitySolution.endpoint.list.totalCount": "正在显示 {totalItemCount, plural, other {# 个终端}}", "xpack.securitySolution.endpoint.list.totalCount.limited": "正在显示 {totalItemCount, plural, other {# 个终端}}中的 {limit} 个", "xpack.securitySolution.endpoint.list.transformFailed.message": "所需的转换 {transformId} 当前失败。多数时候,这可以通过 {transformsPage} 解决。要获取更多帮助,请访问{docsPage}", @@ -32751,7 +32749,6 @@ "xpack.securitySolution.endpoint.resolver.panel.relatedEventList.countByCategory": "{count} 个{category}", "xpack.securitySolution.endpoint.resolver.panel.relatedEventList.numberOfEvents": "{totalCount} 个事件", "xpack.securitySolution.endpoint.resolver.relatedEventLimitTitle": "此列表包括 {numberOfEntries} 个进程事件。", - "xpack.securitySolution.endpointPolicyStatus.revisionNumber": "修订版 {revNumber}", "xpack.securitySolution.endpointResponseActions.actionError.errorMessage": "遇到以下{ errorCount, plural, other {错误}}:", "xpack.securitySolution.enrichment.noInvestigationEnrichment": "在选定时间范围内未发现其他威胁情报。请尝试不同时间范围,或 {link} 以收集威胁情报用于威胁检测和匹配。", "xpack.securitySolution.entityAnalytics.anomalies.moduleNotCompatibleTitle": "{incompatibleJobCount} 个{incompatibleJobCount, plural, other {作业}}当前不可用", @@ -35631,7 +35628,6 @@ "xpack.securitySolution.endpoint.policyList.onboardingSectionTwo.fromEndpointPage": "从此页面,您将能够查看和管理环境中运行 Elastic Defend 的主机。", "xpack.securitySolution.endpoint.policyList.onboardingSectionTwo.fromPolicyPage": "从此页面,您将能够查看和管理运行 Elastic Defend 的环境中的 Elastic Defend 集成策略。", "xpack.securitySolution.endpoint.policyList.onboardingTitle": "开始使用 Elastic Defend", - "xpack.securitySolution.endpoint.policyNotFound": "未找到策略!", "xpack.securitySolution.endpoint.policyResponse.backLinkTitle": "终端详情", "xpack.securitySolution.endpoint.policyResponse.title": "策略响应", "xpack.securitySolution.endpoint.protectionUpdates.automaticUpdates.enabled.toggleName": "启用自动更新", @@ -35768,7 +35764,6 @@ "xpack.securitySolution.endpointDetails.activityLog.logEntry.response.unisolationSuccessful": "终端收到释放主机请求", "xpack.securitySolution.endpointDetails.overview": "概览", "xpack.securitySolution.endpointDetails.responseActionsHistory": "响应操作历史记录", - "xpack.securitySolution.endpointPolicyStatus.tooltipTitleLabel": "已应用策略", "xpack.securitySolution.endpointResponseActions.actionSubmitter.apiErrorDetails": "遇到以下错误:", "xpack.securitySolution.endpointResponseActions.executeAction.successTitle": "命令执行成功。", "xpack.securitySolution.endpointResponseActions.getFileAction.successTitle": "已从主机检索文件。", @@ -36849,7 +36844,6 @@ "xpack.securitySolution.osquery.action.permissionDenied": "权限被拒绝", "xpack.securitySolution.osquery.action.shortEmptyTitle": "Osquery 不可用", "xpack.securitySolution.osquery.action.unavailable": "Osquery 管理器集成未添加到代理策略。要在此主机上运行查询,请在 Fleet 中将 Osquery 管理器集成添加到代理策略。", - "xpack.securitySolution.outOfDateLabel": "过时", "xpack.securitySolution.overview.auditBeatAuditTitle": "审计", "xpack.securitySolution.overview.auditBeatFimTitle": "文件完整性模块", "xpack.securitySolution.overview.auditBeatLoginTitle": "登录", From 04d6c1d3d735cde74b9d3bc21ad208a800f44260 Mon Sep 17 00:00:00 2001 From: Cee Chen <549407+cee-chen@users.noreply.github.com> Date: Fri, 21 Jun 2024 09:10:58 -0700 Subject: [PATCH 19/33] Upgrade EUI to v95.1.0 (#186324) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `v95.0.0-backport.0` ⏩ `v95.1.0-backport.0` This PR primarily concerns converting multiple common/building block form control components to Emotion (text, number, and search fields). This means that custom CSS or direct `className` usage of these form controls **should be manually QA'd** to ensure they still look the same before visually, with no regressions. _[Questions? Please see our Kibana upgrade FAQ.](https://github.com/elastic/eui/blob/main/wiki/eui-team-processes/upgrading-kibana.md#faq-for-kibana-teams)_ --- ## [`v95.1.0`](https://github.com/elastic/eui/releases/v95.1.0) - Updated `EuiFormControlLayout` to automatically pass icon padding affordance down to child `input`s ([#7799](https://github.com/elastic/eui/pull/7799)) **Bug fixes** - Fixed broken focus/invalid styling on compressed `EuiDatePickerRange`s ([#7770](https://github.com/elastic/eui/pull/7770)) **CSS-in-JS conversions** - Converted `EuiFieldText` to Emotion ([#7770](https://github.com/elastic/eui/pull/7770)) - Updated the autofill colors of Chrome (and other webkit browsers) to better match EUI's light and dark mode ([#7776](https://github.com/elastic/eui/pull/7776)) - Converted `EuiFieldNumber` to Emotion ([#7802](https://github.com/elastic/eui/pull/7802)) - Converted `EuiFieldSearch` to Emotion ([#7802](https://github.com/elastic/eui/pull/7802)) - Converted `EuiFieldPassword` to Emotion ([#7802](https://github.com/elastic/eui/pull/7802)) - Converted `EuiTextArea` to Emotion ([#7812](https://github.com/elastic/eui/pull/7812)) - Converted `EuiSelect` to Emotion ([#7812](https://github.com/elastic/eui/pull/7812)) - Converted `EuiSuperSelect` to Emotion ([#7812](https://github.com/elastic/eui/pull/7812)) ## [`v95.1.0-backport.0`](https://github.com/elastic/eui/releases/v95.1.0-backport.0) **This is a backport release only intended for use by Kibana.** - Updated `EuiSteps` to support a new `titleSize="xxs"` style, which outputs the same title font size but smaller unnumbered step indicators ([#7813](https://github.com/elastic/eui/pull/7813)) - Updated `EuiStepsHorizontal` to support a new `size="xs"` style, which outputs smaller unnumbered step indicators ([#7813](https://github.com/elastic/eui/pull/7813)) - Updated `EuiStepNumber` to support new `titleSize="none"` which omits rendering step numbers, and will only render icons ([#7813](https://github.com/elastic/eui/pull/7813)) --- package.json | 2 +- .../assets/legacy_dark_theme.css | 6 +- .../assets/legacy_dark_theme.min.css | 2 +- .../assets/legacy_light_theme.css | 6 +- .../assets/legacy_light_theme.min.css | 2 +- .../__snapshots__/cron_editor.test.tsx.snap | 14646 ++++------------ .../cron_editor/cron_editor.test.tsx | 2 +- .../__snapshots__/index.test.tsx.snap | 6 + .../__snapshots__/list_header.test.tsx.snap | 6 +- .../__snapshots__/edit_modal.test.tsx.snap | 6 +- src/dev/license_checker/config.ts | 2 +- .../url/__snapshots__/url.test.tsx.snap | 7 +- .../__snapshots__/cron_editor.test.tsx.snap | 57 +- .../public/components/controls/size.test.tsx | 4 +- .../__snapshots__/settings.test.tsx.snap | 2 +- .../credential_item/credential_item.test.tsx | 3 +- .../source_config_fields.test.tsx | 6 +- .../__jest__/policy_table.test.tsx | 4 +- .../__jest__/components/index_table.test.js | 2 +- .../ingest_pipelines_list.test.ts | 2 +- .../__snapshots__/cert_search.test.tsx.snap | 3 +- .../summarization_model.tsx | 2 +- .../public/components/token_field.tsx | 6 +- .../sourcerer/components/index.test.tsx | 2 +- .../timeline/search_super_select/index.tsx | 39 +- .../action_notify_when.tsx | 3 +- .../action_type_form.test.tsx | 29 +- .../helpers/watch_list_page.helpers.ts | 2 +- .../cypress/screens/integrations.ts | 2 +- yarn.lock | 8 +- 30 files changed, 3610 insertions(+), 11259 deletions(-) diff --git a/package.json b/package.json index ca627a150f9b1..e800bdf76effb 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,7 @@ "@elastic/ecs": "^8.11.1", "@elastic/elasticsearch": "^8.13.1", "@elastic/ems-client": "8.5.1", - "@elastic/eui": "95.0.0-backport.0", + "@elastic/eui": "95.1.0-backport.0", "@elastic/filesaver": "1.1.2", "@elastic/node-crypto": "1.2.1", "@elastic/numeral": "^2.5.1", diff --git a/packages/core/apps/core-apps-server-internal/assets/legacy_dark_theme.css b/packages/core/apps/core-apps-server-internal/assets/legacy_dark_theme.css index f5891b361bc43..3c790ec67216e 100644 --- a/packages/core/apps/core-apps-server-internal/assets/legacy_dark_theme.css +++ b/packages/core/apps/core-apps-server-internal/assets/legacy_dark_theme.css @@ -4324,14 +4324,12 @@ table .info a, .table-bordered > tfoot > tr > td { border: 1px solid #343741; } -.form-control, -input { +.form-control { border-width: 1px; -webkit-box-shadow: none; box-shadow: none; } -.form-control:focus, -input:focus { +.form-control:focus { -webkit-box-shadow: none; box-shadow: none; } diff --git a/packages/core/apps/core-apps-server-internal/assets/legacy_dark_theme.min.css b/packages/core/apps/core-apps-server-internal/assets/legacy_dark_theme.min.css index 052b0ee255004..eeb82303abd08 100644 --- a/packages/core/apps/core-apps-server-internal/assets/legacy_dark_theme.min.css +++ b/packages/core/apps/core-apps-server-internal/assets/legacy_dark_theme.min.css @@ -2,4 +2,4 @@ * Bootstrap v3.3.6 (http://getbootstrap.com) * Copyright 2011-2015 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */.container{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{min-height:1px;padding-left:15px;padding-right:15px;position:relative}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}.table{font-size:14px;margin-bottom:20px;max-width:100%;width:100%}.table thead{font-size:12px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{border-top:1px solid #343741;line-height:1.42857143;padding:8px;vertical-align:top}.table>thead>tr>th{border-bottom:1px solid #343741;vertical-align:bottom}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #343741}.table .table{background-color:#1d1e24}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{font-size:12px;padding:5px}.table-bordered{border:1px solid #343741}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-hover>tbody>tr:hover,.table-striped>tbody>tr:nth-of-type(odd){background-color:#343741}table col[class*=col-]{display:table-column;float:none;position:static}table td[class*=col-],table th[class*=col-]{display:table-cell;float:none;position:static}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#343741}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#292b33}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#7de2d1}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#68ddca}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#1ba9f5}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#0a9dec}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#ff977a}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#ff8361}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f66}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ff4c4c}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #343741;margin-bottom:15px;overflow-y:hidden;width:100%}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}.form-control{background-color:#1a1a20;background-image:none;border:1px solid #343741;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);color:#f5f7fa;display:block;font-size:14px;height:32px;line-height:1.42857143;padding:5px 15px;-webkit-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-o-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}.form-control:focus{border-color:#1ba9f5;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1ba9f599;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1ba9f599;outline:0}.form-control::-moz-placeholder{color:#535966;opacity:1}.form-control:-ms-input-placeholder{color:#535966}.form-control::-webkit-input-placeholder{color:#535966}.form-control::-ms-expand{background-color:initial;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#343741;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}.form-group:not(:empty){margin-bottom:15px}.checkbox,.radio{display:block;margin-bottom:10px;margin-top:10px;position:relative}.checkbox label,.radio label{cursor:pointer;font-weight:400;margin-bottom:0;min-height:20px;padding-left:20px}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{margin-left:-20px;margin-top:4px\9;position:absolute}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{cursor:pointer;display:inline-block;font-weight:400;margin-bottom:0;padding-left:20px;position:relative;vertical-align:middle}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-left:10px;margin-top:0}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline{cursor:not-allowed}.form-control-static{margin-bottom:0;min-height:34px;padding-bottom:6px;padding-top:6px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{border-radius:4px;font-size:12px;height:32px;line-height:1.5;padding:6px 9px}select.input-sm{height:32px;line-height:32px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{border-radius:4px;font-size:12px;height:32px;line-height:1.5;padding:6px 9px}.form-group-sm select.form-control{height:32px;line-height:32px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{font-size:12px;height:32px;line-height:1.5;min-height:32px;padding:7px 9px}.input-lg{border-radius:4px;font-size:18px;height:62px;line-height:1.3333333;padding:18px 27px}select.input-lg{height:62px;line-height:62px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{border-radius:4px;font-size:18px;height:62px;line-height:1.3333333;padding:18px 27px}.form-group-lg select.form-control{height:62px;line-height:62px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{font-size:18px;height:62px;line-height:1.3333333;min-height:38px;padding:19px 27px}.has-feedback{position:relative}.has-feedback .form-control{padding-right:40px}.form-control-feedback{display:block;height:32px;line-height:32px;pointer-events:none;position:absolute;right:0;text-align:center;top:0;width:32px;z-index:2}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{height:62px;line-height:62px;width:62px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{height:32px;line-height:32px;width:32px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#1d1e24}.has-success .form-control{border-color:#1d1e24;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#060608;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #4b4d5c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #4b4d5c}.has-success .input-group-addon{background-color:#7de2d1;border-color:#1d1e24;color:#1d1e24}.has-success .form-control-feedback,.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#1d1e24}.has-warning .form-control{border-color:#1d1e24;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#060608;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #4b4d5c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #4b4d5c}.has-warning .input-group-addon{background-color:#ff977a;border-color:#1d1e24;color:#1d1e24}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label,.has-warning .form-control-feedback{color:#1d1e24}.has-error .form-control{border-color:#1d1e24;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#060608;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #4b4d5c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #4b4d5c}.has-error .input-group-addon{background-color:#f66;border-color:#1d1e24;color:#1d1e24}.has-error .form-control-feedback{color:#1d1e24}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{color:#fff;display:block;margin-bottom:10px;margin-top:5px}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;vertical-align:middle;width:auto}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-bottom:0;margin-top:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{margin-left:0;position:relative}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-bottom:0;margin-top:0;padding-top:6px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:26px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{margin-bottom:0;padding-top:6px;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{font-size:18px;padding-top:19px}.form-horizontal .form-group-sm .control-label{font-size:12px;padding-top:7px}}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-muted{color:#3e434d}.text-primary{color:#f5f7fa}a.text-primary:focus,a.text-primary:hover{color:#d3dce9}.text-success{color:#1d1e24}a.text-success:focus,a.text-success:hover{color:#060608}.text-info{color:#1d1e24}a.text-info:focus,a.text-info:hover{color:#060608}.text-warning{color:#1d1e24}a.text-warning:focus,a.text-warning:hover{color:#060608}.text-danger{color:#1d1e24}a.text-danger:focus,a.text-danger:hover{color:#060608}.bg-info{background-color:#1ba9f5}a.bg-info:focus,a.bg-info:hover{background-color:#098dd4}.list-unstyled{list-style:none;padding-left:0}@media (min-width:0){.dl-horizontal dt{clear:left;float:left;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap;width:160px}.dl-horizontal dd{margin-left:180px}}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;position:relative;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-timing-function:ease;transition-timing-function:ease}.btn{background-image:none;border:1px solid #0000;border-radius:4px;cursor:pointer;display:inline-block;font-size:14px;font-weight:400;line-height:1.42857143;margin-bottom:0;padding:5px 15px;text-align:center;touch-action:manipulation;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{box-shadow:0 0 0 1px #fff,0 0 0 2px #0079a5}.btn.focus,.btn:focus,.btn:hover{color:#1d1e24;text-decoration:none}.btn.active,.btn:active{background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125);outline:0}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{-webkit-box-shadow:none;box-shadow:none;cursor:not-allowed;filter:alpha(opacity=65);opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{background-color:#1ba9f5;border-color:#1ba9f5;color:#1d1e24}.btn-default.focus,.btn-default:focus{background-color:#098dd4;border-color:#065c8a;color:#1d1e24}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.dropdown-toggle.btn-default{background-color:#098dd4;border-color:#0987ca;color:#1d1e24}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{background-color:#0876b2;border-color:#065c8a;color:#1d1e24}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#1ba9f5;border-color:#1ba9f5}.btn-default .badge{background-color:#1d1e24;color:#1ba9f5}.btn-primary{background-color:#1ba9f5;border-color:#1ba9f5;color:#1d1e24}.btn-primary.focus,.btn-primary:focus{background-color:#098dd4;border-color:#065c8a;color:#1d1e24}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{background-color:#098dd4;border-color:#0987ca;color:#1d1e24}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{background-color:#0876b2;border-color:#065c8a;color:#1d1e24}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#1ba9f5;border-color:#1ba9f5}.btn-primary .badge{background-color:#1d1e24;color:#1ba9f5}.btn-xs{border-radius:4px;font-size:12px;line-height:1.5;padding:1px 5px}.navbar{border:1px solid #0000;margin-bottom:0;min-height:45px;position:relative}@media (min-width:0){.navbar{border-radius:4px}.navbar-header{float:left}}.navbar-collapse{-webkit-overflow-scrolling:touch;border-top:1px solid #0000;box-shadow:inset 0 1px 0 #ffffff1a;overflow-x:visible;padding-left:10px;padding-right:10px}.navbar-collapse.in{overflow-y:auto}@media (min-width:0){.navbar-collapse{border-top:0;box-shadow:none;width:auto}.navbar-collapse.collapse{display:block!important;height:auto!important;overflow:visible!important;padding-bottom:0}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-left:-10px;margin-right:-10px}@media (min-width:0){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-left:0;margin-right:0}}.navbar-fixed-bottom,.navbar-fixed-top{left:0;position:fixed;right:0;z-index:1050}@media (min-width:0){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{border-width:0 0 1px;top:0}.navbar-fixed-bottom{border-width:1px 0 0;bottom:0;margin-bottom:0}.navbar-brand{float:left;font-size:18px;height:45px;line-height:20px;padding:12.5px 10px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:0){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-10px}}.navbar-toggle{background-color:initial;background-image:none;border:1px solid #0000;border-radius:4px;float:right;margin-bottom:5.5px;margin-right:10px;margin-top:5.5px;padding:9px 10px;position:relative}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{border-radius:1px;display:block;height:2px;width:22px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:0){.navbar-toggle{display:none}}.navbar-nav{margin:6.25px -10px}.navbar-nav>li>a{line-height:20px;padding-bottom:10px;padding-top:10px}@media (max-width:-1){.navbar-nav .open .dropdown-menu{background-color:initial;border:0;box-shadow:none;float:none;margin-top:0;position:static;width:auto}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:0){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-bottom:12.5px;padding-top:12.5px}}.navbar-form{border-bottom:1px solid #0000;border-top:1px solid #0000;-webkit-box-shadow:inset 0 1px 0 #ffffff1a,0 1px 0 #ffffff1a;box-shadow:inset 0 1px 0 #ffffff1a,0 1px 0 #ffffff1a;margin:6.5px -10px;padding:10px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;vertical-align:middle;width:auto}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-bottom:0;margin-top:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{margin-left:0;position:relative}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:-1){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:0){.navbar-form{border:0;-webkit-box-shadow:none;box-shadow:none;margin-left:0;margin-right:0;padding-bottom:0;padding-top:0;width:auto}}.navbar-nav>li>.dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:4px;border-top-right-radius:4px;margin-bottom:0}.navbar-text{margin-bottom:12.5px;margin-top:12.5px}@media (min-width:0){.navbar-text{float:left;margin-left:10px;margin-right:10px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-10px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#000;border-color:#0000}.navbar-default .navbar-brand{color:#d4dae5}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{background-color:initial;color:#d4dae5}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#d4dae5}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{background-color:initial;color:#d4dae5}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{background-color:initial;color:#f5f7fa}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{background-color:initial;color:#d4dae5}.navbar-default .navbar-toggle{border-color:#000}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#000}.navbar-default .navbar-toggle .icon-bar{background-color:#1d1e24}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#0000}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:initial;color:#f5f7fa}@media (max-width:-1){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#d4dae5}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{background-color:initial;color:#d4dae5}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:initial;color:#f5f7fa}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{background-color:initial;color:#d4dae5}}.navbar-default .navbar-link,.navbar-default .navbar-link:hover{color:#d4dae5}.navbar-inverse{background-color:#f5f7fa;border-color:#d3dce9}.navbar-inverse .navbar-brand{color:#1d1e24}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{background-color:#fff;color:#1d1e24}.navbar-inverse .navbar-text{color:#1d1e24}.navbar-inverse .navbar-nav>li>a{color:#343741}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{background-color:#fff;color:#1d1e24}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{background-color:#d4dae5;color:#1d1e24}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{background-color:initial;color:#3e434d}.navbar-inverse .navbar-toggle{border-color:#d3dce9}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#d3dce9}.navbar-inverse .navbar-toggle .icon-bar{background-color:#1d1e24}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#dde4ee}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#d4dae5;color:#1d1e24}@media (max-width:-1){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#d3dce9}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#d3dce9}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#343741}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{background-color:#fff;color:#1d1e24}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#d4dae5;color:#1d1e24}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{background-color:initial;color:#3e434d}}.navbar-inverse .navbar-link{color:#343741}.navbar-inverse .navbar-link:hover{color:#1d1e24}.close{color:#fff;filter:alpha(opacity=20);float:right;font-size:21px;font-weight:700;line-height:1;opacity:.2;text-shadow:none}.close:focus,.close:hover{color:#fff;cursor:pointer;filter:alpha(opacity=50);opacity:.5;text-decoration:none}button.close{-webkit-appearance:none;background:#0000;border:0;cursor:pointer;padding:0}.modal,.modal-open{overflow:hidden}.modal{-webkit-overflow-scrolling:touch;bottom:0;display:none;left:0;outline:0;position:fixed;right:0;top:0;z-index:1070}.modal.fade .modal-dialog{-webkit-transform:translateY(-25%);-ms-transform:translateY(-25%);-o-transform:translateY(-25%);transform:translateY(-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0);-ms-transform:translate(0);-o-transform:translate(0);transform:translate(0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{margin:10px;position:relative;width:auto}.modal-content{background-clip:padding-box;background-color:#1d1e24;border:1px solid #0003;border-radius:4px;-webkit-box-shadow:0 3px 9px #00000080;box-shadow:0 3px 9px #00000080;outline:0;position:relative}.modal-backdrop{background-color:#fff;bottom:0;left:0;position:fixed;right:0;top:0;z-index:1060}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{border-bottom:1px solid #e5e5e5;padding:15px}.modal-header .close{margin-top:-2px}.modal-title{line-height:1.42857143;margin:0}.modal-body{padding:15px;position:relative}.modal-footer{border-top:1px solid #e5e5e5;padding:15px;text-align:right}.modal-scrollbar-measure{height:50px;overflow:scroll;position:absolute;top:-9999px;width:50px}@media (min-width:768px){.modal-dialog{margin:30px auto;width:600px}.modal-content{-webkit-box-shadow:0 5px 15px #00000080;box-shadow:0 5px 15px #00000080}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}@-webkit-keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}.progress{background-color:#2d3039;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px #0000001a;box-shadow:inset 0 1px 2px #0000001a;height:20px;margin-bottom:20px;overflow:hidden}.progress-bar{background-color:#54b399;color:#1d1e24;float:left;font-size:12px;height:100%;line-height:20px;text-align:center;-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease;width:0}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-image:-o-linear-gradient(45deg,#ffffff26 25%,#0000 25%,#0000 50%,#ffffff26 50%,#ffffff26 75%,#0000 75%,#0000);background-image:linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#7de2d1}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-image:-o-linear-gradient(45deg,#ffffff26 25%,#0000 25%,#0000 50%,#ffffff26 50%,#ffffff26 75%,#0000 75%,#0000);background-image:linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000)}.progress-bar-info{background-color:#1ba9f5}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-image:-o-linear-gradient(45deg,#ffffff26 25%,#0000 25%,#0000 50%,#ffffff26 50%,#ffffff26 75%,#0000 75%,#0000);background-image:linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000)}.progress-bar-warning{background-color:#ff977a}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-image:-o-linear-gradient(45deg,#ffffff26 25%,#0000 25%,#0000 50%,#ffffff26 50%,#ffffff26 75%,#0000 75%,#0000);background-image:linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000)}.progress-bar-danger{background-color:#f66}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-image:-o-linear-gradient(45deg,#ffffff26 25%,#0000 25%,#0000 50%,#ffffff26 50%,#ffffff26 75%,#0000 75%,#0000);background-image:linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000)}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{background-color:#1d1e24;border:1px solid #343741;display:block;margin-bottom:-1px;padding:10px 15px;position:relative}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;margin-bottom:0}.list-group-item--noBorder{border-top:0}a.list-group-item,button.list-group-item{color:#d4dae5}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#f5f7fa}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{background-color:#25262e;color:#d4dae5;text-decoration:none}button.list-group-item{text-align:left;width:100%}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#343741;color:#3e434d;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#3e434d}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{background-color:#f5f7fa;border-color:#f5f7fa;color:#f5f7fa;z-index:2}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#fff}.list-group-item-success{background-color:#7de2d1;color:#1d1e24}a.list-group-item-success,button.list-group-item-success{color:#1d1e24}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{background-color:#68ddca;color:#1d1e24}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{background-color:#1d1e24;border-color:#1d1e24;color:#fff}.list-group-item-info{background-color:#1ba9f5;color:#1d1e24}a.list-group-item-info,button.list-group-item-info{color:#1d1e24}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{background-color:#0a9dec;color:#1d1e24}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{background-color:#1d1e24;border-color:#1d1e24;color:#fff}.list-group-item-warning{background-color:#ff977a;color:#1d1e24}a.list-group-item-warning,button.list-group-item-warning{color:#1d1e24}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{background-color:#ff8361;color:#1d1e24}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{background-color:#1d1e24;border-color:#1d1e24;color:#fff}.list-group-item-danger{background-color:#f66;color:#1d1e24}a.list-group-item-danger,button.list-group-item-danger{color:#1d1e24}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{background-color:#ff4c4c;color:#1d1e24}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{background-color:#1d1e24;border-color:#1d1e24;color:#fff}.list-group-item-heading{margin-bottom:5px;margin-top:0}.list-group-item-text{line-height:1.3;margin-bottom:0}.nav{list-style:none;margin-bottom:0;padding-left:0}.nav>li,.nav>li>a{display:block;position:relative}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{background-color:#343741;text-decoration:none}.nav>li.disabled>a{color:#3e434d}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{background-color:initial;color:#3e434d;cursor:not-allowed;text-decoration:none}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#343741;border-color:#1ba9f5}.nav .nav-divider{background-color:#e5e5e5;height:1px;margin:9px 0;overflow:hidden}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #343741}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{border:1px solid #0000;border-radius:4px 4px 0 0;line-height:1.42857143;margin-right:2px}.nav-tabs>li>a:hover{background-color:#1d1e24;border-color:#343741}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{background-color:#1d1e24;border:1px solid #343741;border-bottom-color:#0000;color:#f5f7fa;cursor:default}.nav-tabs.nav-justified{border-bottom:0;width:100%}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{left:auto;top:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{border-radius:4px;margin-right:0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #1d1e24}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #1d1e24;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#1d1e24}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{background-color:#1ba9f5;color:#1d1e24}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-left:0;margin-top:2px}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{left:auto;top:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{border-radius:4px;margin-right:0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #1d1e24}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #1d1e24;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#1d1e24}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:-1px}.alert{border:1px solid #0000;border-radius:4px;margin-bottom:20px;padding:15px}.alert h4{color:inherit;margin-top:0}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{color:inherit;position:relative;right:-21px;top:-2px}.alert-success{background-color:#7de2d1;border-color:#53d9c2;color:#1d1e24}.alert-success hr{border-top-color:#3ed4bb}.alert-success .alert-link{color:#060608}.alert-info{background-color:#1ba9f5;border-color:#098dd4;color:#1d1e24}.alert-info hr{border-top-color:#087dbb}.alert-info .alert-link{color:#060608}.alert-warning{background-color:#ff977a;border-color:#ff6f47;color:#1d1e24}.alert-warning hr{border-top-color:#ff5b2e}.alert-warning .alert-link{color:#060608}.alert-danger{background-color:#f66;border-color:#f33;color:#1d1e24}.alert-danger hr{border-top-color:#ff1919}.alert-danger .alert-link{color:#060608}.bsTooltip{word-wrap:normal;display:block;filter:alpha(opacity=0);font-family:Open Sans,Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.42857143;opacity:0;position:absolute;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:1040}.bsTooltip.in{filter:alpha(opacity=80);opacity:.8}.bsTooltip.top{margin-top:-3px;padding:5px 0}.bsTooltip.right{margin-left:3px;padding:0 5px}.bsTooltip.bottom{margin-top:3px;padding:5px 0}.bsTooltip.left{margin-left:-3px;padding:0 5px}.bsTooltip-inner{background-color:#000;border-radius:4px;color:#fff;max-width:200px;padding:3px 8px;text-align:center}.bsTooltip-arrow{border-color:#0000;border-style:solid;height:0;position:absolute;width:0}.bsTooltip.top .bsTooltip-arrow{border-top-color:#000;border-width:5px 5px 0;bottom:0;left:50%;margin-left:-5px}.bsTooltip.top-left .bsTooltip-arrow{border-top-color:#000;border-width:5px 5px 0;bottom:0;margin-bottom:-5px;right:5px}.bsTooltip.top-right .bsTooltip-arrow{border-top-color:#000;border-width:5px 5px 0;bottom:0;left:5px;margin-bottom:-5px}.bsTooltip.right .bsTooltip-arrow{border-right-color:#000;border-width:5px 5px 5px 0;left:0;margin-top:-5px;top:50%}.bsTooltip.left .bsTooltip-arrow{border-left-color:#000;border-width:5px 0 5px 5px;margin-top:-5px;right:0;top:50%}.bsTooltip.bottom .bsTooltip-arrow{border-bottom-color:#000;border-width:0 5px 5px;left:50%;margin-left:-5px;top:0}.bsTooltip.bottom-left .bsTooltip-arrow{border-bottom-color:#000;border-width:0 5px 5px;margin-top:-5px;right:5px;top:0}.bsTooltip.bottom-right .bsTooltip-arrow{border-bottom-color:#000;border-width:0 5px 5px;left:5px;margin-top:-5px;top:0}.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}.caret{border-left:4px solid #0000;border-right:4px solid #0000;border-top:4px dashed;border-top:4px solid\9;display:inline-block;height:0;margin-left:2px;vertical-align:middle;width:0}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{background-clip:padding-box;background-color:#1d1e24;border:1px solid #343741;border-radius:4px;box-shadow:0 4px 8px 0 #0000001a;display:none;float:left;font-size:14px;left:0;list-style:none;margin:2px 0 0;min-width:160px;padding:5px 0;position:absolute;text-align:left;top:100%;z-index:1000}.dropdown-menu.pull-right{left:auto;right:0}.dropdown-menu .divider{background-color:#343741;height:1px;margin:9px 0;overflow:hidden}.dropdown-menu>li>a,.dropdown-menu>li>button{clear:both;color:#ababab;display:block;font-weight:400;line-height:1.42857143;padding:3px 20px;white-space:nowrap}.dropdown-menu>li>button{appearance:none;background:none;border:none;text-align:left;width:100%}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover,.dropdown-menu>li>button:focus,.dropdown-menu>li>button:hover{background-color:#f5f7fa;color:#1d1e24;text-decoration:none}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>button,.dropdown-menu>.active>button:focus,.dropdown-menu>.active>button:hover{background-color:#f5f7fa;color:#1d1e24;outline:0;text-decoration:none}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#535966}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{background-color:initial;background-image:none;cursor:not-allowed;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);text-decoration:none}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{color:#535966;display:block;font-size:12px;line-height:1.42857143;padding:3px 20px;white-space:nowrap}.dropdown-backdrop{bottom:0;left:0;position:fixed;right:0;top:0;z-index:990}.pull-right>.dropdown-menu{left:auto;right:0}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-bottom:4px dashed;border-bottom:4px solid\9;border-top:0;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{bottom:100%;margin-bottom:2px;top:auto}@media (min-width:0){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.input-group{border-collapse:initial;display:table;position:relative}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{float:left;margin-bottom:0;position:relative;width:100%;z-index:2}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon{border-radius:4px;font-size:18px;height:62px;line-height:1.3333333;padding:18px 27px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon{height:62px;line-height:62px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon{border-radius:4px;font-size:12px;height:32px;line-height:1.5;padding:6px 9px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon{height:32px;line-height:32px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon{height:auto}.input-group .form-control,.input-group-addon{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child){border-radius:0}.input-group-addon{background-color:#343741;border:1px solid #343741;border-radius:4px;color:#f5f7fa;font-size:14px;font-weight:400;line-height:1;padding:5px 15px;text-align:center;vertical-align:middle;white-space:nowrap;width:1%}.input-group-addon.input-sm{border-radius:4px;font-size:12px;padding:6px 9px}.input-group-addon.input-lg{border-radius:4px;font-size:18px;padding:18px 27px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.pagination{border-radius:4px;display:inline-block;margin:20px 0;padding-left:0}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{background-color:initial;border:1px solid #0000;color:#1ba9f5;float:left;line-height:1.42857143;margin-left:-1px;padding:5px 15px;position:relative;text-decoration:none}.pagination>li:first-child>a,.pagination>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px;margin-left:0}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{background-color:#0000;border-color:#0000;color:#1ba9f5;z-index:2}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{background-color:#0000;border-color:#0000;color:#f5f7fa;cursor:default;z-index:3}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{background-color:#26262600;border-color:#0000;color:#f5f7fa;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{font-size:18px;line-height:1.3333333;padding:18px 27px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination-sm>li>a,.pagination-sm>li>span{font-size:12px;line-height:1.5;padding:6px 9px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pager{list-style:none;margin:20px 0;padding-left:0;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{background-color:initial;border:1px solid #0000;border-radius:0;display:inline-block;padding:5px 14px}.pager li>a:focus,.pager li>a:hover{background-color:#0000;text-decoration:none}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{background-color:initial;color:#1d1e24;cursor:not-allowed}.label{border-radius:.25em;color:#1d1e24;display:inline;font-size:75%;font-weight:700;line-height:1;padding:.2em .6em .3em;text-align:center;vertical-align:initial;white-space:nowrap}a.label:focus,a.label:hover{color:#1d1e24;cursor:pointer;text-decoration:none}.label:empty{display:none}.label-default{background-color:#1ba9f5}.label-default[href]:focus,.label-default[href]:hover{background-color:#098dd4}.label-primary{background-color:#f5f7fa}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#d3dce9}.label-success{background-color:#7de2d1}.label-success[href]:focus,.label-success[href]:hover{background-color:#53d9c2}.label-info{background-color:#1ba9f5}.label-info[href]:focus,.label-info[href]:hover{background-color:#098dd4}.label-warning{background-color:#ff977a}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ff6f47}.label-danger{background-color:#f66}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#f33}.panel{background-color:#1d1e24;border:1px solid #0000;border-radius:4px;-webkit-box-shadow:0 1px 1px #0000000d;box-shadow:0 1px 1px #0000000d;margin-bottom:20px}.panel-body{padding:15px}.panel-heading{border-bottom:1px solid #0000;border-top-left-radius:3px;border-top-right-radius:3px;padding:10px 15px}.panel-heading>.dropdown .dropdown-toggle,.panel-title{color:inherit}.panel-title{font-size:16px;margin-bottom:0;margin-top:0}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{background-color:#25262e;border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-top:1px solid #343741;padding:10px 15px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-radius:0;border-width:1px 0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #343741}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{border-radius:4px;margin-bottom:0}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #343741}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #343741}.panel-default{border-color:#343741}.panel-default>.panel-heading{background-color:#25262e;border-color:#343741;color:#ababab}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#343741}.panel-default>.panel-heading .badge{background-color:#ababab;color:#25262e}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#343741}.panel-primary{border-color:#f5f7fa}.panel-primary>.panel-heading{background-color:#f5f7fa;border-color:#f5f7fa;color:#1d1e24}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#f5f7fa}.panel-primary>.panel-heading .badge{background-color:#1d1e24;color:#f5f7fa}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#f5f7fa}.panel-success{border-color:#53d9c2}.panel-success>.panel-heading{background-color:#7de2d1;border-color:#53d9c2;color:#1d1e24}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#53d9c2}.panel-success>.panel-heading .badge{background-color:#1d1e24;color:#7de2d1}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#53d9c2}.panel-info{border-color:#098dd4}.panel-info>.panel-heading{background-color:#1ba9f5;border-color:#098dd4;color:#1d1e24}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#098dd4}.panel-info>.panel-heading .badge{background-color:#1d1e24;color:#1ba9f5}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#098dd4}.panel-warning{border-color:#ff6f47}.panel-warning>.panel-heading{background-color:#ff977a;border-color:#ff6f47;color:#1d1e24}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ff6f47}.panel-warning>.panel-heading .badge{background-color:#1d1e24;color:#ff977a}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ff6f47}.panel-danger{border-color:#f33}.panel-danger>.panel-heading{background-color:#f66;border-color:#f33;color:#1d1e24}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#f33}.panel-danger>.panel-heading .badge{background-color:#1d1e24;color:#f66}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#f33}.popover{word-wrap:normal;background-clip:padding-box;background-color:#1d1e24;border:1px solid #343741;border-radius:4px;box-shadow:0 4px 8px 0 #0000001a;display:none;font-family:Open Sans,Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;left:0;letter-spacing:normal;line-break:auto;line-height:1.42857143;max-width:276px;padding:1px;position:absolute;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;top:0;white-space:normal;word-break:normal;word-spacing:normal;z-index:1010}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{background-color:#16171c;border-bottom:1px solid #0b0b0d;border-radius:3px 3px 0 0;font-size:14px;margin:0;padding:8px 14px}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{border-color:#0000;border-style:solid;display:block;height:0;position:absolute;width:0}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{border-bottom-width:0;border-top-color:#343741;bottom:-11px;left:50%;margin-left:-11px}.popover.top>.arrow:after{border-bottom-width:0;border-top-color:#1d1e24;bottom:1px;content:" ";margin-left:-10px}.popover.right>.arrow{border-left-width:0;border-right-color:#343741;left:-11px;margin-top:-11px;top:50%}.popover.right>.arrow:after{border-left-width:0;border-right-color:#1d1e24;bottom:-10px;content:" ";left:1px}.popover.bottom>.arrow{border-bottom-color:#343741;border-top-width:0;left:50%;margin-left:-11px;top:-11px}.popover.bottom>.arrow:after{border-bottom-color:#1d1e24;border-top-width:0;content:" ";margin-left:-10px;top:1px}.popover.left>.arrow{border-left-color:#343741;border-right-width:0;margin-top:-11px;right:-11px;top:50%}.popover.left>.arrow:after{border-left-color:#1d1e24;border-right-width:0;bottom:-10px;content:" ";right:1px}.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{content:" ";display:table}.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{background-color:initial;border:0;color:#0000;font:0/0 a;text-shadow:none}.hidden{display:none!important}.affix{position:fixed}.navbar>.container-fluid>.navbar-form:not(.pull-right):first-child,.navbar>.container-fluid>.navbar-nav:not(.pull-right):first-child{margin-left:-15px;margin-top:4px}.navbar{border-width:0}.navbar-btn-link{border-radius:0;margin:0}@media (max-width:768px){.navbar-btn-link{text-align:left;width:100%}}.navbar-default .badge{background-color:#1d1e24;color:#000}.navbar-inverse .kbnGlobalNav__logoBrand{background-color:#fff;height:45px;width:252px}.navbar-inverse .kbnGlobalNav__smallLogoBrand{background-color:#fff;height:45px;width:45px}.navbar-inverse .badge{background-color:#1d1e24;color:#fff}.navbar-brand{cursor:default;font-size:1.8em;user-select:none}.navbar-nav{font-size:12px}.navbar-nav>.active>a{background-color:initial;border-bottom-color:#ababab}.navbar-toggle{margin-top:4px}.text-primary,.text-primary:hover{color:#f5f7fa}.text-success,.text-success:hover{color:#7de2d1}.text-danger,.text-danger:hover{color:#f66}.text-warning,.text-warning:hover{color:#ff977a}.text-info,.text-info:hover{color:#1ba9f5}.table .danger,.table .danger a,.table .info,.table .info a,.table .success,.table .success a,.table .warning,.table .warning a,table .danger,table .danger a,table .info,table .info a,table .success,table .success a,table .warning,table .warning a{color:#1d1e24}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #343741}.form-control,input{border-width:1px}.form-control,.form-control:focus,input,input:focus{-webkit-box-shadow:none;box-shadow:none}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline{color:#ff977a}.has-warning .form-control,.has-warning .form-control:focus{border:1px solid #ff977a}.has-warning .input-group-addon{border-color:#ff977a}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline{color:#f66}.has-error .form-control,.has-error .form-control:focus{border:1px solid #f66}.has-error .input-group-addon{border-color:#f66}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline{color:#7de2d1}.has-success .form-control,.has-success .form-control:focus{border:solid #7de2d1}.has-success .input-group-addon{border-color:#7de2d1}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{border-color:#0000}.pager a,.pager a:hover{color:#1d1e24}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{background-color:#26262600}.panel{border-radius:0;-webkit-box-shadow:0 0 0 #0000;box-shadow:0 0 0 #0000}.progress{-webkit-box-shadow:none;box-shadow:none}.progress .progress-bar{font-size:10px;line-height:10px}.well{-webkit-box-shadow:none;box-shadow:none} \ No newline at end of file + */.container{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{min-height:1px;padding-left:15px;padding-right:15px;position:relative}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}.table{font-size:14px;margin-bottom:20px;max-width:100%;width:100%}.table thead{font-size:12px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{border-top:1px solid #343741;line-height:1.42857143;padding:8px;vertical-align:top}.table>thead>tr>th{border-bottom:1px solid #343741;vertical-align:bottom}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #343741}.table .table{background-color:#1d1e24}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{font-size:12px;padding:5px}.table-bordered{border:1px solid #343741}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-hover>tbody>tr:hover,.table-striped>tbody>tr:nth-of-type(odd){background-color:#343741}table col[class*=col-]{display:table-column;float:none;position:static}table td[class*=col-],table th[class*=col-]{display:table-cell;float:none;position:static}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#343741}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#292b33}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#7de2d1}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#68ddca}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#1ba9f5}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#0a9dec}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#ff977a}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#ff8361}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f66}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ff4c4c}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #343741;margin-bottom:15px;overflow-y:hidden;width:100%}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}.form-control{background-color:#1a1a20;background-image:none;border:1px solid #343741;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);color:#f5f7fa;display:block;font-size:14px;height:32px;line-height:1.42857143;padding:5px 15px;-webkit-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-o-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}.form-control:focus{border-color:#1ba9f5;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1ba9f599;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #1ba9f599;outline:0}.form-control::-moz-placeholder{color:#535966;opacity:1}.form-control:-ms-input-placeholder{color:#535966}.form-control::-webkit-input-placeholder{color:#535966}.form-control::-ms-expand{background-color:initial;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#343741;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}.form-group:not(:empty){margin-bottom:15px}.checkbox,.radio{display:block;margin-bottom:10px;margin-top:10px;position:relative}.checkbox label,.radio label{cursor:pointer;font-weight:400;margin-bottom:0;min-height:20px;padding-left:20px}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{margin-left:-20px;margin-top:4px\9;position:absolute}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{cursor:pointer;display:inline-block;font-weight:400;margin-bottom:0;padding-left:20px;position:relative;vertical-align:middle}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-left:10px;margin-top:0}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline{cursor:not-allowed}.form-control-static{margin-bottom:0;min-height:34px;padding-bottom:6px;padding-top:6px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{border-radius:4px;font-size:12px;height:32px;line-height:1.5;padding:6px 9px}select.input-sm{height:32px;line-height:32px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{border-radius:4px;font-size:12px;height:32px;line-height:1.5;padding:6px 9px}.form-group-sm select.form-control{height:32px;line-height:32px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{font-size:12px;height:32px;line-height:1.5;min-height:32px;padding:7px 9px}.input-lg{border-radius:4px;font-size:18px;height:62px;line-height:1.3333333;padding:18px 27px}select.input-lg{height:62px;line-height:62px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{border-radius:4px;font-size:18px;height:62px;line-height:1.3333333;padding:18px 27px}.form-group-lg select.form-control{height:62px;line-height:62px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{font-size:18px;height:62px;line-height:1.3333333;min-height:38px;padding:19px 27px}.has-feedback{position:relative}.has-feedback .form-control{padding-right:40px}.form-control-feedback{display:block;height:32px;line-height:32px;pointer-events:none;position:absolute;right:0;text-align:center;top:0;width:32px;z-index:2}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{height:62px;line-height:62px;width:62px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{height:32px;line-height:32px;width:32px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#1d1e24}.has-success .form-control{border-color:#1d1e24;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#060608;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #4b4d5c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #4b4d5c}.has-success .input-group-addon{background-color:#7de2d1;border-color:#1d1e24;color:#1d1e24}.has-success .form-control-feedback,.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#1d1e24}.has-warning .form-control{border-color:#1d1e24;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#060608;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #4b4d5c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #4b4d5c}.has-warning .input-group-addon{background-color:#ff977a;border-color:#1d1e24;color:#1d1e24}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label,.has-warning .form-control-feedback{color:#1d1e24}.has-error .form-control{border-color:#1d1e24;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#060608;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #4b4d5c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #4b4d5c}.has-error .input-group-addon{background-color:#f66;border-color:#1d1e24;color:#1d1e24}.has-error .form-control-feedback{color:#1d1e24}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{color:#fff;display:block;margin-bottom:10px;margin-top:5px}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;vertical-align:middle;width:auto}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-bottom:0;margin-top:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{margin-left:0;position:relative}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-bottom:0;margin-top:0;padding-top:6px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:26px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{margin-bottom:0;padding-top:6px;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{font-size:18px;padding-top:19px}.form-horizontal .form-group-sm .control-label{font-size:12px;padding-top:7px}}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-muted{color:#3e434d}.text-primary{color:#f5f7fa}a.text-primary:focus,a.text-primary:hover{color:#d3dce9}.text-success{color:#1d1e24}a.text-success:focus,a.text-success:hover{color:#060608}.text-info{color:#1d1e24}a.text-info:focus,a.text-info:hover{color:#060608}.text-warning{color:#1d1e24}a.text-warning:focus,a.text-warning:hover{color:#060608}.text-danger{color:#1d1e24}a.text-danger:focus,a.text-danger:hover{color:#060608}.bg-info{background-color:#1ba9f5}a.bg-info:focus,a.bg-info:hover{background-color:#098dd4}.list-unstyled{list-style:none;padding-left:0}@media (min-width:0){.dl-horizontal dt{clear:left;float:left;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap;width:160px}.dl-horizontal dd{margin-left:180px}}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;position:relative;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-timing-function:ease;transition-timing-function:ease}.btn{background-image:none;border:1px solid #0000;border-radius:4px;cursor:pointer;display:inline-block;font-size:14px;font-weight:400;line-height:1.42857143;margin-bottom:0;padding:5px 15px;text-align:center;touch-action:manipulation;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{box-shadow:0 0 0 1px #fff,0 0 0 2px #0079a5}.btn.focus,.btn:focus,.btn:hover{color:#1d1e24;text-decoration:none}.btn.active,.btn:active{background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125);outline:0}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{-webkit-box-shadow:none;box-shadow:none;cursor:not-allowed;filter:alpha(opacity=65);opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{background-color:#1ba9f5;border-color:#1ba9f5;color:#1d1e24}.btn-default.focus,.btn-default:focus{background-color:#098dd4;border-color:#065c8a;color:#1d1e24}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.dropdown-toggle.btn-default{background-color:#098dd4;border-color:#0987ca;color:#1d1e24}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{background-color:#0876b2;border-color:#065c8a;color:#1d1e24}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#1ba9f5;border-color:#1ba9f5}.btn-default .badge{background-color:#1d1e24;color:#1ba9f5}.btn-primary{background-color:#1ba9f5;border-color:#1ba9f5;color:#1d1e24}.btn-primary.focus,.btn-primary:focus{background-color:#098dd4;border-color:#065c8a;color:#1d1e24}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{background-color:#098dd4;border-color:#0987ca;color:#1d1e24}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{background-color:#0876b2;border-color:#065c8a;color:#1d1e24}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#1ba9f5;border-color:#1ba9f5}.btn-primary .badge{background-color:#1d1e24;color:#1ba9f5}.btn-xs{border-radius:4px;font-size:12px;line-height:1.5;padding:1px 5px}.navbar{border:1px solid #0000;margin-bottom:0;min-height:45px;position:relative}@media (min-width:0){.navbar{border-radius:4px}.navbar-header{float:left}}.navbar-collapse{-webkit-overflow-scrolling:touch;border-top:1px solid #0000;box-shadow:inset 0 1px 0 #ffffff1a;overflow-x:visible;padding-left:10px;padding-right:10px}.navbar-collapse.in{overflow-y:auto}@media (min-width:0){.navbar-collapse{border-top:0;box-shadow:none;width:auto}.navbar-collapse.collapse{display:block!important;height:auto!important;overflow:visible!important;padding-bottom:0}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-left:-10px;margin-right:-10px}@media (min-width:0){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-left:0;margin-right:0}}.navbar-fixed-bottom,.navbar-fixed-top{left:0;position:fixed;right:0;z-index:1050}@media (min-width:0){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{border-width:0 0 1px;top:0}.navbar-fixed-bottom{border-width:1px 0 0;bottom:0;margin-bottom:0}.navbar-brand{float:left;font-size:18px;height:45px;line-height:20px;padding:12.5px 10px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:0){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-10px}}.navbar-toggle{background-color:initial;background-image:none;border:1px solid #0000;border-radius:4px;float:right;margin-bottom:5.5px;margin-right:10px;margin-top:5.5px;padding:9px 10px;position:relative}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{border-radius:1px;display:block;height:2px;width:22px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:0){.navbar-toggle{display:none}}.navbar-nav{margin:6.25px -10px}.navbar-nav>li>a{line-height:20px;padding-bottom:10px;padding-top:10px}@media (max-width:-1){.navbar-nav .open .dropdown-menu{background-color:initial;border:0;box-shadow:none;float:none;margin-top:0;position:static;width:auto}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:0){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-bottom:12.5px;padding-top:12.5px}}.navbar-form{border-bottom:1px solid #0000;border-top:1px solid #0000;-webkit-box-shadow:inset 0 1px 0 #ffffff1a,0 1px 0 #ffffff1a;box-shadow:inset 0 1px 0 #ffffff1a,0 1px 0 #ffffff1a;margin:6.5px -10px;padding:10px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;vertical-align:middle;width:auto}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-bottom:0;margin-top:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{margin-left:0;position:relative}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:-1){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:0){.navbar-form{border:0;-webkit-box-shadow:none;box-shadow:none;margin-left:0;margin-right:0;padding-bottom:0;padding-top:0;width:auto}}.navbar-nav>li>.dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:4px;border-top-right-radius:4px;margin-bottom:0}.navbar-text{margin-bottom:12.5px;margin-top:12.5px}@media (min-width:0){.navbar-text{float:left;margin-left:10px;margin-right:10px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-10px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#000;border-color:#0000}.navbar-default .navbar-brand{color:#d4dae5}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{background-color:initial;color:#d4dae5}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#d4dae5}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{background-color:initial;color:#d4dae5}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{background-color:initial;color:#f5f7fa}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{background-color:initial;color:#d4dae5}.navbar-default .navbar-toggle{border-color:#000}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#000}.navbar-default .navbar-toggle .icon-bar{background-color:#1d1e24}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#0000}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:initial;color:#f5f7fa}@media (max-width:-1){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#d4dae5}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{background-color:initial;color:#d4dae5}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:initial;color:#f5f7fa}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{background-color:initial;color:#d4dae5}}.navbar-default .navbar-link,.navbar-default .navbar-link:hover{color:#d4dae5}.navbar-inverse{background-color:#f5f7fa;border-color:#d3dce9}.navbar-inverse .navbar-brand{color:#1d1e24}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{background-color:#fff;color:#1d1e24}.navbar-inverse .navbar-text{color:#1d1e24}.navbar-inverse .navbar-nav>li>a{color:#343741}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{background-color:#fff;color:#1d1e24}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{background-color:#d4dae5;color:#1d1e24}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{background-color:initial;color:#3e434d}.navbar-inverse .navbar-toggle{border-color:#d3dce9}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#d3dce9}.navbar-inverse .navbar-toggle .icon-bar{background-color:#1d1e24}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#dde4ee}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#d4dae5;color:#1d1e24}@media (max-width:-1){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#d3dce9}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#d3dce9}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#343741}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{background-color:#fff;color:#1d1e24}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#d4dae5;color:#1d1e24}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{background-color:initial;color:#3e434d}}.navbar-inverse .navbar-link{color:#343741}.navbar-inverse .navbar-link:hover{color:#1d1e24}.close{color:#fff;filter:alpha(opacity=20);float:right;font-size:21px;font-weight:700;line-height:1;opacity:.2;text-shadow:none}.close:focus,.close:hover{color:#fff;cursor:pointer;filter:alpha(opacity=50);opacity:.5;text-decoration:none}button.close{-webkit-appearance:none;background:#0000;border:0;cursor:pointer;padding:0}.modal,.modal-open{overflow:hidden}.modal{-webkit-overflow-scrolling:touch;bottom:0;display:none;left:0;outline:0;position:fixed;right:0;top:0;z-index:1070}.modal.fade .modal-dialog{-webkit-transform:translateY(-25%);-ms-transform:translateY(-25%);-o-transform:translateY(-25%);transform:translateY(-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0);-ms-transform:translate(0);-o-transform:translate(0);transform:translate(0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{margin:10px;position:relative;width:auto}.modal-content{background-clip:padding-box;background-color:#1d1e24;border:1px solid #0003;border-radius:4px;-webkit-box-shadow:0 3px 9px #00000080;box-shadow:0 3px 9px #00000080;outline:0;position:relative}.modal-backdrop{background-color:#fff;bottom:0;left:0;position:fixed;right:0;top:0;z-index:1060}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{border-bottom:1px solid #e5e5e5;padding:15px}.modal-header .close{margin-top:-2px}.modal-title{line-height:1.42857143;margin:0}.modal-body{padding:15px;position:relative}.modal-footer{border-top:1px solid #e5e5e5;padding:15px;text-align:right}.modal-scrollbar-measure{height:50px;overflow:scroll;position:absolute;top:-9999px;width:50px}@media (min-width:768px){.modal-dialog{margin:30px auto;width:600px}.modal-content{-webkit-box-shadow:0 5px 15px #00000080;box-shadow:0 5px 15px #00000080}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}@-webkit-keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}.progress{background-color:#2d3039;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px #0000001a;box-shadow:inset 0 1px 2px #0000001a;height:20px;margin-bottom:20px;overflow:hidden}.progress-bar{background-color:#54b399;color:#1d1e24;float:left;font-size:12px;height:100%;line-height:20px;text-align:center;-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease;width:0}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-image:-o-linear-gradient(45deg,#ffffff26 25%,#0000 25%,#0000 50%,#ffffff26 50%,#ffffff26 75%,#0000 75%,#0000);background-image:linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#7de2d1}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-image:-o-linear-gradient(45deg,#ffffff26 25%,#0000 25%,#0000 50%,#ffffff26 50%,#ffffff26 75%,#0000 75%,#0000);background-image:linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000)}.progress-bar-info{background-color:#1ba9f5}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-image:-o-linear-gradient(45deg,#ffffff26 25%,#0000 25%,#0000 50%,#ffffff26 50%,#ffffff26 75%,#0000 75%,#0000);background-image:linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000)}.progress-bar-warning{background-color:#ff977a}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-image:-o-linear-gradient(45deg,#ffffff26 25%,#0000 25%,#0000 50%,#ffffff26 50%,#ffffff26 75%,#0000 75%,#0000);background-image:linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000)}.progress-bar-danger{background-color:#f66}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-image:-o-linear-gradient(45deg,#ffffff26 25%,#0000 25%,#0000 50%,#ffffff26 50%,#ffffff26 75%,#0000 75%,#0000);background-image:linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000)}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{background-color:#1d1e24;border:1px solid #343741;display:block;margin-bottom:-1px;padding:10px 15px;position:relative}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;margin-bottom:0}.list-group-item--noBorder{border-top:0}a.list-group-item,button.list-group-item{color:#d4dae5}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#f5f7fa}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{background-color:#25262e;color:#d4dae5;text-decoration:none}button.list-group-item{text-align:left;width:100%}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#343741;color:#3e434d;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#3e434d}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{background-color:#f5f7fa;border-color:#f5f7fa;color:#f5f7fa;z-index:2}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#fff}.list-group-item-success{background-color:#7de2d1;color:#1d1e24}a.list-group-item-success,button.list-group-item-success{color:#1d1e24}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{background-color:#68ddca;color:#1d1e24}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{background-color:#1d1e24;border-color:#1d1e24;color:#fff}.list-group-item-info{background-color:#1ba9f5;color:#1d1e24}a.list-group-item-info,button.list-group-item-info{color:#1d1e24}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{background-color:#0a9dec;color:#1d1e24}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{background-color:#1d1e24;border-color:#1d1e24;color:#fff}.list-group-item-warning{background-color:#ff977a;color:#1d1e24}a.list-group-item-warning,button.list-group-item-warning{color:#1d1e24}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{background-color:#ff8361;color:#1d1e24}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{background-color:#1d1e24;border-color:#1d1e24;color:#fff}.list-group-item-danger{background-color:#f66;color:#1d1e24}a.list-group-item-danger,button.list-group-item-danger{color:#1d1e24}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{background-color:#ff4c4c;color:#1d1e24}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{background-color:#1d1e24;border-color:#1d1e24;color:#fff}.list-group-item-heading{margin-bottom:5px;margin-top:0}.list-group-item-text{line-height:1.3;margin-bottom:0}.nav{list-style:none;margin-bottom:0;padding-left:0}.nav>li,.nav>li>a{display:block;position:relative}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{background-color:#343741;text-decoration:none}.nav>li.disabled>a{color:#3e434d}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{background-color:initial;color:#3e434d;cursor:not-allowed;text-decoration:none}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#343741;border-color:#1ba9f5}.nav .nav-divider{background-color:#e5e5e5;height:1px;margin:9px 0;overflow:hidden}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #343741}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{border:1px solid #0000;border-radius:4px 4px 0 0;line-height:1.42857143;margin-right:2px}.nav-tabs>li>a:hover{background-color:#1d1e24;border-color:#343741}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{background-color:#1d1e24;border:1px solid #343741;border-bottom-color:#0000;color:#f5f7fa;cursor:default}.nav-tabs.nav-justified{border-bottom:0;width:100%}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{left:auto;top:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{border-radius:4px;margin-right:0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #1d1e24}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #1d1e24;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#1d1e24}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{background-color:#1ba9f5;color:#1d1e24}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-left:0;margin-top:2px}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{left:auto;top:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{border-radius:4px;margin-right:0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #1d1e24}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #1d1e24;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#1d1e24}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:-1px}.alert{border:1px solid #0000;border-radius:4px;margin-bottom:20px;padding:15px}.alert h4{color:inherit;margin-top:0}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{color:inherit;position:relative;right:-21px;top:-2px}.alert-success{background-color:#7de2d1;border-color:#53d9c2;color:#1d1e24}.alert-success hr{border-top-color:#3ed4bb}.alert-success .alert-link{color:#060608}.alert-info{background-color:#1ba9f5;border-color:#098dd4;color:#1d1e24}.alert-info hr{border-top-color:#087dbb}.alert-info .alert-link{color:#060608}.alert-warning{background-color:#ff977a;border-color:#ff6f47;color:#1d1e24}.alert-warning hr{border-top-color:#ff5b2e}.alert-warning .alert-link{color:#060608}.alert-danger{background-color:#f66;border-color:#f33;color:#1d1e24}.alert-danger hr{border-top-color:#ff1919}.alert-danger .alert-link{color:#060608}.bsTooltip{word-wrap:normal;display:block;filter:alpha(opacity=0);font-family:Open Sans,Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.42857143;opacity:0;position:absolute;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:1040}.bsTooltip.in{filter:alpha(opacity=80);opacity:.8}.bsTooltip.top{margin-top:-3px;padding:5px 0}.bsTooltip.right{margin-left:3px;padding:0 5px}.bsTooltip.bottom{margin-top:3px;padding:5px 0}.bsTooltip.left{margin-left:-3px;padding:0 5px}.bsTooltip-inner{background-color:#000;border-radius:4px;color:#fff;max-width:200px;padding:3px 8px;text-align:center}.bsTooltip-arrow{border-color:#0000;border-style:solid;height:0;position:absolute;width:0}.bsTooltip.top .bsTooltip-arrow{border-top-color:#000;border-width:5px 5px 0;bottom:0;left:50%;margin-left:-5px}.bsTooltip.top-left .bsTooltip-arrow{border-top-color:#000;border-width:5px 5px 0;bottom:0;margin-bottom:-5px;right:5px}.bsTooltip.top-right .bsTooltip-arrow{border-top-color:#000;border-width:5px 5px 0;bottom:0;left:5px;margin-bottom:-5px}.bsTooltip.right .bsTooltip-arrow{border-right-color:#000;border-width:5px 5px 5px 0;left:0;margin-top:-5px;top:50%}.bsTooltip.left .bsTooltip-arrow{border-left-color:#000;border-width:5px 0 5px 5px;margin-top:-5px;right:0;top:50%}.bsTooltip.bottom .bsTooltip-arrow{border-bottom-color:#000;border-width:0 5px 5px;left:50%;margin-left:-5px;top:0}.bsTooltip.bottom-left .bsTooltip-arrow{border-bottom-color:#000;border-width:0 5px 5px;margin-top:-5px;right:5px;top:0}.bsTooltip.bottom-right .bsTooltip-arrow{border-bottom-color:#000;border-width:0 5px 5px;left:5px;margin-top:-5px;top:0}.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}.caret{border-left:4px solid #0000;border-right:4px solid #0000;border-top:4px dashed;border-top:4px solid\9;display:inline-block;height:0;margin-left:2px;vertical-align:middle;width:0}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{background-clip:padding-box;background-color:#1d1e24;border:1px solid #343741;border-radius:4px;box-shadow:0 4px 8px 0 #0000001a;display:none;float:left;font-size:14px;left:0;list-style:none;margin:2px 0 0;min-width:160px;padding:5px 0;position:absolute;text-align:left;top:100%;z-index:1000}.dropdown-menu.pull-right{left:auto;right:0}.dropdown-menu .divider{background-color:#343741;height:1px;margin:9px 0;overflow:hidden}.dropdown-menu>li>a,.dropdown-menu>li>button{clear:both;color:#ababab;display:block;font-weight:400;line-height:1.42857143;padding:3px 20px;white-space:nowrap}.dropdown-menu>li>button{appearance:none;background:none;border:none;text-align:left;width:100%}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover,.dropdown-menu>li>button:focus,.dropdown-menu>li>button:hover{background-color:#f5f7fa;color:#1d1e24;text-decoration:none}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>button,.dropdown-menu>.active>button:focus,.dropdown-menu>.active>button:hover{background-color:#f5f7fa;color:#1d1e24;outline:0;text-decoration:none}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#535966}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{background-color:initial;background-image:none;cursor:not-allowed;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);text-decoration:none}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{color:#535966;display:block;font-size:12px;line-height:1.42857143;padding:3px 20px;white-space:nowrap}.dropdown-backdrop{bottom:0;left:0;position:fixed;right:0;top:0;z-index:990}.pull-right>.dropdown-menu{left:auto;right:0}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-bottom:4px dashed;border-bottom:4px solid\9;border-top:0;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{bottom:100%;margin-bottom:2px;top:auto}@media (min-width:0){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.input-group{border-collapse:initial;display:table;position:relative}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{float:left;margin-bottom:0;position:relative;width:100%;z-index:2}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon{border-radius:4px;font-size:18px;height:62px;line-height:1.3333333;padding:18px 27px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon{height:62px;line-height:62px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon{border-radius:4px;font-size:12px;height:32px;line-height:1.5;padding:6px 9px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon{height:32px;line-height:32px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon{height:auto}.input-group .form-control,.input-group-addon{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child){border-radius:0}.input-group-addon{background-color:#343741;border:1px solid #343741;border-radius:4px;color:#f5f7fa;font-size:14px;font-weight:400;line-height:1;padding:5px 15px;text-align:center;vertical-align:middle;white-space:nowrap;width:1%}.input-group-addon.input-sm{border-radius:4px;font-size:12px;padding:6px 9px}.input-group-addon.input-lg{border-radius:4px;font-size:18px;padding:18px 27px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.pagination{border-radius:4px;display:inline-block;margin:20px 0;padding-left:0}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{background-color:initial;border:1px solid #0000;color:#1ba9f5;float:left;line-height:1.42857143;margin-left:-1px;padding:5px 15px;position:relative;text-decoration:none}.pagination>li:first-child>a,.pagination>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px;margin-left:0}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{background-color:#0000;border-color:#0000;color:#1ba9f5;z-index:2}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{background-color:#0000;border-color:#0000;color:#f5f7fa;cursor:default;z-index:3}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{background-color:#26262600;border-color:#0000;color:#f5f7fa;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{font-size:18px;line-height:1.3333333;padding:18px 27px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination-sm>li>a,.pagination-sm>li>span{font-size:12px;line-height:1.5;padding:6px 9px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pager{list-style:none;margin:20px 0;padding-left:0;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{background-color:initial;border:1px solid #0000;border-radius:0;display:inline-block;padding:5px 14px}.pager li>a:focus,.pager li>a:hover{background-color:#0000;text-decoration:none}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{background-color:initial;color:#1d1e24;cursor:not-allowed}.label{border-radius:.25em;color:#1d1e24;display:inline;font-size:75%;font-weight:700;line-height:1;padding:.2em .6em .3em;text-align:center;vertical-align:initial;white-space:nowrap}a.label:focus,a.label:hover{color:#1d1e24;cursor:pointer;text-decoration:none}.label:empty{display:none}.label-default{background-color:#1ba9f5}.label-default[href]:focus,.label-default[href]:hover{background-color:#098dd4}.label-primary{background-color:#f5f7fa}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#d3dce9}.label-success{background-color:#7de2d1}.label-success[href]:focus,.label-success[href]:hover{background-color:#53d9c2}.label-info{background-color:#1ba9f5}.label-info[href]:focus,.label-info[href]:hover{background-color:#098dd4}.label-warning{background-color:#ff977a}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ff6f47}.label-danger{background-color:#f66}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#f33}.panel{background-color:#1d1e24;border:1px solid #0000;border-radius:4px;-webkit-box-shadow:0 1px 1px #0000000d;box-shadow:0 1px 1px #0000000d;margin-bottom:20px}.panel-body{padding:15px}.panel-heading{border-bottom:1px solid #0000;border-top-left-radius:3px;border-top-right-radius:3px;padding:10px 15px}.panel-heading>.dropdown .dropdown-toggle,.panel-title{color:inherit}.panel-title{font-size:16px;margin-bottom:0;margin-top:0}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{background-color:#25262e;border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-top:1px solid #343741;padding:10px 15px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-radius:0;border-width:1px 0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #343741}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{border-radius:4px;margin-bottom:0}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #343741}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #343741}.panel-default{border-color:#343741}.panel-default>.panel-heading{background-color:#25262e;border-color:#343741;color:#ababab}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#343741}.panel-default>.panel-heading .badge{background-color:#ababab;color:#25262e}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#343741}.panel-primary{border-color:#f5f7fa}.panel-primary>.panel-heading{background-color:#f5f7fa;border-color:#f5f7fa;color:#1d1e24}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#f5f7fa}.panel-primary>.panel-heading .badge{background-color:#1d1e24;color:#f5f7fa}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#f5f7fa}.panel-success{border-color:#53d9c2}.panel-success>.panel-heading{background-color:#7de2d1;border-color:#53d9c2;color:#1d1e24}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#53d9c2}.panel-success>.panel-heading .badge{background-color:#1d1e24;color:#7de2d1}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#53d9c2}.panel-info{border-color:#098dd4}.panel-info>.panel-heading{background-color:#1ba9f5;border-color:#098dd4;color:#1d1e24}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#098dd4}.panel-info>.panel-heading .badge{background-color:#1d1e24;color:#1ba9f5}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#098dd4}.panel-warning{border-color:#ff6f47}.panel-warning>.panel-heading{background-color:#ff977a;border-color:#ff6f47;color:#1d1e24}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ff6f47}.panel-warning>.panel-heading .badge{background-color:#1d1e24;color:#ff977a}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ff6f47}.panel-danger{border-color:#f33}.panel-danger>.panel-heading{background-color:#f66;border-color:#f33;color:#1d1e24}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#f33}.panel-danger>.panel-heading .badge{background-color:#1d1e24;color:#f66}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#f33}.popover{word-wrap:normal;background-clip:padding-box;background-color:#1d1e24;border:1px solid #343741;border-radius:4px;box-shadow:0 4px 8px 0 #0000001a;display:none;font-family:Open Sans,Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;left:0;letter-spacing:normal;line-break:auto;line-height:1.42857143;max-width:276px;padding:1px;position:absolute;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;top:0;white-space:normal;word-break:normal;word-spacing:normal;z-index:1010}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{background-color:#16171c;border-bottom:1px solid #0b0b0d;border-radius:3px 3px 0 0;font-size:14px;margin:0;padding:8px 14px}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{border-color:#0000;border-style:solid;display:block;height:0;position:absolute;width:0}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{border-bottom-width:0;border-top-color:#343741;bottom:-11px;left:50%;margin-left:-11px}.popover.top>.arrow:after{border-bottom-width:0;border-top-color:#1d1e24;bottom:1px;content:" ";margin-left:-10px}.popover.right>.arrow{border-left-width:0;border-right-color:#343741;left:-11px;margin-top:-11px;top:50%}.popover.right>.arrow:after{border-left-width:0;border-right-color:#1d1e24;bottom:-10px;content:" ";left:1px}.popover.bottom>.arrow{border-bottom-color:#343741;border-top-width:0;left:50%;margin-left:-11px;top:-11px}.popover.bottom>.arrow:after{border-bottom-color:#1d1e24;border-top-width:0;content:" ";margin-left:-10px;top:1px}.popover.left>.arrow{border-left-color:#343741;border-right-width:0;margin-top:-11px;right:-11px;top:50%}.popover.left>.arrow:after{border-left-color:#1d1e24;border-right-width:0;bottom:-10px;content:" ";right:1px}.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{content:" ";display:table}.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{background-color:initial;border:0;color:#0000;font:0/0 a;text-shadow:none}.hidden{display:none!important}.affix{position:fixed}.navbar>.container-fluid>.navbar-form:not(.pull-right):first-child,.navbar>.container-fluid>.navbar-nav:not(.pull-right):first-child{margin-left:-15px;margin-top:4px}.navbar{border-width:0}.navbar-btn-link{border-radius:0;margin:0}@media (max-width:768px){.navbar-btn-link{text-align:left;width:100%}}.navbar-default .badge{background-color:#1d1e24;color:#000}.navbar-inverse .kbnGlobalNav__logoBrand{background-color:#fff;height:45px;width:252px}.navbar-inverse .kbnGlobalNav__smallLogoBrand{background-color:#fff;height:45px;width:45px}.navbar-inverse .badge{background-color:#1d1e24;color:#fff}.navbar-brand{cursor:default;font-size:1.8em;user-select:none}.navbar-nav{font-size:12px}.navbar-nav>.active>a{background-color:initial;border-bottom-color:#ababab}.navbar-toggle{margin-top:4px}.text-primary,.text-primary:hover{color:#f5f7fa}.text-success,.text-success:hover{color:#7de2d1}.text-danger,.text-danger:hover{color:#f66}.text-warning,.text-warning:hover{color:#ff977a}.text-info,.text-info:hover{color:#1ba9f5}.table .danger,.table .danger a,.table .info,.table .info a,.table .success,.table .success a,.table .warning,.table .warning a,table .danger,table .danger a,table .info,table .info a,table .success,table .success a,table .warning,table .warning a{color:#1d1e24}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #343741}.form-control{border-width:1px}.form-control,.form-control:focus{-webkit-box-shadow:none;box-shadow:none}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline{color:#ff977a}.has-warning .form-control,.has-warning .form-control:focus{border:1px solid #ff977a}.has-warning .input-group-addon{border-color:#ff977a}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline{color:#f66}.has-error .form-control,.has-error .form-control:focus{border:1px solid #f66}.has-error .input-group-addon{border-color:#f66}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline{color:#7de2d1}.has-success .form-control,.has-success .form-control:focus{border:solid #7de2d1}.has-success .input-group-addon{border-color:#7de2d1}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{border-color:#0000}.pager a,.pager a:hover{color:#1d1e24}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{background-color:#26262600}.panel{border-radius:0;-webkit-box-shadow:0 0 0 #0000;box-shadow:0 0 0 #0000}.progress{-webkit-box-shadow:none;box-shadow:none}.progress .progress-bar{font-size:10px;line-height:10px}.well{-webkit-box-shadow:none;box-shadow:none} \ No newline at end of file diff --git a/packages/core/apps/core-apps-server-internal/assets/legacy_light_theme.css b/packages/core/apps/core-apps-server-internal/assets/legacy_light_theme.css index c5c639f60e3be..26340bed55596 100644 --- a/packages/core/apps/core-apps-server-internal/assets/legacy_light_theme.css +++ b/packages/core/apps/core-apps-server-internal/assets/legacy_light_theme.css @@ -4324,14 +4324,12 @@ table .info a, .table-bordered > tfoot > tr > td { border: 1px solid #D3DAE6; } -.form-control, -input { +.form-control { border-width: 1px; -webkit-box-shadow: none; box-shadow: none; } -.form-control:focus, -input:focus { +.form-control:focus { -webkit-box-shadow: none; box-shadow: none; } diff --git a/packages/core/apps/core-apps-server-internal/assets/legacy_light_theme.min.css b/packages/core/apps/core-apps-server-internal/assets/legacy_light_theme.min.css index 3dece6ea03d7e..797b9ff701244 100644 --- a/packages/core/apps/core-apps-server-internal/assets/legacy_light_theme.min.css +++ b/packages/core/apps/core-apps-server-internal/assets/legacy_light_theme.min.css @@ -2,4 +2,4 @@ * Bootstrap v3.3.6 (http://getbootstrap.com) * Copyright 2011-2015 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */.container{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{min-height:1px;padding-left:15px;padding-right:15px;position:relative}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}.table{font-size:14px;margin-bottom:20px;max-width:100%;width:100%}.table thead{font-size:12px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{border-top:1px solid #d3dae6;line-height:1.42857143;padding:8px;vertical-align:top}.table>thead>tr>th{border-bottom:1px solid #d3dae6;vertical-align:bottom}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #d3dae6}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{font-size:12px;padding:5px}.table-bordered{border:1px solid #d3dae6}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-hover>tbody>tr:hover,.table-striped>tbody>tr:nth-of-type(odd){background-color:#d3dae6}table col[class*=col-]{display:table-column;float:none;position:static}table td[class*=col-],table th[class*=col-]{display:table-cell;float:none;position:static}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#d3dae6}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#c3ccdd}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#017d73}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#01645c}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#006bb4}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#005c9b}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#f5a700}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#dc9600}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#bd271e}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#a7221b}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #d3dae6;margin-bottom:15px;overflow-y:hidden;width:100%}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}.form-control{background-color:#fafbfd;background-image:none;border:1px solid #d3dae6;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);color:#343741;display:block;font-size:14px;height:32px;line-height:1.42857143;padding:5px 15px;-webkit-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-o-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}.form-control:focus{border-color:#006bb4;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #006bb499;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #006bb499;outline:0}.form-control::-moz-placeholder{color:#98a2b3;opacity:1}.form-control:-ms-input-placeholder{color:#98a2b3}.form-control::-webkit-input-placeholder{color:#98a2b3}.form-control::-ms-expand{background-color:initial;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#d3dae6;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}.form-group:not(:empty){margin-bottom:15px}.checkbox,.radio{display:block;margin-bottom:10px;margin-top:10px;position:relative}.checkbox label,.radio label{cursor:pointer;font-weight:400;margin-bottom:0;min-height:20px;padding-left:20px}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{margin-left:-20px;margin-top:4px\9;position:absolute}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{cursor:pointer;display:inline-block;font-weight:400;margin-bottom:0;padding-left:20px;position:relative;vertical-align:middle}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-left:10px;margin-top:0}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline{cursor:not-allowed}.form-control-static{margin-bottom:0;min-height:34px;padding-bottom:6px;padding-top:6px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{border-radius:4px;font-size:12px;height:32px;line-height:1.5;padding:6px 9px}select.input-sm{height:32px;line-height:32px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{border-radius:4px;font-size:12px;height:32px;line-height:1.5;padding:6px 9px}.form-group-sm select.form-control{height:32px;line-height:32px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{font-size:12px;height:32px;line-height:1.5;min-height:32px;padding:7px 9px}.input-lg{border-radius:4px;font-size:18px;height:62px;line-height:1.3333333;padding:18px 27px}select.input-lg{height:62px;line-height:62px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{border-radius:4px;font-size:18px;height:62px;line-height:1.3333333;padding:18px 27px}.form-group-lg select.form-control{height:62px;line-height:62px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{font-size:18px;height:62px;line-height:1.3333333;min-height:38px;padding:19px 27px}.has-feedback{position:relative}.has-feedback .form-control{padding-right:40px}.form-control-feedback{display:block;height:32px;line-height:32px;pointer-events:none;position:absolute;right:0;text-align:center;top:0;width:32px;z-index:2}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{height:62px;line-height:62px;width:62px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{height:32px;line-height:32px;width:32px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#fff}.has-success .form-control{border-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #fff}.has-success .input-group-addon{background-color:#017d73;border-color:#fff;color:#fff}.has-success .form-control-feedback,.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#fff}.has-warning .form-control{border-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #fff}.has-warning .input-group-addon{background-color:#f5a700;border-color:#fff;color:#fff}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label,.has-warning .form-control-feedback{color:#fff}.has-error .form-control{border-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #fff}.has-error .input-group-addon{background-color:#bd271e;border-color:#fff;color:#fff}.has-error .form-control-feedback{color:#fff}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{color:#6d7388;display:block;margin-bottom:10px;margin-top:5px}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;vertical-align:middle;width:auto}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-bottom:0;margin-top:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{margin-left:0;position:relative}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-bottom:0;margin-top:0;padding-top:6px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:26px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{margin-bottom:0;padding-top:6px;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{font-size:18px;padding-top:19px}.form-horizontal .form-group-sm .control-label{font-size:12px;padding-top:7px}}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-muted{color:#b2bac6}.text-primary{color:#343741}a.text-primary:focus,a.text-primary:hover{color:#1d1f25}.text-success{color:#fff}a.text-success:focus,a.text-success:hover{color:#e6e6e6}.text-info{color:#fff}a.text-info:focus,a.text-info:hover{color:#e6e6e6}.text-warning{color:#fff}a.text-warning:focus,a.text-warning:hover{color:#e6e6e6}.text-danger{color:#fff}a.text-danger:focus,a.text-danger:hover{color:#e6e6e6}.bg-info{background-color:#006bb4}a.bg-info:focus,a.bg-info:hover{background-color:#004d81}.list-unstyled{list-style:none;padding-left:0}@media (min-width:0){.dl-horizontal dt{clear:left;float:left;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap;width:160px}.dl-horizontal dd{margin-left:180px}}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;position:relative;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-timing-function:ease;transition-timing-function:ease}.btn{background-image:none;border:1px solid #0000;border-radius:4px;cursor:pointer;display:inline-block;font-size:14px;font-weight:400;line-height:1.42857143;margin-bottom:0;padding:5px 15px;text-align:center;touch-action:manipulation;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{box-shadow:0 0 0 1px #fff,0 0 0 2px #0079a5}.btn.focus,.btn:focus,.btn:hover{color:#fff;text-decoration:none}.btn.active,.btn:active{background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125);outline:0}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{-webkit-box-shadow:none;box-shadow:none;cursor:not-allowed;filter:alpha(opacity=65);opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{background-color:#006bb4;border-color:#006bb4;color:#fff}.btn-default.focus,.btn-default:focus{background-color:#004d81;border-color:#001f35;color:#fff}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.dropdown-toggle.btn-default{background-color:#004d81;border-color:#004777;color:#fff}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{background-color:#00375d;border-color:#001f35;color:#fff}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#006bb4;border-color:#006bb4}.btn-default .badge{background-color:#fff;color:#006bb4}.btn-primary{background-color:#006bb4;border-color:#006bb4;color:#fff}.btn-primary.focus,.btn-primary:focus{background-color:#004d81;border-color:#001f35;color:#fff}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{background-color:#004d81;border-color:#004777;color:#fff}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{background-color:#00375d;border-color:#001f35;color:#fff}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#006bb4;border-color:#006bb4}.btn-primary .badge{background-color:#fff;color:#006bb4}.btn-xs{border-radius:4px;font-size:12px;line-height:1.5;padding:1px 5px}.navbar{border:1px solid #0000;margin-bottom:0;min-height:45px;position:relative}@media (min-width:0){.navbar{border-radius:4px}.navbar-header{float:left}}.navbar-collapse{-webkit-overflow-scrolling:touch;border-top:1px solid #0000;box-shadow:inset 0 1px 0 #ffffff1a;overflow-x:visible;padding-left:10px;padding-right:10px}.navbar-collapse.in{overflow-y:auto}@media (min-width:0){.navbar-collapse{border-top:0;box-shadow:none;width:auto}.navbar-collapse.collapse{display:block!important;height:auto!important;overflow:visible!important;padding-bottom:0}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-left:-10px;margin-right:-10px}@media (min-width:0){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-left:0;margin-right:0}}.navbar-fixed-bottom,.navbar-fixed-top{left:0;position:fixed;right:0;z-index:1050}@media (min-width:0){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{border-width:0 0 1px;top:0}.navbar-fixed-bottom{border-width:1px 0 0;bottom:0;margin-bottom:0}.navbar-brand{float:left;font-size:18px;height:45px;line-height:20px;padding:12.5px 10px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:0){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-10px}}.navbar-toggle{background-color:initial;background-image:none;border:1px solid #0000;border-radius:4px;float:right;margin-bottom:5.5px;margin-right:10px;margin-top:5.5px;padding:9px 10px;position:relative}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{border-radius:1px;display:block;height:2px;width:22px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:0){.navbar-toggle{display:none}}.navbar-nav{margin:6.25px -10px}.navbar-nav>li>a{line-height:20px;padding-bottom:10px;padding-top:10px}@media (max-width:-1){.navbar-nav .open .dropdown-menu{background-color:initial;border:0;box-shadow:none;float:none;margin-top:0;position:static;width:auto}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:0){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-bottom:12.5px;padding-top:12.5px}}.navbar-form{border-bottom:1px solid #0000;border-top:1px solid #0000;-webkit-box-shadow:inset 0 1px 0 #ffffff1a,0 1px 0 #ffffff1a;box-shadow:inset 0 1px 0 #ffffff1a,0 1px 0 #ffffff1a;margin:6.5px -10px;padding:10px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;vertical-align:middle;width:auto}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-bottom:0;margin-top:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{margin-left:0;position:relative}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:-1){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:0){.navbar-form{border:0;-webkit-box-shadow:none;box-shadow:none;margin-left:0;margin-right:0;padding-bottom:0;padding-top:0;width:auto}}.navbar-nav>li>.dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:4px;border-top-right-radius:4px;margin-bottom:0}.navbar-text{margin-bottom:12.5px;margin-top:12.5px}@media (min-width:0){.navbar-text{float:left;margin-left:10px;margin-right:10px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-10px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f5f7fa;border-color:#0000}.navbar-default .navbar-brand{color:#69707d}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{background-color:initial;color:#69707d}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#69707d}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{background-color:initial;color:#69707d}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{background-color:initial;color:#343741}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{background-color:initial;color:#69707d}.navbar-default .navbar-toggle{border-color:#d3dce9}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#d3dce9}.navbar-default .navbar-toggle .icon-bar{background-color:#fff}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#0000}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:initial;color:#343741}@media (max-width:-1){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#69707d}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{background-color:initial;color:#69707d}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:initial;color:#343741}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{background-color:initial;color:#69707d}}.navbar-default .navbar-link,.navbar-default .navbar-link:hover{color:#69707d}.navbar-inverse{background-color:#343741;border-color:#1d1f25}.navbar-inverse .navbar-brand{color:#fff}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{background-color:#4b4f5d;color:#fff}.navbar-inverse .navbar-text{color:#fff}.navbar-inverse .navbar-nav>li>a{color:#d3dae6}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{background-color:#61677a;color:#fff}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{background-color:#69707d;color:#fff}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{background-color:initial;color:#b2bac6}.navbar-inverse .navbar-toggle{border-color:#1d1f25}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#1d1f25}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#24262d}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#69707d;color:#fff}@media (max-width:-1){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#1d1f25}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#1d1f25}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#d3dae6}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{background-color:#61677a;color:#fff}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#69707d;color:#fff}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{background-color:initial;color:#b2bac6}}.navbar-inverse .navbar-link{color:#d3dae6}.navbar-inverse .navbar-link:hover{color:#fff}.close{color:#000;filter:alpha(opacity=20);float:right;font-size:21px;font-weight:700;line-height:1;opacity:.2;text-shadow:none}.close:focus,.close:hover{color:#000;cursor:pointer;filter:alpha(opacity=50);opacity:.5;text-decoration:none}button.close{-webkit-appearance:none;background:#0000;border:0;cursor:pointer;padding:0}.modal,.modal-open{overflow:hidden}.modal{-webkit-overflow-scrolling:touch;bottom:0;display:none;left:0;outline:0;position:fixed;right:0;top:0;z-index:1070}.modal.fade .modal-dialog{-webkit-transform:translateY(-25%);-ms-transform:translateY(-25%);-o-transform:translateY(-25%);transform:translateY(-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0);-ms-transform:translate(0);-o-transform:translate(0);transform:translate(0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{margin:10px;position:relative;width:auto}.modal-content{background-clip:padding-box;background-color:#fff;border:1px solid #0003;border-radius:4px;-webkit-box-shadow:0 3px 9px #00000080;box-shadow:0 3px 9px #00000080;outline:0;position:relative}.modal-backdrop{background-color:#000;bottom:0;left:0;position:fixed;right:0;top:0;z-index:1060}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{border-bottom:1px solid #e5e5e5;padding:15px}.modal-header .close{margin-top:-2px}.modal-title{line-height:1.42857143;margin:0}.modal-body{padding:15px;position:relative}.modal-footer{border-top:1px solid #e5e5e5;padding:15px;text-align:right}.modal-scrollbar-measure{height:50px;overflow:scroll;position:absolute;top:-9999px;width:50px}@media (min-width:768px){.modal-dialog{margin:30px auto;width:600px}.modal-content{-webkit-box-shadow:0 5px 15px #00000080;box-shadow:0 5px 15px #00000080}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}@-webkit-keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}.progress{background-color:#b8bec8;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px #0000001a;box-shadow:inset 0 1px 2px #0000001a;height:20px;margin-bottom:20px;overflow:hidden}.progress-bar{background-color:#54b399;color:#fff;float:left;font-size:12px;height:100%;line-height:20px;text-align:center;-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease;width:0}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-image:-o-linear-gradient(45deg,#ffffff26 25%,#0000 25%,#0000 50%,#ffffff26 50%,#ffffff26 75%,#0000 75%,#0000);background-image:linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#017d73}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-image:-o-linear-gradient(45deg,#ffffff26 25%,#0000 25%,#0000 50%,#ffffff26 50%,#ffffff26 75%,#0000 75%,#0000);background-image:linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000)}.progress-bar-info{background-color:#006bb4}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-image:-o-linear-gradient(45deg,#ffffff26 25%,#0000 25%,#0000 50%,#ffffff26 50%,#ffffff26 75%,#0000 75%,#0000);background-image:linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000)}.progress-bar-warning{background-color:#f5a700}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-image:-o-linear-gradient(45deg,#ffffff26 25%,#0000 25%,#0000 50%,#ffffff26 50%,#ffffff26 75%,#0000 75%,#0000);background-image:linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000)}.progress-bar-danger{background-color:#bd271e}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-image:-o-linear-gradient(45deg,#ffffff26 25%,#0000 25%,#0000 50%,#ffffff26 50%,#ffffff26 75%,#0000 75%,#0000);background-image:linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000)}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{background-color:#fff;border:1px solid #d3dae6;display:block;margin-bottom:-1px;padding:10px 15px;position:relative}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;margin-bottom:0}.list-group-item--noBorder{border-top:0}a.list-group-item,button.list-group-item{color:#69707d}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#343741}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{background-color:#f5f7fa;color:#69707d;text-decoration:none}button.list-group-item{text-align:left;width:100%}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#d3dae6;color:#b2bac6;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#b2bac6}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{background-color:#343741;border-color:#343741;color:#343741;z-index:2}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#969bab}.list-group-item-success{background-color:#017d73;color:#fff}a.list-group-item-success,button.list-group-item-success{color:#fff}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{background-color:#01645c;color:#fff}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{background-color:#fff;border-color:#fff;color:#fff}.list-group-item-info{background-color:#006bb4;color:#fff}a.list-group-item-info,button.list-group-item-info{color:#fff}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{background-color:#005c9b;color:#fff}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{background-color:#fff;border-color:#fff;color:#fff}.list-group-item-warning{background-color:#f5a700;color:#fff}a.list-group-item-warning,button.list-group-item-warning{color:#fff}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{background-color:#dc9600;color:#fff}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{background-color:#fff;border-color:#fff;color:#fff}.list-group-item-danger{background-color:#bd271e;color:#fff}a.list-group-item-danger,button.list-group-item-danger{color:#fff}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{background-color:#a7221b;color:#fff}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{background-color:#fff;border-color:#fff;color:#fff}.list-group-item-heading{margin-bottom:5px;margin-top:0}.list-group-item-text{line-height:1.3;margin-bottom:0}.nav{list-style:none;margin-bottom:0;padding-left:0}.nav>li,.nav>li>a{display:block;position:relative}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{background-color:#d3dae6;text-decoration:none}.nav>li.disabled>a{color:#b2bac6}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{background-color:initial;color:#b2bac6;cursor:not-allowed;text-decoration:none}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#d3dae6;border-color:#006bb4}.nav .nav-divider{background-color:#e5e5e5;height:1px;margin:9px 0;overflow:hidden}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #d3dae6}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{border:1px solid #0000;border-radius:4px 4px 0 0;line-height:1.42857143;margin-right:2px}.nav-tabs>li>a:hover{background-color:#fff;border-color:#d3dae6}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{background-color:#fff;border:1px solid #d3dae6;border-bottom-color:#0000;color:#343741;cursor:default}.nav-tabs.nav-justified{border-bottom:0;width:100%}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{left:auto;top:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{border-radius:4px;margin-right:0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #fff}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #fff;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{background-color:#006bb4;color:#fff}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-left:0;margin-top:2px}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{left:auto;top:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{border-radius:4px;margin-right:0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #fff}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #fff;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:-1px}.alert{border:1px solid #0000;border-radius:4px;margin-bottom:20px;padding:15px}.alert h4{color:inherit;margin-top:0}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{color:inherit;position:relative;right:-21px;top:-2px}.alert-success{background-color:#017d73;border-color:#014a44;color:#fff}.alert-success hr{border-top-color:#00312d}.alert-success .alert-link{color:#e6e6e6}.alert-info{background-color:#006bb4;border-color:#004d81;color:#fff}.alert-info hr{border-top-color:#003e68}.alert-info .alert-link{color:#e6e6e6}.alert-warning{background-color:#f5a700;border-color:#c28400;color:#fff}.alert-warning hr{border-top-color:#a97300}.alert-warning .alert-link{color:#e6e6e6}.alert-danger{background-color:#bd271e;border-color:#911e17;color:#fff}.alert-danger hr{border-top-color:#7b1914}.alert-danger .alert-link{color:#e6e6e6}.bsTooltip{word-wrap:normal;display:block;filter:alpha(opacity=0);font-family:Open Sans,Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.42857143;opacity:0;position:absolute;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:1040}.bsTooltip.in{filter:alpha(opacity=80);opacity:.8}.bsTooltip.top{margin-top:-3px;padding:5px 0}.bsTooltip.right{margin-left:3px;padding:0 5px}.bsTooltip.bottom{margin-top:3px;padding:5px 0}.bsTooltip.left{margin-left:-3px;padding:0 5px}.bsTooltip-inner{background-color:#000;border-radius:4px;color:#fff;max-width:200px;padding:3px 8px;text-align:center}.bsTooltip-arrow{border-color:#0000;border-style:solid;height:0;position:absolute;width:0}.bsTooltip.top .bsTooltip-arrow{border-top-color:#000;border-width:5px 5px 0;bottom:0;left:50%;margin-left:-5px}.bsTooltip.top-left .bsTooltip-arrow{border-top-color:#000;border-width:5px 5px 0;bottom:0;margin-bottom:-5px;right:5px}.bsTooltip.top-right .bsTooltip-arrow{border-top-color:#000;border-width:5px 5px 0;bottom:0;left:5px;margin-bottom:-5px}.bsTooltip.right .bsTooltip-arrow{border-right-color:#000;border-width:5px 5px 5px 0;left:0;margin-top:-5px;top:50%}.bsTooltip.left .bsTooltip-arrow{border-left-color:#000;border-width:5px 0 5px 5px;margin-top:-5px;right:0;top:50%}.bsTooltip.bottom .bsTooltip-arrow{border-bottom-color:#000;border-width:0 5px 5px;left:50%;margin-left:-5px;top:0}.bsTooltip.bottom-left .bsTooltip-arrow{border-bottom-color:#000;border-width:0 5px 5px;margin-top:-5px;right:5px;top:0}.bsTooltip.bottom-right .bsTooltip-arrow{border-bottom-color:#000;border-width:0 5px 5px;left:5px;margin-top:-5px;top:0}.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}.caret{border-left:4px solid #0000;border-right:4px solid #0000;border-top:4px dashed;border-top:4px solid\9;display:inline-block;height:0;margin-left:2px;vertical-align:middle;width:0}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{background-clip:padding-box;background-color:#fff;border:1px solid #d3dae6;border-radius:4px;box-shadow:0 4px 8px 0 #0000001a;display:none;float:left;font-size:14px;left:0;list-style:none;margin:2px 0 0;min-width:160px;padding:5px 0;position:absolute;text-align:left;top:100%;z-index:1000}.dropdown-menu.pull-right{left:auto;right:0}.dropdown-menu .divider{background-color:#d3dae6;height:1px;margin:9px 0;overflow:hidden}.dropdown-menu>li>a,.dropdown-menu>li>button{clear:both;color:#7b7b7b;display:block;font-weight:400;line-height:1.42857143;padding:3px 20px;white-space:nowrap}.dropdown-menu>li>button{appearance:none;background:none;border:none;text-align:left;width:100%}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover,.dropdown-menu>li>button:focus,.dropdown-menu>li>button:hover{background-color:#343741;color:#fff;text-decoration:none}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>button,.dropdown-menu>.active>button:focus,.dropdown-menu>.active>button:hover{background-color:#343741;color:#fff;outline:0;text-decoration:none}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#98a2b3}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{background-color:initial;background-image:none;cursor:not-allowed;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);text-decoration:none}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{color:#98a2b3;display:block;font-size:12px;line-height:1.42857143;padding:3px 20px;white-space:nowrap}.dropdown-backdrop{bottom:0;left:0;position:fixed;right:0;top:0;z-index:990}.pull-right>.dropdown-menu{left:auto;right:0}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-bottom:4px dashed;border-bottom:4px solid\9;border-top:0;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{bottom:100%;margin-bottom:2px;top:auto}@media (min-width:0){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.input-group{border-collapse:initial;display:table;position:relative}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{float:left;margin-bottom:0;position:relative;width:100%;z-index:2}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon{border-radius:4px;font-size:18px;height:62px;line-height:1.3333333;padding:18px 27px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon{height:62px;line-height:62px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon{border-radius:4px;font-size:12px;height:32px;line-height:1.5;padding:6px 9px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon{height:32px;line-height:32px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon{height:auto}.input-group .form-control,.input-group-addon{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child){border-radius:0}.input-group-addon{background-color:#d3dae6;border:1px solid #d3dae6;border-radius:4px;color:#343741;font-size:14px;font-weight:400;line-height:1;padding:5px 15px;text-align:center;vertical-align:middle;white-space:nowrap;width:1%}.input-group-addon.input-sm{border-radius:4px;font-size:12px;padding:6px 9px}.input-group-addon.input-lg{border-radius:4px;font-size:18px;padding:18px 27px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.pagination{border-radius:4px;display:inline-block;margin:20px 0;padding-left:0}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{background-color:initial;border:1px solid #0000;color:#006bb4;float:left;line-height:1.42857143;margin-left:-1px;padding:5px 15px;position:relative;text-decoration:none}.pagination>li:first-child>a,.pagination>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px;margin-left:0}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{background-color:#0000;border-color:#0000;color:#006bb4;z-index:2}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{background-color:#0000;border-color:#0000;color:#343741;cursor:default;z-index:3}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{background-color:#26262600;border-color:#0000;color:#343741;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{font-size:18px;line-height:1.3333333;padding:18px 27px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination-sm>li>a,.pagination-sm>li>span{font-size:12px;line-height:1.5;padding:6px 9px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pager{list-style:none;margin:20px 0;padding-left:0;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{background-color:initial;border:1px solid #0000;border-radius:0;display:inline-block;padding:5px 14px}.pager li>a:focus,.pager li>a:hover{background-color:#0000;text-decoration:none}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{background-color:initial;color:#fff;cursor:not-allowed}.label{border-radius:.25em;color:#fff;display:inline;font-size:75%;font-weight:700;line-height:1;padding:.2em .6em .3em;text-align:center;vertical-align:initial;white-space:nowrap}a.label:focus,a.label:hover{color:#fff;cursor:pointer;text-decoration:none}.label:empty{display:none}.label-default{background-color:#006bb4}.label-default[href]:focus,.label-default[href]:hover{background-color:#004d81}.label-primary{background-color:#343741}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#1d1f25}.label-success{background-color:#017d73}.label-success[href]:focus,.label-success[href]:hover{background-color:#014a44}.label-info{background-color:#006bb4}.label-info[href]:focus,.label-info[href]:hover{background-color:#004d81}.label-warning{background-color:#f5a700}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#c28400}.label-danger{background-color:#bd271e}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#911e17}.panel{background-color:#fff;border:1px solid #0000;border-radius:4px;-webkit-box-shadow:0 1px 1px #0000000d;box-shadow:0 1px 1px #0000000d;margin-bottom:20px}.panel-body{padding:15px}.panel-heading{border-bottom:1px solid #0000;border-top-left-radius:3px;border-top-right-radius:3px;padding:10px 15px}.panel-heading>.dropdown .dropdown-toggle,.panel-title{color:inherit}.panel-title{font-size:16px;margin-bottom:0;margin-top:0}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{background-color:#f5f7fa;border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-top:1px solid #d3dae6;padding:10px 15px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-radius:0;border-width:1px 0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #d3dae6}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{border-radius:4px;margin-bottom:0}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #d3dae6}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #d3dae6}.panel-default{border-color:#d3dae6}.panel-default>.panel-heading{background-color:#f5f7fa;border-color:#d3dae6;color:#7b7b7b}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d3dae6}.panel-default>.panel-heading .badge{background-color:#7b7b7b;color:#f5f7fa}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d3dae6}.panel-primary{border-color:#343741}.panel-primary>.panel-heading{background-color:#343741;border-color:#343741;color:#fff}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#343741}.panel-primary>.panel-heading .badge{background-color:#fff;color:#343741}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#343741}.panel-success{border-color:#014a44}.panel-success>.panel-heading{background-color:#017d73;border-color:#014a44;color:#fff}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#014a44}.panel-success>.panel-heading .badge{background-color:#fff;color:#017d73}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#014a44}.panel-info{border-color:#004d81}.panel-info>.panel-heading{background-color:#006bb4;border-color:#004d81;color:#fff}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#004d81}.panel-info>.panel-heading .badge{background-color:#fff;color:#006bb4}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#004d81}.panel-warning{border-color:#c28400}.panel-warning>.panel-heading{background-color:#f5a700;border-color:#c28400;color:#fff}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#c28400}.panel-warning>.panel-heading .badge{background-color:#fff;color:#f5a700}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#c28400}.panel-danger{border-color:#911e17}.panel-danger>.panel-heading{background-color:#bd271e;border-color:#911e17;color:#fff}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#911e17}.panel-danger>.panel-heading .badge{background-color:#fff;color:#bd271e}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#911e17}.popover{word-wrap:normal;background-clip:padding-box;background-color:#fff;border:1px solid #d3dae6;border-radius:4px;box-shadow:0 4px 8px 0 #0000001a;display:none;font-family:Open Sans,Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;left:0;letter-spacing:normal;line-break:auto;line-height:1.42857143;max-width:276px;padding:1px;position:absolute;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;top:0;white-space:normal;word-break:normal;word-spacing:normal;z-index:1010}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:3px 3px 0 0;font-size:14px;margin:0;padding:8px 14px}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{border-color:#0000;border-style:solid;display:block;height:0;position:absolute;width:0}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{border-bottom-width:0;border-top-color:#d3dae6;bottom:-11px;left:50%;margin-left:-11px}.popover.top>.arrow:after{border-bottom-width:0;border-top-color:#fff;bottom:1px;content:" ";margin-left:-10px}.popover.right>.arrow{border-left-width:0;border-right-color:#d3dae6;left:-11px;margin-top:-11px;top:50%}.popover.right>.arrow:after{border-left-width:0;border-right-color:#fff;bottom:-10px;content:" ";left:1px}.popover.bottom>.arrow{border-bottom-color:#d3dae6;border-top-width:0;left:50%;margin-left:-11px;top:-11px}.popover.bottom>.arrow:after{border-bottom-color:#fff;border-top-width:0;content:" ";margin-left:-10px;top:1px}.popover.left>.arrow{border-left-color:#d3dae6;border-right-width:0;margin-top:-11px;right:-11px;top:50%}.popover.left>.arrow:after{border-left-color:#fff;border-right-width:0;bottom:-10px;content:" ";right:1px}.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{content:" ";display:table}.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{background-color:initial;border:0;color:#0000;font:0/0 a;text-shadow:none}.hidden{display:none!important}.affix{position:fixed}.navbar>.container-fluid>.navbar-form:not(.pull-right):first-child,.navbar>.container-fluid>.navbar-nav:not(.pull-right):first-child{margin-left:-15px;margin-top:4px}.navbar{border-width:0}.navbar-btn-link{border-radius:0;margin:0}@media (max-width:768px){.navbar-btn-link{text-align:left;width:100%}}.navbar-default .badge{background-color:#fff;color:#f5f7fa}.navbar-inverse .kbnGlobalNav__logoBrand{background-color:#4b4f5d;height:45px;width:252px}.navbar-inverse .kbnGlobalNav__smallLogoBrand{background-color:#4b4f5d;height:45px;width:45px}.navbar-inverse .badge{background-color:#fff;color:#4b4f5d}.navbar-brand{cursor:default;font-size:1.8em;user-select:none}.navbar-nav{font-size:12px}.navbar-nav>.active>a{background-color:initial;border-bottom-color:#7b7b7b}.navbar-toggle{margin-top:4px}.text-primary,.text-primary:hover{color:#343741}.text-success,.text-success:hover{color:#017d73}.text-danger,.text-danger:hover{color:#bd271e}.text-warning,.text-warning:hover{color:#f5a700}.text-info,.text-info:hover{color:#006bb4}.table .danger,.table .danger a,.table .info,.table .info a,.table .success,.table .success a,.table .warning,.table .warning a,table .danger,table .danger a,table .info,table .info a,table .success,table .success a,table .warning,table .warning a{color:#fff}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #d3dae6}.form-control,input{border-width:1px}.form-control,.form-control:focus,input,input:focus{-webkit-box-shadow:none;box-shadow:none}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline{color:#f5a700}.has-warning .form-control,.has-warning .form-control:focus{border:1px solid #f5a700}.has-warning .input-group-addon{border-color:#f5a700}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline{color:#bd271e}.has-error .form-control,.has-error .form-control:focus{border:1px solid #bd271e}.has-error .input-group-addon{border-color:#bd271e}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline{color:#017d73}.has-success .form-control,.has-success .form-control:focus{border:solid #017d73}.has-success .input-group-addon{border-color:#017d73}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{border-color:#0000}.pager a,.pager a:hover{color:#fff}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{background-color:#26262600}.panel{border-radius:0;-webkit-box-shadow:0 0 0 #0000;box-shadow:0 0 0 #0000}.progress{-webkit-box-shadow:none;box-shadow:none}.progress .progress-bar{font-size:10px;line-height:10px}.well{-webkit-box-shadow:none;box-shadow:none} \ No newline at end of file + */.container{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{min-height:1px;padding-left:15px;padding-right:15px;position:relative}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}.table{font-size:14px;margin-bottom:20px;max-width:100%;width:100%}.table thead{font-size:12px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{border-top:1px solid #d3dae6;line-height:1.42857143;padding:8px;vertical-align:top}.table>thead>tr>th{border-bottom:1px solid #d3dae6;vertical-align:bottom}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #d3dae6}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{font-size:12px;padding:5px}.table-bordered{border:1px solid #d3dae6}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-hover>tbody>tr:hover,.table-striped>tbody>tr:nth-of-type(odd){background-color:#d3dae6}table col[class*=col-]{display:table-column;float:none;position:static}table td[class*=col-],table th[class*=col-]{display:table-cell;float:none;position:static}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#d3dae6}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#c3ccdd}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#017d73}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#01645c}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#006bb4}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#005c9b}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#f5a700}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#dc9600}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#bd271e}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#a7221b}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #d3dae6;margin-bottom:15px;overflow-y:hidden;width:100%}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}.form-control{background-color:#fafbfd;background-image:none;border:1px solid #d3dae6;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);color:#343741;display:block;font-size:14px;height:32px;line-height:1.42857143;padding:5px 15px;-webkit-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-o-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}.form-control:focus{border-color:#006bb4;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #006bb499;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #006bb499;outline:0}.form-control::-moz-placeholder{color:#98a2b3;opacity:1}.form-control:-ms-input-placeholder{color:#98a2b3}.form-control::-webkit-input-placeholder{color:#98a2b3}.form-control::-ms-expand{background-color:initial;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#d3dae6;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}.form-group:not(:empty){margin-bottom:15px}.checkbox,.radio{display:block;margin-bottom:10px;margin-top:10px;position:relative}.checkbox label,.radio label{cursor:pointer;font-weight:400;margin-bottom:0;min-height:20px;padding-left:20px}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{margin-left:-20px;margin-top:4px\9;position:absolute}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{cursor:pointer;display:inline-block;font-weight:400;margin-bottom:0;padding-left:20px;position:relative;vertical-align:middle}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-left:10px;margin-top:0}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline{cursor:not-allowed}.form-control-static{margin-bottom:0;min-height:34px;padding-bottom:6px;padding-top:6px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{border-radius:4px;font-size:12px;height:32px;line-height:1.5;padding:6px 9px}select.input-sm{height:32px;line-height:32px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{border-radius:4px;font-size:12px;height:32px;line-height:1.5;padding:6px 9px}.form-group-sm select.form-control{height:32px;line-height:32px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{font-size:12px;height:32px;line-height:1.5;min-height:32px;padding:7px 9px}.input-lg{border-radius:4px;font-size:18px;height:62px;line-height:1.3333333;padding:18px 27px}select.input-lg{height:62px;line-height:62px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{border-radius:4px;font-size:18px;height:62px;line-height:1.3333333;padding:18px 27px}.form-group-lg select.form-control{height:62px;line-height:62px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{font-size:18px;height:62px;line-height:1.3333333;min-height:38px;padding:19px 27px}.has-feedback{position:relative}.has-feedback .form-control{padding-right:40px}.form-control-feedback{display:block;height:32px;line-height:32px;pointer-events:none;position:absolute;right:0;text-align:center;top:0;width:32px;z-index:2}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{height:62px;line-height:62px;width:62px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{height:32px;line-height:32px;width:32px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#fff}.has-success .form-control{border-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #fff}.has-success .input-group-addon{background-color:#017d73;border-color:#fff;color:#fff}.has-success .form-control-feedback,.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#fff}.has-warning .form-control{border-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #fff}.has-warning .input-group-addon{background-color:#f5a700;border-color:#fff;color:#fff}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label,.has-warning .form-control-feedback{color:#fff}.has-error .form-control{border-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #fff}.has-error .input-group-addon{background-color:#bd271e;border-color:#fff;color:#fff}.has-error .form-control-feedback{color:#fff}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{color:#6d7388;display:block;margin-bottom:10px;margin-top:5px}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;vertical-align:middle;width:auto}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-bottom:0;margin-top:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{margin-left:0;position:relative}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-bottom:0;margin-top:0;padding-top:6px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:26px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{margin-bottom:0;padding-top:6px;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{font-size:18px;padding-top:19px}.form-horizontal .form-group-sm .control-label{font-size:12px;padding-top:7px}}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-muted{color:#b2bac6}.text-primary{color:#343741}a.text-primary:focus,a.text-primary:hover{color:#1d1f25}.text-success{color:#fff}a.text-success:focus,a.text-success:hover{color:#e6e6e6}.text-info{color:#fff}a.text-info:focus,a.text-info:hover{color:#e6e6e6}.text-warning{color:#fff}a.text-warning:focus,a.text-warning:hover{color:#e6e6e6}.text-danger{color:#fff}a.text-danger:focus,a.text-danger:hover{color:#e6e6e6}.bg-info{background-color:#006bb4}a.bg-info:focus,a.bg-info:hover{background-color:#004d81}.list-unstyled{list-style:none;padding-left:0}@media (min-width:0){.dl-horizontal dt{clear:left;float:left;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap;width:160px}.dl-horizontal dd{margin-left:180px}}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;position:relative;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-timing-function:ease;transition-timing-function:ease}.btn{background-image:none;border:1px solid #0000;border-radius:4px;cursor:pointer;display:inline-block;font-size:14px;font-weight:400;line-height:1.42857143;margin-bottom:0;padding:5px 15px;text-align:center;touch-action:manipulation;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{box-shadow:0 0 0 1px #fff,0 0 0 2px #0079a5}.btn.focus,.btn:focus,.btn:hover{color:#fff;text-decoration:none}.btn.active,.btn:active{background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125);outline:0}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{-webkit-box-shadow:none;box-shadow:none;cursor:not-allowed;filter:alpha(opacity=65);opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{background-color:#006bb4;border-color:#006bb4;color:#fff}.btn-default.focus,.btn-default:focus{background-color:#004d81;border-color:#001f35;color:#fff}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.dropdown-toggle.btn-default{background-color:#004d81;border-color:#004777;color:#fff}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{background-color:#00375d;border-color:#001f35;color:#fff}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#006bb4;border-color:#006bb4}.btn-default .badge{background-color:#fff;color:#006bb4}.btn-primary{background-color:#006bb4;border-color:#006bb4;color:#fff}.btn-primary.focus,.btn-primary:focus{background-color:#004d81;border-color:#001f35;color:#fff}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{background-color:#004d81;border-color:#004777;color:#fff}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{background-color:#00375d;border-color:#001f35;color:#fff}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#006bb4;border-color:#006bb4}.btn-primary .badge{background-color:#fff;color:#006bb4}.btn-xs{border-radius:4px;font-size:12px;line-height:1.5;padding:1px 5px}.navbar{border:1px solid #0000;margin-bottom:0;min-height:45px;position:relative}@media (min-width:0){.navbar{border-radius:4px}.navbar-header{float:left}}.navbar-collapse{-webkit-overflow-scrolling:touch;border-top:1px solid #0000;box-shadow:inset 0 1px 0 #ffffff1a;overflow-x:visible;padding-left:10px;padding-right:10px}.navbar-collapse.in{overflow-y:auto}@media (min-width:0){.navbar-collapse{border-top:0;box-shadow:none;width:auto}.navbar-collapse.collapse{display:block!important;height:auto!important;overflow:visible!important;padding-bottom:0}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-left:-10px;margin-right:-10px}@media (min-width:0){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-left:0;margin-right:0}}.navbar-fixed-bottom,.navbar-fixed-top{left:0;position:fixed;right:0;z-index:1050}@media (min-width:0){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{border-width:0 0 1px;top:0}.navbar-fixed-bottom{border-width:1px 0 0;bottom:0;margin-bottom:0}.navbar-brand{float:left;font-size:18px;height:45px;line-height:20px;padding:12.5px 10px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:0){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-10px}}.navbar-toggle{background-color:initial;background-image:none;border:1px solid #0000;border-radius:4px;float:right;margin-bottom:5.5px;margin-right:10px;margin-top:5.5px;padding:9px 10px;position:relative}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{border-radius:1px;display:block;height:2px;width:22px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:0){.navbar-toggle{display:none}}.navbar-nav{margin:6.25px -10px}.navbar-nav>li>a{line-height:20px;padding-bottom:10px;padding-top:10px}@media (max-width:-1){.navbar-nav .open .dropdown-menu{background-color:initial;border:0;box-shadow:none;float:none;margin-top:0;position:static;width:auto}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:0){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-bottom:12.5px;padding-top:12.5px}}.navbar-form{border-bottom:1px solid #0000;border-top:1px solid #0000;-webkit-box-shadow:inset 0 1px 0 #ffffff1a,0 1px 0 #ffffff1a;box-shadow:inset 0 1px 0 #ffffff1a,0 1px 0 #ffffff1a;margin:6.5px -10px;padding:10px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;vertical-align:middle;width:auto}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-bottom:0;margin-top:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{margin-left:0;position:relative}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:-1){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:0){.navbar-form{border:0;-webkit-box-shadow:none;box-shadow:none;margin-left:0;margin-right:0;padding-bottom:0;padding-top:0;width:auto}}.navbar-nav>li>.dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:4px;border-top-right-radius:4px;margin-bottom:0}.navbar-text{margin-bottom:12.5px;margin-top:12.5px}@media (min-width:0){.navbar-text{float:left;margin-left:10px;margin-right:10px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-10px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f5f7fa;border-color:#0000}.navbar-default .navbar-brand{color:#69707d}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{background-color:initial;color:#69707d}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#69707d}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{background-color:initial;color:#69707d}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{background-color:initial;color:#343741}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{background-color:initial;color:#69707d}.navbar-default .navbar-toggle{border-color:#d3dce9}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#d3dce9}.navbar-default .navbar-toggle .icon-bar{background-color:#fff}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#0000}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:initial;color:#343741}@media (max-width:-1){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#69707d}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{background-color:initial;color:#69707d}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:initial;color:#343741}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{background-color:initial;color:#69707d}}.navbar-default .navbar-link,.navbar-default .navbar-link:hover{color:#69707d}.navbar-inverse{background-color:#343741;border-color:#1d1f25}.navbar-inverse .navbar-brand{color:#fff}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{background-color:#4b4f5d;color:#fff}.navbar-inverse .navbar-text{color:#fff}.navbar-inverse .navbar-nav>li>a{color:#d3dae6}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{background-color:#61677a;color:#fff}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{background-color:#69707d;color:#fff}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{background-color:initial;color:#b2bac6}.navbar-inverse .navbar-toggle{border-color:#1d1f25}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#1d1f25}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#24262d}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#69707d;color:#fff}@media (max-width:-1){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#1d1f25}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#1d1f25}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#d3dae6}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{background-color:#61677a;color:#fff}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#69707d;color:#fff}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{background-color:initial;color:#b2bac6}}.navbar-inverse .navbar-link{color:#d3dae6}.navbar-inverse .navbar-link:hover{color:#fff}.close{color:#000;filter:alpha(opacity=20);float:right;font-size:21px;font-weight:700;line-height:1;opacity:.2;text-shadow:none}.close:focus,.close:hover{color:#000;cursor:pointer;filter:alpha(opacity=50);opacity:.5;text-decoration:none}button.close{-webkit-appearance:none;background:#0000;border:0;cursor:pointer;padding:0}.modal,.modal-open{overflow:hidden}.modal{-webkit-overflow-scrolling:touch;bottom:0;display:none;left:0;outline:0;position:fixed;right:0;top:0;z-index:1070}.modal.fade .modal-dialog{-webkit-transform:translateY(-25%);-ms-transform:translateY(-25%);-o-transform:translateY(-25%);transform:translateY(-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0);-ms-transform:translate(0);-o-transform:translate(0);transform:translate(0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{margin:10px;position:relative;width:auto}.modal-content{background-clip:padding-box;background-color:#fff;border:1px solid #0003;border-radius:4px;-webkit-box-shadow:0 3px 9px #00000080;box-shadow:0 3px 9px #00000080;outline:0;position:relative}.modal-backdrop{background-color:#000;bottom:0;left:0;position:fixed;right:0;top:0;z-index:1060}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{border-bottom:1px solid #e5e5e5;padding:15px}.modal-header .close{margin-top:-2px}.modal-title{line-height:1.42857143;margin:0}.modal-body{padding:15px;position:relative}.modal-footer{border-top:1px solid #e5e5e5;padding:15px;text-align:right}.modal-scrollbar-measure{height:50px;overflow:scroll;position:absolute;top:-9999px;width:50px}@media (min-width:768px){.modal-dialog{margin:30px auto;width:600px}.modal-content{-webkit-box-shadow:0 5px 15px #00000080;box-shadow:0 5px 15px #00000080}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}@-webkit-keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}.progress{background-color:#b8bec8;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px #0000001a;box-shadow:inset 0 1px 2px #0000001a;height:20px;margin-bottom:20px;overflow:hidden}.progress-bar{background-color:#54b399;color:#fff;float:left;font-size:12px;height:100%;line-height:20px;text-align:center;-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease;width:0}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-image:-o-linear-gradient(45deg,#ffffff26 25%,#0000 25%,#0000 50%,#ffffff26 50%,#ffffff26 75%,#0000 75%,#0000);background-image:linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#017d73}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-image:-o-linear-gradient(45deg,#ffffff26 25%,#0000 25%,#0000 50%,#ffffff26 50%,#ffffff26 75%,#0000 75%,#0000);background-image:linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000)}.progress-bar-info{background-color:#006bb4}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-image:-o-linear-gradient(45deg,#ffffff26 25%,#0000 25%,#0000 50%,#ffffff26 50%,#ffffff26 75%,#0000 75%,#0000);background-image:linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000)}.progress-bar-warning{background-color:#f5a700}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-image:-o-linear-gradient(45deg,#ffffff26 25%,#0000 25%,#0000 50%,#ffffff26 50%,#ffffff26 75%,#0000 75%,#0000);background-image:linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000)}.progress-bar-danger{background-color:#bd271e}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000);background-image:-o-linear-gradient(45deg,#ffffff26 25%,#0000 25%,#0000 50%,#ffffff26 50%,#ffffff26 75%,#0000 75%,#0000);background-image:linear-gradient(45deg,#ffffff26 25%,#0000 0,#0000 50%,#ffffff26 0,#ffffff26 75%,#0000 0,#0000)}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{background-color:#fff;border:1px solid #d3dae6;display:block;margin-bottom:-1px;padding:10px 15px;position:relative}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;margin-bottom:0}.list-group-item--noBorder{border-top:0}a.list-group-item,button.list-group-item{color:#69707d}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#343741}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{background-color:#f5f7fa;color:#69707d;text-decoration:none}button.list-group-item{text-align:left;width:100%}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#d3dae6;color:#b2bac6;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#b2bac6}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{background-color:#343741;border-color:#343741;color:#343741;z-index:2}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#969bab}.list-group-item-success{background-color:#017d73;color:#fff}a.list-group-item-success,button.list-group-item-success{color:#fff}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{background-color:#01645c;color:#fff}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{background-color:#fff;border-color:#fff;color:#fff}.list-group-item-info{background-color:#006bb4;color:#fff}a.list-group-item-info,button.list-group-item-info{color:#fff}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{background-color:#005c9b;color:#fff}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{background-color:#fff;border-color:#fff;color:#fff}.list-group-item-warning{background-color:#f5a700;color:#fff}a.list-group-item-warning,button.list-group-item-warning{color:#fff}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{background-color:#dc9600;color:#fff}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{background-color:#fff;border-color:#fff;color:#fff}.list-group-item-danger{background-color:#bd271e;color:#fff}a.list-group-item-danger,button.list-group-item-danger{color:#fff}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{background-color:#a7221b;color:#fff}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{background-color:#fff;border-color:#fff;color:#fff}.list-group-item-heading{margin-bottom:5px;margin-top:0}.list-group-item-text{line-height:1.3;margin-bottom:0}.nav{list-style:none;margin-bottom:0;padding-left:0}.nav>li,.nav>li>a{display:block;position:relative}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{background-color:#d3dae6;text-decoration:none}.nav>li.disabled>a{color:#b2bac6}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{background-color:initial;color:#b2bac6;cursor:not-allowed;text-decoration:none}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#d3dae6;border-color:#006bb4}.nav .nav-divider{background-color:#e5e5e5;height:1px;margin:9px 0;overflow:hidden}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #d3dae6}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{border:1px solid #0000;border-radius:4px 4px 0 0;line-height:1.42857143;margin-right:2px}.nav-tabs>li>a:hover{background-color:#fff;border-color:#d3dae6}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{background-color:#fff;border:1px solid #d3dae6;border-bottom-color:#0000;color:#343741;cursor:default}.nav-tabs.nav-justified{border-bottom:0;width:100%}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{left:auto;top:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{border-radius:4px;margin-right:0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #fff}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #fff;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{background-color:#006bb4;color:#fff}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-left:0;margin-top:2px}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{left:auto;top:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{border-radius:4px;margin-right:0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #fff}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #fff;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:-1px}.alert{border:1px solid #0000;border-radius:4px;margin-bottom:20px;padding:15px}.alert h4{color:inherit;margin-top:0}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{color:inherit;position:relative;right:-21px;top:-2px}.alert-success{background-color:#017d73;border-color:#014a44;color:#fff}.alert-success hr{border-top-color:#00312d}.alert-success .alert-link{color:#e6e6e6}.alert-info{background-color:#006bb4;border-color:#004d81;color:#fff}.alert-info hr{border-top-color:#003e68}.alert-info .alert-link{color:#e6e6e6}.alert-warning{background-color:#f5a700;border-color:#c28400;color:#fff}.alert-warning hr{border-top-color:#a97300}.alert-warning .alert-link{color:#e6e6e6}.alert-danger{background-color:#bd271e;border-color:#911e17;color:#fff}.alert-danger hr{border-top-color:#7b1914}.alert-danger .alert-link{color:#e6e6e6}.bsTooltip{word-wrap:normal;display:block;filter:alpha(opacity=0);font-family:Open Sans,Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.42857143;opacity:0;position:absolute;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:1040}.bsTooltip.in{filter:alpha(opacity=80);opacity:.8}.bsTooltip.top{margin-top:-3px;padding:5px 0}.bsTooltip.right{margin-left:3px;padding:0 5px}.bsTooltip.bottom{margin-top:3px;padding:5px 0}.bsTooltip.left{margin-left:-3px;padding:0 5px}.bsTooltip-inner{background-color:#000;border-radius:4px;color:#fff;max-width:200px;padding:3px 8px;text-align:center}.bsTooltip-arrow{border-color:#0000;border-style:solid;height:0;position:absolute;width:0}.bsTooltip.top .bsTooltip-arrow{border-top-color:#000;border-width:5px 5px 0;bottom:0;left:50%;margin-left:-5px}.bsTooltip.top-left .bsTooltip-arrow{border-top-color:#000;border-width:5px 5px 0;bottom:0;margin-bottom:-5px;right:5px}.bsTooltip.top-right .bsTooltip-arrow{border-top-color:#000;border-width:5px 5px 0;bottom:0;left:5px;margin-bottom:-5px}.bsTooltip.right .bsTooltip-arrow{border-right-color:#000;border-width:5px 5px 5px 0;left:0;margin-top:-5px;top:50%}.bsTooltip.left .bsTooltip-arrow{border-left-color:#000;border-width:5px 0 5px 5px;margin-top:-5px;right:0;top:50%}.bsTooltip.bottom .bsTooltip-arrow{border-bottom-color:#000;border-width:0 5px 5px;left:50%;margin-left:-5px;top:0}.bsTooltip.bottom-left .bsTooltip-arrow{border-bottom-color:#000;border-width:0 5px 5px;margin-top:-5px;right:5px;top:0}.bsTooltip.bottom-right .bsTooltip-arrow{border-bottom-color:#000;border-width:0 5px 5px;left:5px;margin-top:-5px;top:0}.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}.caret{border-left:4px solid #0000;border-right:4px solid #0000;border-top:4px dashed;border-top:4px solid\9;display:inline-block;height:0;margin-left:2px;vertical-align:middle;width:0}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{background-clip:padding-box;background-color:#fff;border:1px solid #d3dae6;border-radius:4px;box-shadow:0 4px 8px 0 #0000001a;display:none;float:left;font-size:14px;left:0;list-style:none;margin:2px 0 0;min-width:160px;padding:5px 0;position:absolute;text-align:left;top:100%;z-index:1000}.dropdown-menu.pull-right{left:auto;right:0}.dropdown-menu .divider{background-color:#d3dae6;height:1px;margin:9px 0;overflow:hidden}.dropdown-menu>li>a,.dropdown-menu>li>button{clear:both;color:#7b7b7b;display:block;font-weight:400;line-height:1.42857143;padding:3px 20px;white-space:nowrap}.dropdown-menu>li>button{appearance:none;background:none;border:none;text-align:left;width:100%}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover,.dropdown-menu>li>button:focus,.dropdown-menu>li>button:hover{background-color:#343741;color:#fff;text-decoration:none}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>button,.dropdown-menu>.active>button:focus,.dropdown-menu>.active>button:hover{background-color:#343741;color:#fff;outline:0;text-decoration:none}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#98a2b3}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{background-color:initial;background-image:none;cursor:not-allowed;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);text-decoration:none}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{color:#98a2b3;display:block;font-size:12px;line-height:1.42857143;padding:3px 20px;white-space:nowrap}.dropdown-backdrop{bottom:0;left:0;position:fixed;right:0;top:0;z-index:990}.pull-right>.dropdown-menu{left:auto;right:0}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-bottom:4px dashed;border-bottom:4px solid\9;border-top:0;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{bottom:100%;margin-bottom:2px;top:auto}@media (min-width:0){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.input-group{border-collapse:initial;display:table;position:relative}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{float:left;margin-bottom:0;position:relative;width:100%;z-index:2}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon{border-radius:4px;font-size:18px;height:62px;line-height:1.3333333;padding:18px 27px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon{height:62px;line-height:62px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon{border-radius:4px;font-size:12px;height:32px;line-height:1.5;padding:6px 9px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon{height:32px;line-height:32px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon{height:auto}.input-group .form-control,.input-group-addon{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child){border-radius:0}.input-group-addon{background-color:#d3dae6;border:1px solid #d3dae6;border-radius:4px;color:#343741;font-size:14px;font-weight:400;line-height:1;padding:5px 15px;text-align:center;vertical-align:middle;white-space:nowrap;width:1%}.input-group-addon.input-sm{border-radius:4px;font-size:12px;padding:6px 9px}.input-group-addon.input-lg{border-radius:4px;font-size:18px;padding:18px 27px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.pagination{border-radius:4px;display:inline-block;margin:20px 0;padding-left:0}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{background-color:initial;border:1px solid #0000;color:#006bb4;float:left;line-height:1.42857143;margin-left:-1px;padding:5px 15px;position:relative;text-decoration:none}.pagination>li:first-child>a,.pagination>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px;margin-left:0}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{background-color:#0000;border-color:#0000;color:#006bb4;z-index:2}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{background-color:#0000;border-color:#0000;color:#343741;cursor:default;z-index:3}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{background-color:#26262600;border-color:#0000;color:#343741;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{font-size:18px;line-height:1.3333333;padding:18px 27px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination-sm>li>a,.pagination-sm>li>span{font-size:12px;line-height:1.5;padding:6px 9px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pager{list-style:none;margin:20px 0;padding-left:0;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{background-color:initial;border:1px solid #0000;border-radius:0;display:inline-block;padding:5px 14px}.pager li>a:focus,.pager li>a:hover{background-color:#0000;text-decoration:none}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{background-color:initial;color:#fff;cursor:not-allowed}.label{border-radius:.25em;color:#fff;display:inline;font-size:75%;font-weight:700;line-height:1;padding:.2em .6em .3em;text-align:center;vertical-align:initial;white-space:nowrap}a.label:focus,a.label:hover{color:#fff;cursor:pointer;text-decoration:none}.label:empty{display:none}.label-default{background-color:#006bb4}.label-default[href]:focus,.label-default[href]:hover{background-color:#004d81}.label-primary{background-color:#343741}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#1d1f25}.label-success{background-color:#017d73}.label-success[href]:focus,.label-success[href]:hover{background-color:#014a44}.label-info{background-color:#006bb4}.label-info[href]:focus,.label-info[href]:hover{background-color:#004d81}.label-warning{background-color:#f5a700}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#c28400}.label-danger{background-color:#bd271e}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#911e17}.panel{background-color:#fff;border:1px solid #0000;border-radius:4px;-webkit-box-shadow:0 1px 1px #0000000d;box-shadow:0 1px 1px #0000000d;margin-bottom:20px}.panel-body{padding:15px}.panel-heading{border-bottom:1px solid #0000;border-top-left-radius:3px;border-top-right-radius:3px;padding:10px 15px}.panel-heading>.dropdown .dropdown-toggle,.panel-title{color:inherit}.panel-title{font-size:16px;margin-bottom:0;margin-top:0}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{background-color:#f5f7fa;border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-top:1px solid #d3dae6;padding:10px 15px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-radius:0;border-width:1px 0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #d3dae6}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{border-radius:4px;margin-bottom:0}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #d3dae6}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #d3dae6}.panel-default{border-color:#d3dae6}.panel-default>.panel-heading{background-color:#f5f7fa;border-color:#d3dae6;color:#7b7b7b}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d3dae6}.panel-default>.panel-heading .badge{background-color:#7b7b7b;color:#f5f7fa}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d3dae6}.panel-primary{border-color:#343741}.panel-primary>.panel-heading{background-color:#343741;border-color:#343741;color:#fff}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#343741}.panel-primary>.panel-heading .badge{background-color:#fff;color:#343741}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#343741}.panel-success{border-color:#014a44}.panel-success>.panel-heading{background-color:#017d73;border-color:#014a44;color:#fff}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#014a44}.panel-success>.panel-heading .badge{background-color:#fff;color:#017d73}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#014a44}.panel-info{border-color:#004d81}.panel-info>.panel-heading{background-color:#006bb4;border-color:#004d81;color:#fff}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#004d81}.panel-info>.panel-heading .badge{background-color:#fff;color:#006bb4}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#004d81}.panel-warning{border-color:#c28400}.panel-warning>.panel-heading{background-color:#f5a700;border-color:#c28400;color:#fff}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#c28400}.panel-warning>.panel-heading .badge{background-color:#fff;color:#f5a700}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#c28400}.panel-danger{border-color:#911e17}.panel-danger>.panel-heading{background-color:#bd271e;border-color:#911e17;color:#fff}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#911e17}.panel-danger>.panel-heading .badge{background-color:#fff;color:#bd271e}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#911e17}.popover{word-wrap:normal;background-clip:padding-box;background-color:#fff;border:1px solid #d3dae6;border-radius:4px;box-shadow:0 4px 8px 0 #0000001a;display:none;font-family:Open Sans,Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;left:0;letter-spacing:normal;line-break:auto;line-height:1.42857143;max-width:276px;padding:1px;position:absolute;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;top:0;white-space:normal;word-break:normal;word-spacing:normal;z-index:1010}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:3px 3px 0 0;font-size:14px;margin:0;padding:8px 14px}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{border-color:#0000;border-style:solid;display:block;height:0;position:absolute;width:0}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{border-bottom-width:0;border-top-color:#d3dae6;bottom:-11px;left:50%;margin-left:-11px}.popover.top>.arrow:after{border-bottom-width:0;border-top-color:#fff;bottom:1px;content:" ";margin-left:-10px}.popover.right>.arrow{border-left-width:0;border-right-color:#d3dae6;left:-11px;margin-top:-11px;top:50%}.popover.right>.arrow:after{border-left-width:0;border-right-color:#fff;bottom:-10px;content:" ";left:1px}.popover.bottom>.arrow{border-bottom-color:#d3dae6;border-top-width:0;left:50%;margin-left:-11px;top:-11px}.popover.bottom>.arrow:after{border-bottom-color:#fff;border-top-width:0;content:" ";margin-left:-10px;top:1px}.popover.left>.arrow{border-left-color:#d3dae6;border-right-width:0;margin-top:-11px;right:-11px;top:50%}.popover.left>.arrow:after{border-left-color:#fff;border-right-width:0;bottom:-10px;content:" ";right:1px}.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{content:" ";display:table}.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{background-color:initial;border:0;color:#0000;font:0/0 a;text-shadow:none}.hidden{display:none!important}.affix{position:fixed}.navbar>.container-fluid>.navbar-form:not(.pull-right):first-child,.navbar>.container-fluid>.navbar-nav:not(.pull-right):first-child{margin-left:-15px;margin-top:4px}.navbar{border-width:0}.navbar-btn-link{border-radius:0;margin:0}@media (max-width:768px){.navbar-btn-link{text-align:left;width:100%}}.navbar-default .badge{background-color:#fff;color:#f5f7fa}.navbar-inverse .kbnGlobalNav__logoBrand{background-color:#4b4f5d;height:45px;width:252px}.navbar-inverse .kbnGlobalNav__smallLogoBrand{background-color:#4b4f5d;height:45px;width:45px}.navbar-inverse .badge{background-color:#fff;color:#4b4f5d}.navbar-brand{cursor:default;font-size:1.8em;user-select:none}.navbar-nav{font-size:12px}.navbar-nav>.active>a{background-color:initial;border-bottom-color:#7b7b7b}.navbar-toggle{margin-top:4px}.text-primary,.text-primary:hover{color:#343741}.text-success,.text-success:hover{color:#017d73}.text-danger,.text-danger:hover{color:#bd271e}.text-warning,.text-warning:hover{color:#f5a700}.text-info,.text-info:hover{color:#006bb4}.table .danger,.table .danger a,.table .info,.table .info a,.table .success,.table .success a,.table .warning,.table .warning a,table .danger,table .danger a,table .info,table .info a,table .success,table .success a,table .warning,table .warning a{color:#fff}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #d3dae6}.form-control{border-width:1px}.form-control,.form-control:focus{-webkit-box-shadow:none;box-shadow:none}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline{color:#f5a700}.has-warning .form-control,.has-warning .form-control:focus{border:1px solid #f5a700}.has-warning .input-group-addon{border-color:#f5a700}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline{color:#bd271e}.has-error .form-control,.has-error .form-control:focus{border:1px solid #bd271e}.has-error .input-group-addon{border-color:#bd271e}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline{color:#017d73}.has-success .form-control,.has-success .form-control:focus{border:solid #017d73}.has-success .input-group-addon{border-color:#017d73}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{border-color:#0000}.pager a,.pager a:hover{color:#fff}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{background-color:#26262600}.panel{border-radius:0;-webkit-box-shadow:0 0 0 #0000;box-shadow:0 0 0 #0000}.progress{-webkit-box-shadow:none;box-shadow:none}.progress .progress-bar{font-size:10px;line-height:10px}.well{-webkit-box-shadow:none;box-shadow:none} \ No newline at end of file diff --git a/packages/kbn-search-connectors/components/cron_editor/__snapshots__/cron_editor.test.tsx.snap b/packages/kbn-search-connectors/components/cron_editor/__snapshots__/cron_editor.test.tsx.snap index ba8acd3925f10..5625124ec3efb 100644 --- a/packages/kbn-search-connectors/components/cron_editor/__snapshots__/cron_editor.test.tsx.snap +++ b/packages/kbn-search-connectors/components/cron_editor/__snapshots__/cron_editor.test.tsx.snap @@ -1,11314 +1,3676 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`CronEditor is rendered with a DAY frequency 1`] = ` - - - } - labelType="label" +Array [ +
-
- - - -
-
- - -
- - - -
- - - - -
- - - - - -
-
-
-
-
-
-
+ Frequency +
- - - - } - labelType="label" +
-
- - - -
+ Every +
- -
- - - - - - , - "ctr": 4, - "insertionPoint": undefined, - "isSpeedy": false, - "key": "css", - "nonce": undefined, - "prepend": undefined, - "tags": Array [ - , - , - , - , - ], - }, - } - } - isStringTag={true} - serialized={ - Object { - "map": undefined, - "name": "bqv98l-euiFlexGroup-responsive-xs-flexStart-stretch-row", - "next": undefined, - "styles": "display:flex;align-items:stretch;flex-grow:1;label:euiFlexGroup;;;@media only screen and (max-width: 767px){flex-wrap:wrap;&>.euiFlexItem{inline-size: 100%; flex-basis:100%;}};label:responsive;;;;gap:4px;;label:xs;;;justify-content:flex-start;label:flexStart;;;align-items:stretch;label:stretch;;;flex-direction:row;label:row;;;", - "toString": [Function], - } - } + + + + + + + +
+ +
- + +
- - - -`; - -exports[`CronEditor is rendered with a HOUR frequency 1`] = ` - - - } - labelType="label" +
+
, +
-
- - - -
+ Time + +
+
- - +
- - - + 10 + + + + + + + + + + + + + + +
- - - - -
- - - - - -
-
+ +
-
-
-
-
- - - - } - labelType="label" - > -
+
+
- - -
-
- - +
- - - -
- - - - -
- - - - - -
-
-
+ +
-
-
+
+ -
- -
+ + , +] `; -exports[`CronEditor is rendered with a MINUTE frequency 1`] = ` - - - } - labelType="label" +exports[`CronEditor is rendered with a HOUR frequency 1`] = ` +Array [ +
-
- - - -
-
- - -
- - - -
- - - - -
- - - - - -
-
-
-
-
-
-
+ Frequency +
- - - - } - labelType="label" +
-
- - - -
+ Every +
- - -
- - - -
- - - - -
- - - - - -
-
-
- - - -
-
-
+ minute + + + + + + + +
+ + +
- - - -`; - -exports[`CronEditor is rendered with a MONTH frequency 1`] = ` - - - } - labelType="label" +
+
, +
-
- - - -
-
- - -
- - - -
- - - - -
- - - - - -
-
-
-
-
-
-
+ Minute +
- - - - } - labelType="label" +
-
- - - -
+ At +
- - -
- - - -
- - - - -
- - - - - -
-
-
-
-
-
-
-
- - - } - labelType="label" - > -
-
- - - -
-
- -
- - - - - - , - "ctr": 4, - "insertionPoint": undefined, - "isSpeedy": false, - "key": "css", - "nonce": undefined, - "prepend": undefined, - "tags": Array [ - , - , - , - , - ], - }, - } - } - isStringTag={true} - serialized={ - Object { - "map": undefined, - "name": "bqv98l-euiFlexGroup-responsive-xs-flexStart-stretch-row", - "next": undefined, - "styles": "display:flex;align-items:stretch;flex-grow:1;label:euiFlexGroup;;;@media only screen and (max-width: 767px){flex-wrap:wrap;&>.euiFlexItem{inline-size: 100%; flex-basis:100%;}};label:responsive;;;;gap:4px;;label:xs;;;justify-content:flex-start;label:flexStart;;;align-items:stretch;label:stretch;;;flex-direction:row;label:row;;;", - "toString": [Function], - } - } - /> -
- -
- - - - - - , - "ctr": 4, - "insertionPoint": undefined, - "isSpeedy": false, - "key": "css", - "nonce": undefined, - "prepend": undefined, - "tags": Array [ - , - , - , - , - ], - }, - } - } - isStringTag={true} - serialized={ - Object { - "map": undefined, - "name": "kpsrin-euiFlexItem-growZero", - "next": undefined, - "styles": "display:flex;flex-direction:column;label:euiFlexItem;;;flex-grow:0;flex-basis:auto;label:growZero;;;;", - "toString": [Function], - } - } - /> -
- - -
- - - -
- - - - -
- - - - - -
-
-
-
-
-
-
-
-
- -
- - - - - - , - "ctr": 4, - "insertionPoint": undefined, - "isSpeedy": false, - "key": "css", - "nonce": undefined, - "prepend": undefined, - "tags": Array [ - , - , - , - , - ], - }, - } - } - isStringTag={true} - serialized={ - Object { - "map": undefined, - "name": "9sbomz-euiFlexItem-grow-1", - "next": undefined, - "styles": "display:flex;flex-direction:column;label:euiFlexItem;;;flex-basis:0%;label:grow;;;flex-grow:1;label:1;;;", - "toString": [Function], - } - } - /> -
- - -
- - - -
- - - - -
- - - - - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - + 01 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ + , +] +`; + +exports[`CronEditor is rendered with a MINUTE frequency 1`] = ` +Array [ +
+
+ +
+
+
+ +
+ +
+ + +
+
+
+
+
, +
+
+ +
+
+
+ +
+ +
+ + +
+
+ +
+
+
, +] +`; + +exports[`CronEditor is rendered with a MONTH frequency 1`] = ` +Array [ +
+
+ +
+
+
+ +
+ +
+ + +
+
+
+
+
, +
+
+ +
+
+
+ +
+ +
+ + +
+
+
+
+
, +
+
+ +
+
+
+
+
+ +
+ +
+ + +
+
+
+
+
+
+ +
+ +
+ + +
+
+
+
+
+
+
, +] `; exports[`CronEditor is rendered with a WEEK frequency 1`] = ` - - - } - labelType="label" +Array [ +
+ +
+
+
+ +
+ +
+ + +
+
+
+
+
, +
+
+ +
+
- + On + +
- - + + + + + + + + +
+ + +
+
+
+
, +
+
+ +
+
- +
+ +
+ +
+ + +
+
+
+
+
- +
- - - + 51 + + + + + + + + + +
- - - - -
- - - - - -
-
+ +
-
- +
+
-
- , +] +`; + +exports[`CronEditor is rendered with a YEAR frequency 1`] = ` +Array [ +
- - } - labelType="label" +
+ +
+
-
- - - -
+ Every +
- - -
- - - -
- - - - -
- - - - - -
-
-
-
-
-
+ minute + + + + + + + +
+ + +
- - - } - labelType="label" +
+
, +
+
+ +
+
-
- - - -
+ In +
- -
- - - - - - , - "ctr": 4, - "insertionPoint": undefined, - "isSpeedy": false, - "key": "css", - "nonce": undefined, - "prepend": undefined, - "tags": Array [ - , - , - , - , - ], - }, - } - } - isStringTag={true} - serialized={ - Object { - "map": undefined, - "name": "bqv98l-euiFlexGroup-responsive-xs-flexStart-stretch-row", - "next": undefined, - "styles": "display:flex;align-items:stretch;flex-grow:1;label:euiFlexGroup;;;@media only screen and (max-width: 767px){flex-wrap:wrap;&>.euiFlexItem{inline-size: 100%; flex-basis:100%;}};label:responsive;;;;gap:4px;;label:xs;;;justify-content:flex-start;label:flexStart;;;align-items:stretch;label:stretch;;;flex-direction:row;label:row;;;", - "toString": [Function], - } - } + + + + + + + + + + + + + +
+ +
- + +
- - - -`; - -exports[`CronEditor is rendered with a YEAR frequency 1`] = ` - - - } - labelType="label" +
+
, +
-
- - - -
-
- - -
- - - -
- - - - -
- - - - - -
-
-
-
-
-
-
+ Date +
- - - - } - labelType="label" +
-
- - - -
+ On the +
- - -
- - - -
- - - - -
- - - - - -
-
-
-
-
-
+ 1st + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
- - - } - labelType="label" +
+
, +
+
+ +
+
- - -
-
- - +
- - - -
- - - - -
- - - - - -
-
-
+ +
-
-
+
+
-
-
- - } - labelType="label" - > -
- - -
-
-
- - - - - - , - "ctr": 4, - "insertionPoint": undefined, - "isSpeedy": false, - "key": "css", - "nonce": undefined, - "prepend": undefined, - "tags": Array [ - , - , - , - , - ], - }, - } - } - isStringTag={true} - serialized={ - Object { - "map": undefined, - "name": "bqv98l-euiFlexGroup-responsive-xs-flexStart-stretch-row", - "next": undefined, - "styles": "display:flex;align-items:stretch;flex-grow:1;label:euiFlexGroup;;;@media only screen and (max-width: 767px){flex-wrap:wrap;&>.euiFlexItem{inline-size: 100%; flex-basis:100%;}};label:responsive;;;;gap:4px;;label:xs;;;justify-content:flex-start;label:flexStart;;;align-items:stretch;label:stretch;;;flex-direction:row;label:row;;;", - "toString": [Function], - } - } - /> + class="euiFormControlLayout__childrenWrapper" + style="--euiFormControlRightIconsCount: 1;" + > +
- -
- - - - - - , - "ctr": 4, - "insertionPoint": undefined, - "isSpeedy": false, - "key": "css", - "nonce": undefined, - "prepend": undefined, - "tags": Array [ - , - , - , - , - ], - }, - } - } - isStringTag={true} - serialized={ - Object { - "map": undefined, - "name": "kpsrin-euiFlexItem-growZero", - "next": undefined, - "styles": "display:flex;flex-direction:column;label:euiFlexItem;;;flex-grow:0;flex-basis:auto;label:growZero;;;;", - "toString": [Function], - } - } - /> -
- - -
- - - -
- - - - -
- - - - - -
-
-
-
-
-
-
-
-
- -
- - - - - - , - "ctr": 4, - "insertionPoint": undefined, - "isSpeedy": false, - "key": "css", - "nonce": undefined, - "prepend": undefined, - "tags": Array [ - , - , - , - , - ], - }, - } - } - isStringTag={true} - serialized={ - Object { - "map": undefined, - "name": "9sbomz-euiFlexItem-grow-1", - "next": undefined, - "styles": "display:flex;flex-direction:column;label:euiFlexItem;;;flex-basis:0%;label:grow;;;flex-grow:1;label:1;;;", - "toString": [Function], - } - } - /> -
- - -
- - - -
- - - - -
- - - - - -
-
-
-
-
-
-
-
-
+ +
-
+
-
- -
+ + , +] `; diff --git a/packages/kbn-search-connectors/components/cron_editor/cron_editor.test.tsx b/packages/kbn-search-connectors/components/cron_editor/cron_editor.test.tsx index cb867b91951cc..060bef2930142 100644 --- a/packages/kbn-search-connectors/components/cron_editor/cron_editor.test.tsx +++ b/packages/kbn-search-connectors/components/cron_editor/cron_editor.test.tsx @@ -28,7 +28,7 @@ describe('CronEditor', () => { /> ); - expect(component).toMatchSnapshot(); + expect(component.render()).toMatchSnapshot(); }); }); diff --git a/packages/kbn-securitysolution-autocomplete/src/field/__tests__/__snapshots__/index.test.tsx.snap b/packages/kbn-securitysolution-autocomplete/src/field/__tests__/__snapshots__/index.test.tsx.snap index 1a4c9076a20d6..d9e917684d768 100644 --- a/packages/kbn-securitysolution-autocomplete/src/field/__tests__/__snapshots__/index.test.tsx.snap +++ b/packages/kbn-securitysolution-autocomplete/src/field/__tests__/__snapshots__/index.test.tsx.snap @@ -17,6 +17,7 @@ Object { >