[data.search.autocomplete] Move autocomplete method to UI settings (#106331) (#106950)

* [data.search.autocomplete] Move autocomplete method to UI settings

* Use select rather than boolean

* Add ftue tour

* Make a select rather than text box

* Only show when focused and first time page is loaded

* Add docs link

* Reverse order of sections

* Update docs/concepts/index.asciidoc

Co-authored-by: gchaps <33642766+gchaps@users.noreply.github.com>

* Update docs/concepts/index.asciidoc

Co-authored-by: gchaps <33642766+gchaps@users.noreply.github.com>

* Docs updates

* setting

* telemetry

* Add links to docs

* Fix translations

* Fix failing test

* Fix test

* Fix tests

* Revert changes to querybar service

* Fix discover query

Co-authored-by: gchaps <33642766+gchaps@users.noreply.github.com>
Co-authored-by: Liza K <liza.katz@elastic.co>

Co-authored-by: Lukas Olson <olson.lukas@gmail.com>
Co-authored-by: gchaps <33642766+gchaps@users.noreply.github.com>
Co-authored-by: Liza K <liza.katz@elastic.co>
This commit is contained in:
Kibana Machine 2021-07-28 02:17:22 -04:00 committed by GitHub
parent 395428e4ed
commit 163eca90be
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
27 changed files with 363 additions and 38 deletions

View file

@ -115,6 +115,14 @@ Following are some example KQL queries. For more detailed examples, refer to <<
| `machine.os:win*`
|===
[float]
[[autocomplete-suggestions]]
==== Suggestions for autocomplete
Beginning in 7.14, {kib} uses the {ref}/search-terms-enum.html[terms enum API] for autocomplete. {kib} returns results faster, but suggestions are approximate, sorted alphabetically, and can be outside the selected time range, even if `autocomplete:useTimeFilter` is enabled (as the terms enum API applies time filtering on an index-level, rather than document-level).
Previously, {kib} used the {ref}/search-aggregations-bucket-terms-aggregation.html[terms aggregation API], which is slower, but suggestions included all values that matched your query, and optionally, your time range, and were sorted by popularity. To revert to using the terms aggregation API, go to <<advanced-options, Advanced Settings>>, and set `autocomplete:valueSuggestionMethod` to `terms_agg`.
[float]
==== Additional filters with AND

View file

@ -141,6 +141,7 @@ readonly links: {
readonly luceneQuerySyntax: string;
readonly percolate: string;
readonly queryDsl: string;
readonly autocompleteChanges: string;
};
readonly date: {
readonly dateMath: string;

File diff suppressed because one or more lines are too long

View file

@ -38,5 +38,6 @@ UI_SETTINGS: {
readonly FILTERS_PINNED_BY_DEFAULT: "filters:pinnedByDefault";
readonly FILTERS_EDITOR_SUGGEST_VALUES: "filterEditor:suggestValues";
readonly AUTOCOMPLETE_USE_TIMERANGE: "autocomplete:useTimeRange";
readonly AUTOCOMPLETE_VALUE_SUGGESTION_METHOD: "autocomplete:valueSuggestionMethod";
}
```

View file

@ -38,5 +38,6 @@ UI_SETTINGS: {
readonly FILTERS_PINNED_BY_DEFAULT: "filters:pinnedByDefault";
readonly FILTERS_EDITOR_SUGGEST_VALUES: "filterEditor:suggestValues";
readonly AUTOCOMPLETE_USE_TIMERANGE: "autocomplete:useTimeRange";
readonly AUTOCOMPLETE_VALUE_SUGGESTION_METHOD: "autocomplete:valueSuggestionMethod";
}
```

View file

@ -88,8 +88,16 @@ Sets the file size limit when importing files. The default
value is `100MB`. The highest supported value for this setting is `1GB`.
[[filtereditor-suggestvalues]]`filterEditor:suggestValues`::
Set this property to `false` to prevent the filter editor from suggesting values
for fields.
Set this property to `false` to prevent the filter editor and KQL autocomplete
from suggesting values for fields.
[[autocomplete-valuesuggestionmethod]]`autocomplete:valueSuggestionMethod`::
When set to `terms_enum`, autocomplete uses the terms enum API for value suggestions. Kibana returns results faster, but suggestions are approximate, sorted alphabetically, and can be outside the selected time range.
When set to `terms_agg`, Kibana uses a terms aggregation for value suggestions, which is slower, but suggestions include all values that optionally match your time range and are sorted by popularity.
<<kibana-concepts-searching-your-data, Learn more>>.
[[autocomplete-usetimerange]]`autocomplete:useTimeRange`::
Disable this property to get autocomplete suggestions from your full dataset, rather than from the current time range. <<kibana-concepts-searching-your-data, Learn more>>.
[[filters-pinnedbydefault]]`filters:pinnedByDefault`::
Set this property to `true` to make filters have a global state (be pinned) by

View file

@ -214,6 +214,7 @@ export class DocLinksService {
luceneQuerySyntax: `${ELASTICSEARCH_DOCS}query-dsl-query-string-query.html#query-string-syntax`,
percolate: `${ELASTICSEARCH_DOCS}query-dsl-percolate-query.html`,
queryDsl: `${ELASTICSEARCH_DOCS}query-dsl.html`,
autocompleteChanges: `${KIBANA_DOCS}kibana-concepts-analysts.html#autocomplete-suggestions`,
},
search: {
sessions: `${KIBANA_DOCS}search-sessions.html`,
@ -579,6 +580,7 @@ export interface DocLinksStart {
readonly luceneQuerySyntax: string;
readonly percolate: string;
readonly queryDsl: string;
readonly autocompleteChanges: string;
};
readonly date: {
readonly dateMath: string;

View file

@ -622,6 +622,7 @@ export interface DocLinksStart {
readonly luceneQuerySyntax: string;
readonly percolate: string;
readonly queryDsl: string;
readonly autocompleteChanges: string;
};
readonly date: {
readonly dateMath: string;

View file

@ -45,4 +45,5 @@ export const UI_SETTINGS = {
FILTERS_PINNED_BY_DEFAULT: 'filters:pinnedByDefault',
FILTERS_EDITOR_SUGGEST_VALUES: 'filterEditor:suggestValues',
AUTOCOMPLETE_USE_TIMERANGE: 'autocomplete:useTimeRange',
AUTOCOMPLETE_VALUE_SUGGESTION_METHOD: 'autocomplete:valueSuggestionMethod',
} as const;

View file

@ -15,9 +15,6 @@ export const configSchema = schema.object({
}),
valueSuggestions: schema.object({
enabled: schema.boolean({ defaultValue: true }),
method: schema.oneOf([schema.literal('terms_enum'), schema.literal('terms_agg')], {
defaultValue: 'terms_enum',
}),
tiers: schema.arrayOf(
schema.oneOf([
schema.literal('data_content'),

View file

@ -10,14 +10,17 @@ import { stubIndexPattern, stubFields } from '../../stubs';
import { TimefilterSetup } from '../../query';
import { setupValueSuggestionProvider, ValueSuggestionsGetFn } from './value_suggestion_provider';
import { IUiSettingsClient, CoreSetup } from 'kibana/public';
import { UI_SETTINGS } from '../../../common';
describe('FieldSuggestions', () => {
let getValueSuggestions: ValueSuggestionsGetFn;
let http: any;
let shouldSuggestValues: boolean;
let uiConfig: Record<string, any> = {};
const uiSettings = {
get: (key: string) => uiConfig[key],
} as IUiSettingsClient;
beforeEach(() => {
const uiSettings = { get: (key: string) => shouldSuggestValues } as IUiSettingsClient;
http = { fetch: jest.fn().mockResolvedValue([]) };
getValueSuggestions = setupValueSuggestionProvider({ http, uiSettings } as CoreSetup, {
@ -40,6 +43,8 @@ describe('FieldSuggestions', () => {
});
describe('with value suggestions disabled', () => {
uiConfig = { [UI_SETTINGS.FILTERS_EDITOR_SUGGEST_VALUES]: false };
it('should return an empty array', async () => {
const suggestions = await getValueSuggestions({
indexPattern: stubIndexPattern,
@ -53,7 +58,7 @@ describe('FieldSuggestions', () => {
});
describe('with value suggestions enabled', () => {
shouldSuggestValues = true;
uiConfig = { [UI_SETTINGS.FILTERS_EDITOR_SUGGEST_VALUES]: true };
it('should return true/false for boolean fields', async () => {
const [field] = stubFields.filter(({ type }) => type === 'boolean');
@ -226,5 +231,66 @@ describe('FieldSuggestions', () => {
expect(JSON.parse(callParams.body).filters).toHaveLength(1);
expect(http.fetch).toHaveBeenCalled();
});
it('should use terms_enum', async () => {
uiConfig = {
[UI_SETTINGS.FILTERS_EDITOR_SUGGEST_VALUES]: true,
[UI_SETTINGS.AUTOCOMPLETE_VALUE_SUGGESTION_METHOD]: 'terms_enum',
};
const [field] = stubFields.filter(
({ type, aggregatable }) => type === 'string' && aggregatable
);
await getValueSuggestions({
indexPattern: stubIndexPattern,
field,
query: '',
useTimeRange: true,
});
const callParams = http.fetch.mock.calls[0][1];
expect(JSON.parse(callParams.body)).toHaveProperty('method', 'terms_enum');
});
it('should use terms_agg', async () => {
uiConfig = {
[UI_SETTINGS.FILTERS_EDITOR_SUGGEST_VALUES]: true,
[UI_SETTINGS.AUTOCOMPLETE_VALUE_SUGGESTION_METHOD]: 'terms_agg',
};
const [field] = stubFields.filter(
({ type, aggregatable }) => type === 'string' && aggregatable
);
await getValueSuggestions({
indexPattern: stubIndexPattern,
field,
query: '',
useTimeRange: true,
});
const callParams = http.fetch.mock.calls[0][1];
expect(JSON.parse(callParams.body)).toHaveProperty('method', 'terms_agg');
});
it('should use method passed in', async () => {
uiConfig = {
[UI_SETTINGS.FILTERS_EDITOR_SUGGEST_VALUES]: true,
[UI_SETTINGS.AUTOCOMPLETE_VALUE_SUGGESTION_METHOD]: 'terms_agg',
};
const [field] = stubFields.filter(
({ type, aggregatable }) => type === 'string' && aggregatable
);
await getValueSuggestions({
indexPattern: stubIndexPattern,
field,
query: '',
useTimeRange: true,
method: 'terms_agg',
});
const callParams = http.fetch.mock.calls[0][1];
expect(JSON.parse(callParams.body)).toHaveProperty('method', 'terms_agg');
});
});
});

View file

@ -67,7 +67,9 @@ export const setupValueSuggestionProvider = (
query: string,
filters: any = [],
signal?: AbortSignal,
method?: ValueSuggestionsMethod
method: ValueSuggestionsMethod = core.uiSettings.get<ValueSuggestionsMethod>(
UI_SETTINGS.AUTOCOMPLETE_VALUE_SUGGESTION_METHOD
)
) => {
usageCollector?.trackRequest();
return core.http

View file

@ -2673,6 +2673,7 @@ export const UI_SETTINGS: {
readonly FILTERS_PINNED_BY_DEFAULT: "filters:pinnedByDefault";
readonly FILTERS_EDITOR_SUGGEST_VALUES: "filterEditor:suggestValues";
readonly AUTOCOMPLETE_USE_TIMERANGE: "autocomplete:useTimeRange";
readonly AUTOCOMPLETE_VALUE_SUGGESTION_METHOD: "autocomplete:valueSuggestionMethod";
};
// Warning: (ae-missing-release-tag) "waitUntilNextSessionCompletes$" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)

View file

@ -0,0 +1,86 @@
/*
* 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 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
import React, { ReactElement } from 'react';
import { mountWithIntl as mount } from '@kbn/test/jest';
import { AutocompleteFtuePopover } from './autocomplete_ftue_popover';
import { EuiTourStep } from '@elastic/eui';
import { act } from 'react-dom/test-utils';
import { coreMock } from '../../../../../core/public/mocks';
import { KibanaContextProvider } from '../../../../kibana_react/public';
import { IStorageWrapper } from '../../../../kibana_utils/public';
const startMock = coreMock.createStart();
describe('AutocompleteFtuePopover', () => {
function wrapInContext(props: {
isVisible?: boolean;
storage: IStorageWrapper;
children: ReactElement;
}) {
const services = { docLinks: startMock.docLinks };
return (
<KibanaContextProvider services={services}>
<AutocompleteFtuePopover {...props} />
</KibanaContextProvider>
);
}
const createMockStorage = () => ({
get: jest.fn(),
set: jest.fn(),
remove: jest.fn(),
clear: jest.fn(),
});
it('should hide popover if local storage flag is set', () => {
const children = <span />;
const storage = createMockStorage();
storage.get.mockReturnValue(true);
const instance = mount(wrapInContext({ storage, children }));
expect(instance.find(EuiTourStep).prop('isStepOpen')).toBe(false);
});
it('should render popover if local storage flag is not set', () => {
const children = <span />;
const instance = mount(
wrapInContext({
storage: createMockStorage(),
isVisible: true,
children,
})
);
expect(instance.find(EuiTourStep).prop('isStepOpen')).toBe(true);
});
it('should hide popover if it is closed', async () => {
const props = {
children: <span />,
showAutocompleteFtuePopover: true,
storage: createMockStorage(),
};
const instance = mount(wrapInContext(props));
act(() => {
instance.find(EuiTourStep).prop('closePopover')!();
});
expect(instance.find(EuiTourStep).prop('isStepOpen')).toBe(false);
});
it('should set local storage flag and hide on closing with button', () => {
const props = {
children: <span />,
showAutocompleteFtuePopover: true,
storage: createMockStorage(),
};
const instance = mount(wrapInContext(props));
act(() => {
instance.find(EuiTourStep).prop('footerAction')!.props.onClick();
});
expect(props.storage.set).toHaveBeenCalledWith(expect.any(String), true);
expect(instance.find(EuiTourStep).prop('isStepOpen')).toBe(false);
});
});

View file

@ -0,0 +1,104 @@
/*
* 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 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
import { ReactElement, useEffect, useState } from 'react';
import React from 'react';
import { EuiButtonEmpty, EuiLink, EuiText, EuiTourStep } from '@elastic/eui';
import { IStorageWrapper } from 'src/plugins/kibana_utils/public';
import { i18n } from '@kbn/i18n';
import { FormattedMessage } from '@kbn/i18n/react';
import { useKibana } from '../../../../kibana_react/public';
const AUTOCOMPLETE_FTUE_POPOVER_STORAGE_KEY = 'data.autocompleteFtuePopover';
export function AutocompleteFtuePopover({
isVisible,
storage,
children,
}: {
isVisible?: boolean;
storage: IStorageWrapper;
children: ReactElement;
}) {
const kibana = useKibana();
const autocompleteChangesLink = kibana.services.docLinks!.links.query.autocompleteChanges;
const [autocompleteFtuePopoverDismissed, setAutocompleteFtuePopoverDismissed] = useState(() =>
Boolean(storage.get(AUTOCOMPLETE_FTUE_POPOVER_STORAGE_KEY))
);
const [autocompleteFtuePopoverVisible, setAutocompleteFtuePopoverVisible] = useState(false);
useEffect(() => {
if (!autocompleteFtuePopoverDismissed && isVisible) {
setAutocompleteFtuePopoverVisible(true);
}
}, [autocompleteFtuePopoverDismissed, isVisible]);
return (
<EuiTourStep
onFinish={() => {}}
closePopover={() => {
setAutocompleteFtuePopoverVisible(false);
setAutocompleteFtuePopoverDismissed(true);
}}
content={
<EuiText size="s" style={{ maxWidth: '300px' }}>
<FormattedMessage
id="data.autocompleteFtuePopover.content"
defaultMessage="We changed how autocomplete works to improve performance. {learnMoreLink}"
values={{
learnMoreLink: (
<EuiLink href={autocompleteChangesLink} target="_blank" external>
{i18n.translate('data.autocompleteFtuePopover.learnMoreLink', {
defaultMessage: 'Learn more.',
})}
</EuiLink>
),
}}
/>
</EuiText>
}
minWidth={300}
anchorPosition="downCenter"
zIndex={4002}
anchorClassName="eui-displayBlock"
step={1}
stepsTotal={1}
isStepOpen={autocompleteFtuePopoverVisible}
subtitle={''}
title={i18n.translate('data.autocompleteFtuePopover.title', {
defaultMessage: 'Autocomplete is now faster!',
})}
footerAction={
<EuiButtonEmpty
size="xs"
flush="right"
color="text"
data-test-subj="autocompleteFtuePopoverDismissButton"
onClick={() => {
storage.set(AUTOCOMPLETE_FTUE_POPOVER_STORAGE_KEY, true);
setAutocompleteFtuePopoverDismissed(true);
setAutocompleteFtuePopoverVisible(false);
}}
>
{i18n.translate('data.autocompleteFtuePopover.dismissAction', {
defaultMessage: "Don't show again",
})}
</EuiButtonEmpty>
}
>
<div
onFocus={() => {
setAutocompleteFtuePopoverVisible(false);
}}
>
{children}
</div>
</EuiTourStep>
);
}

View file

@ -26,6 +26,7 @@ import QueryStringInputUI from './query_string_input';
import { UI_SETTINGS } from '../../../common';
import { PersistedLog, getQueryLog } from '../../query';
import { NoDataPopover } from './no_data_popover';
import { AutocompleteFtuePopover } from './autocomplete_ftue_popover';
const QueryStringInput = withKibana(QueryStringInputUI);
@ -169,25 +170,28 @@ export default function QueryBarTopRow(props: QueryBarTopRowProps) {
function renderQueryInput() {
if (!shouldRenderQueryInput()) return;
return (
<EuiFlexItem>
<QueryStringInput
disableAutoFocus={props.disableAutoFocus}
indexPatterns={props.indexPatterns!}
prepend={props.prepend}
query={props.query!}
screenTitle={props.screenTitle}
onChange={onQueryChange}
onChangeQueryInputFocus={onChangeQueryInputFocus}
onSubmit={onInputSubmit}
persistedLog={persistedLog}
dataTestSubj={props.dataTestSubj}
placeholder={props.placeholder}
isClearable={props.isClearable}
iconType={props.iconType}
nonKqlMode={props.nonKqlMode}
nonKqlModeHelpText={props.nonKqlModeHelpText}
/>
<AutocompleteFtuePopover storage={storage} isVisible={isQueryInputFocused}>
<QueryStringInput
disableAutoFocus={props.disableAutoFocus}
indexPatterns={props.indexPatterns!}
prepend={props.prepend}
query={props.query!}
screenTitle={props.screenTitle}
onChange={onQueryChange}
onChangeQueryInputFocus={onChangeQueryInputFocus}
onSubmit={onInputSubmit}
persistedLog={persistedLog}
dataTestSubj={props.dataTestSubj}
placeholder={props.placeholder}
isClearable={props.isClearable}
iconType={props.iconType}
nonKqlMode={props.nonKqlMode}
nonKqlModeHelpText={props.nonKqlModeHelpText}
/>
</AutocompleteFtuePopover>
</EuiFlexItem>
);
}

View file

@ -48,10 +48,7 @@ export function registerValueSuggestionsRoute(router: IRouter, config$: Observab
const abortSignal = getRequestAbortedSignal(request.events.aborted$);
try {
const fn =
(method ?? config.autocomplete.valueSuggestions.method) === 'terms_enum'
? termsEnumSuggestions
: termsAggSuggestions;
const fn = method === 'terms_agg' ? termsAggSuggestions : termsEnumSuggestions;
const body = await fn(
config,
context.core.savedObjects.client,

View file

@ -1474,6 +1474,7 @@ export const UI_SETTINGS: {
readonly FILTERS_PINNED_BY_DEFAULT: "filters:pinnedByDefault";
readonly FILTERS_EDITOR_SUGGEST_VALUES: "filterEditor:suggestValues";
readonly AUTOCOMPLETE_USE_TIMERANGE: "autocomplete:useTimeRange";
readonly AUTOCOMPLETE_VALUE_SUGGESTION_METHOD: "autocomplete:valueSuggestionMethod";
};
// Warning: (ae-missing-release-tag) "usageProvider" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)

View file

@ -703,6 +703,30 @@ export function getUiSettings(): Record<string, UiSettingsParams<unknown>> {
}),
schema: schema.boolean(),
},
[UI_SETTINGS.AUTOCOMPLETE_VALUE_SUGGESTION_METHOD]: {
name: i18n.translate('data.advancedSettings.autocompleteValueSuggestionMethod', {
defaultMessage: 'Autocomplete value suggestion method',
}),
type: 'select',
value: 'terms_enum',
description: i18n.translate('data.advancedSettings.autocompleteValueSuggestionMethodText', {
defaultMessage:
'The method used for querying suggestions for values in KQL autocomplete. Select terms_enum to use the ' +
'Elasticsearch terms enum API for improved autocomplete suggestion performance. Select terms_agg to use an ' +
'Elasticsearch terms aggregation. {learnMoreLink}',
values: {
learnMoreLink:
'<a href="https://www.elastic.co/guide/en/kibana/current/kibana-concepts-analysts.html#autocomplete-suggestions" target="_blank" rel="noopener">' +
i18n.translate('data.advancedSettings.autocompleteValueSuggestionMethodLink', {
defaultMessage: 'Learn more.',
}) +
'</a>',
},
}),
options: ['terms_enum', 'terms_agg'],
category: ['autocomplete'],
schema: schema.string(),
},
[UI_SETTINGS.AUTOCOMPLETE_USE_TIMERANGE]: {
name: i18n.translate('data.advancedSettings.autocompleteIgnoreTimerange', {
defaultMessage: 'Use time range',
@ -711,8 +735,17 @@ export function getUiSettings(): Record<string, UiSettingsParams<unknown>> {
value: true,
description: i18n.translate('data.advancedSettings.autocompleteIgnoreTimerangeText', {
defaultMessage:
'Disable this property to get autocomplete suggestions from your full dataset, rather than from the current time range.',
'Disable this property to get autocomplete suggestions from your full dataset, rather than from the current time range. {learnMoreLink}',
values: {
learnMoreLink:
'<a href="https://www.elastic.co/guide/en/kibana/current/kibana-concepts-analysts.html#autocomplete-suggestions" target="_blank" rel="noopener">' +
i18n.translate('data.advancedSettings.autocompleteValueSuggestionMethodLearnMoreLink', {
defaultMessage: 'Learn more.',
}) +
'</a>',
},
}),
category: ['autocomplete'],
schema: schema.boolean(),
},
[UI_SETTINGS.SEARCH_TIMEOUT]: {

View file

@ -388,6 +388,10 @@ export const stackManagementSchema: MakeSchemaFrom<UsageStats> = {
type: 'boolean',
_meta: { description: 'Non-default value of setting.' },
},
'autocomplete:valueSuggestionMethod': {
type: 'keyword',
_meta: { description: 'Non-default value of setting.' },
},
'search:timeout': {
type: 'long',
_meta: { description: 'Non-default value of setting.' },

View file

@ -25,6 +25,7 @@ export interface UsageStats {
*/
'bfetch:disableCompression': boolean;
'autocomplete:useTimeRange': boolean;
'autocomplete:valueSuggestionMethod': string;
'search:timeout': number;
'visualization:visualize:legacyChartsLibrary': boolean;
'visualization:visualize:legacyPieChartsLibrary': boolean;

View file

@ -7723,6 +7723,12 @@
"description": "Non-default value of setting."
}
},
"autocomplete:valueSuggestionMethod": {
"type": "keyword",
"_meta": {
"description": "Non-default value of setting."
}
},
"search:timeout": {
"type": "long",
"_meta": {

View file

@ -279,6 +279,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
let originalPieSliceStyle = '';
before(async () => {
await queryBar.clearQuery();
await dashboardAddPanel.addVisualization(PIE_CHART_VIS_NAME);
await enableNewChartLibraryDebug();
originalPieSliceStyle = await pieChart.getPieSliceStyle(`80,000`);

View file

@ -176,6 +176,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
});
// reset to persisted state
await queryBar.clearQuery();
await PageObjects.discover.clickResetSavedSearchButton();
const expectedHitCount = '14,004';
await retry.try(async function () {

View file

@ -2283,8 +2283,7 @@
"error_fix_action": {
"type": "long",
"_meta": {
"description":
"Number of times the user used the fix action of an error displayed in the workspace."
"description": "Number of times the user used the fix action of an error displayed in the workspace."
}
},
"open_formula_popover": {
@ -2531,8 +2530,7 @@
"error_fix_action": {
"type": "long",
"_meta": {
"description":
"Number of times the user used the fix action of an error displayed in the workspace."
"description": "Number of times the user used the fix action of an error displayed in the workspace."
}
},
"open_formula_popover": {

View file

@ -696,7 +696,7 @@
"dashboard.unsavedChangesBadge": "保存されていない変更",
"dashboard.urlWasRemovedInSixZeroWarningMessage": "URL「dashboard/create」は6.0で廃止されました。ブックマークを更新してください。",
"data.advancedSettings.autocompleteIgnoreTimerange": "時間範囲を使用",
"data.advancedSettings.autocompleteIgnoreTimerangeText": "このプロパティを無効にすると、現在の時間範囲からではなく、データセットからオートコンプリートの候補を取得します。",
"data.advancedSettings.autocompleteIgnoreTimerangeText": "このプロパティを無効にすると、現在の時間範囲からではなく、データセットからオートコンプリートの候補を取得します。 {learnMoreLink}",
"data.advancedSettings.courier.batchSearchesText": "Kibana は新しい非同期検索とインフラストラクチャを使用します。\n レガシー同期動作にフォールバックする場合は、このオプションを有効にします",
"data.advancedSettings.courier.batchSearchesTextDeprecation": "この設定はサポートが終了し、Kibana 8.0 では削除されます。",
"data.advancedSettings.courier.batchSearchesTitle": "同期検索を使用",

View file

@ -699,7 +699,7 @@
"dashboard.unsavedChangesBadge": "未保存的更改",
"dashboard.urlWasRemovedInSixZeroWarningMessage": "6.0 中已移除 url“dashboard/create”。请更新您的书签。",
"data.advancedSettings.autocompleteIgnoreTimerange": "使用时间范围",
"data.advancedSettings.autocompleteIgnoreTimerangeText": "禁用此属性可从您的完全数据集中获取自动完成建议,而非从当前时间范围。",
"data.advancedSettings.autocompleteIgnoreTimerangeText": "禁用此属性可从您的完全数据集中获取自动完成建议,而非从当前时间范围。 {learnMoreLink}",
"data.advancedSettings.courier.batchSearchesText": "Kibana 使用新的异步搜索和基础架构。\n 如果想回退到旧式同步操作,请启用此选项",
"data.advancedSettings.courier.batchSearchesTextDeprecation": "此设置已过时,将在 Kibana 8.0 中移除。",
"data.advancedSettings.courier.batchSearchesTitle": "使用同步搜索",