[Lens] Remove the deprecated field list sampling strategy (#149482)

## Summary

This PR removes the deprecated field list sampling setting which was
marked as deprecated on 8.1. This
https://github.com/elastic/kibana/pull/139828 was the PR that added the
deprecation callout.
This commit is contained in:
Stratoula Kalafateli 2023-01-26 09:38:21 +02:00 committed by GitHub
parent 2862d4bdb7
commit bb207aadc3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
19 changed files with 18 additions and 556 deletions

View file

@ -546,10 +546,6 @@ Disable this option if you prefer to use the new heatmap charts with improved pe
Enables users to create, view, and edit experimental visualizations. When disabled,
only production-ready visualizations are available to users.
[[lens-sampling]]`lens:useFieldExistenceSampling`::
**This setting is deprecated and will not be supported as of 8.6.**
If enabled, document sampling is used to determine field existence (available or empty) for the Lens field list instead of relying on index mappings.
[float]
[[kibana-telemetry-settings]]
==== Usage Data

View file

@ -518,10 +518,6 @@ export const stackManagementSchema: MakeSchemaFrom<UsageStats> = {
type: 'boolean',
_meta: { description: 'Non-default value of setting.' },
},
'lens:useFieldExistenceSampling': {
type: 'boolean',
_meta: { description: 'Non-default value of setting.' },
},
'metrics:allowCheckingForFailedShards': {
type: 'boolean',
_meta: { description: 'Non-default value of setting.' },

View file

@ -141,7 +141,6 @@ export interface UsageStats {
'discover:rowHeightOption': number;
hideAnnouncements: boolean;
isDefaultIndexMigrated: boolean;
'lens:useFieldExistenceSampling': boolean;
'metrics:allowCheckingForFailedShards': boolean;
'observability:apmLabsButton': boolean;
'observability:enableAwsLambdaMetrics': boolean;

View file

@ -9036,12 +9036,6 @@
"description": "Non-default value of setting."
}
},
"lens:useFieldExistenceSampling": {
"type": "boolean",
"_meta": {
"description": "Non-default value of setting."
}
},
"metrics:allowCheckingForFailedShards": {
"type": "boolean",
"_meta": {

View file

@ -7,4 +7,3 @@
*/
export const PLUGIN_ID = 'unifiedFieldList';
export const FIELD_EXISTENCE_SETTING = 'lens:useFieldExistenceSampling';

View file

@ -19,7 +19,6 @@ export type SearchHandler = (
/**
* The number of docs to sample to determine field empty status.
*/
const SAMPLE_SIZE = 500;
export interface Field {
name: string;
@ -40,7 +39,6 @@ export async function fetchFieldExistence({
timeFieldName,
includeFrozen,
metaFields,
useSampling,
}: {
search: SearchHandler;
dataView: DataView;
@ -49,24 +47,9 @@ export async function fetchFieldExistence({
toDate?: string;
timeFieldName?: string;
includeFrozen: boolean;
useSampling: boolean;
metaFields: string[];
dataViewsService: DataViewsContract;
}) {
if (useSampling) {
return legacyFetchFieldExistenceSampling({
search,
metaFields,
dataView,
dataViewsService,
dslQuery,
fromDate,
toDate,
timeFieldName,
includeFrozen,
});
}
const allFields = buildFieldList(dataView, metaFields);
const existingFieldList = await dataViewsService.getFieldsForIndexPattern(dataView, {
// filled in by data views service
@ -79,47 +62,6 @@ export async function fetchFieldExistence({
};
}
async function legacyFetchFieldExistenceSampling({
search,
metaFields,
dataView,
dslQuery,
fromDate,
toDate,
timeFieldName,
includeFrozen,
}: {
search: SearchHandler;
metaFields: string[];
dataView: DataView;
dataViewsService: DataViewsContract;
dslQuery: object;
fromDate?: string;
toDate?: string;
timeFieldName?: string;
includeFrozen: boolean;
}) {
const fields = buildFieldList(dataView, metaFields);
const runtimeMappings = dataView.getRuntimeMappings();
const docs = await fetchDataViewStats({
search,
fromDate,
toDate,
dslQuery,
index: dataView.title,
timeFieldName: timeFieldName || dataView.timeFieldName,
fields,
runtimeMappings,
includeFrozen,
});
return {
indexPatternTitle: dataView.title,
existingFieldNames: legacyExistingFields(docs, fields),
};
}
/**
* Exported only for unit tests.
*/
@ -138,60 +80,6 @@ export function buildFieldList(indexPattern: DataView, metaFields: string[]): Fi
});
}
async function fetchDataViewStats({
search,
index,
dslQuery,
timeFieldName,
fromDate,
toDate,
fields,
runtimeMappings,
includeFrozen,
}: {
search: SearchHandler;
index: string;
dslQuery: object;
timeFieldName?: string;
fromDate?: string;
toDate?: string;
fields: Field[];
runtimeMappings: estypes.MappingRuntimeFields;
includeFrozen: boolean;
}) {
const query = toQuery(timeFieldName, fromDate, toDate, dslQuery);
const scriptedFields = fields.filter((f) => f.isScript);
const response = await search({
index,
...(includeFrozen ? { ignore_throttled: false } : {}),
body: {
size: SAMPLE_SIZE,
query,
// Sorted queries are usually able to skip entire shards that don't match
sort: timeFieldName && fromDate && toDate ? [{ [timeFieldName]: 'desc' }] : [],
fields: ['*'],
_source: false,
runtime_mappings: runtimeMappings,
script_fields: scriptedFields.reduce((acc, field) => {
acc[field.name] = {
script: {
lang: field.lang!,
source: field.script!,
},
};
return acc;
}, {} as Record<string, estypes.ScriptField>),
// Small improvement because there is overhead in counting
track_total_hits: false,
// Per-shard timeout, must be lower than overall. Shards return partial results on timeout
timeout: '4500ms',
},
});
return response?.hits.hits;
}
function toQuery(
timeFieldName: string | undefined,
fromDate: string | undefined,

View file

@ -10,7 +10,6 @@ import { IUiSettingsClient } from '@kbn/core/public';
import { DataPublicPluginStart, UI_SETTINGS } from '@kbn/data-plugin/public';
import type { DataView, DataViewsContract } from '@kbn/data-views-plugin/common';
import { lastValueFrom } from 'rxjs';
import { FIELD_EXISTENCE_SETTING } from '../../../common';
import { fetchFieldExistence } from '../../../common/utils/field_existing_utils';
interface FetchFieldExistenceParams {
@ -40,7 +39,6 @@ export const loadFieldExisting: LoadFieldExistingHandler = async ({
dataView,
}) => {
const includeFrozen = uiSettingsClient.get(UI_SETTINGS.SEARCH_INCLUDE_FROZEN);
const useSampling = uiSettingsClient.get(FIELD_EXISTENCE_SETTING);
const metaFields = uiSettingsClient.get(UI_SETTINGS.META_FIELDS);
return await fetchFieldExistence({
@ -50,7 +48,6 @@ export const loadFieldExisting: LoadFieldExistingHandler = async ({
timeFieldName,
dataViewsService,
includeFrozen,
useSampling,
metaFields,
dataView,
search: async (params) => {

View file

@ -14,7 +14,6 @@ import {
PluginSetup,
} from './types';
import { defineRoutes } from './routes';
import { getUiSettings } from './ui_settings';
export class UnifiedFieldListPlugin
implements Plugin<UnifiedFieldListServerPluginSetup, UnifiedFieldListServerPluginStart>
@ -27,7 +26,6 @@ export class UnifiedFieldListPlugin
public setup(core: CoreSetup<PluginStart>, plugins: PluginSetup) {
this.logger.debug('unifiedFieldList: Setup');
core.uiSettings.register(getUiSettings());
defineRoutes(core, this.logger);

View file

@ -14,7 +14,6 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
import { fetchFieldExistence, isBoomError } from '../../common/utils/field_existing_utils';
import { FIELD_EXISTING_API_PATH } from '../../common/constants';
import { FIELD_EXISTENCE_SETTING } from '../../common';
import { PluginStart } from '../types';
export async function existingFieldsRoute(setup: CoreSetup<PluginStart>, logger: Logger) {
@ -40,9 +39,8 @@ export async function existingFieldsRoute(setup: CoreSetup<PluginStart>, logger:
await setup.getStartServices();
const savedObjectsClient = savedObjects.getScopedClient(req);
const uiSettingsClient = uiSettings.asScopedToClient(savedObjectsClient);
const [includeFrozen, useSampling, metaFields] = await Promise.all([
const [includeFrozen, metaFields] = await Promise.all([
uiSettingsClient.get(UI_SETTINGS.SEARCH_INCLUDE_FROZEN),
uiSettingsClient.get(FIELD_EXISTENCE_SETTING),
uiSettingsClient.get(UI_SETTINGS.META_FIELDS),
]);
const esClient = elasticsearch.client.asScoped(req).asCurrentUser;
@ -56,7 +54,6 @@ export async function existingFieldsRoute(setup: CoreSetup<PluginStart>, logger:
...req.body,
dataViewsService,
includeFrozen,
useSampling,
metaFields,
dataView: await dataViewsService.get(req.params.dataViewId),
search: async (params) => {

View file

@ -1,40 +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 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 { i18n } from '@kbn/i18n';
import { schema } from '@kbn/config-schema';
import { UiSettingsParams } from '@kbn/core/server';
import { FIELD_EXISTENCE_SETTING } from '../common';
export const getUiSettings: () => Record<string, UiSettingsParams> = () => ({
[FIELD_EXISTENCE_SETTING]: {
name: i18n.translate('unifiedFieldList.advancedSettings.useFieldExistenceSampling.title', {
defaultMessage: 'Use field existence sampling',
}),
value: false,
description: i18n.translate(
'unifiedFieldList.advancedSettings.useFieldExistenceSampling.description',
{
defaultMessage:
'If enabled, document sampling is used to determine field existence (available or empty) for the Lens field list instead of relying on index mappings.',
}
),
deprecation: {
message: i18n.translate(
'unifiedFieldList.advancedSettings.useFieldExistenceSampling.deprecation',
{
defaultMessage: 'This setting is deprecated and will not be supported as of 8.6.',
}
),
docLinksKey: 'visualizationSettings',
},
category: ['visualization'],
schema: schema.boolean(),
},
});

View file

@ -11,7 +11,6 @@ import { FtrProviderContext } from '../../ftr_provider_context';
export default function lensApiIntegrationTests({ loadTestFile }: FtrProviderContext) {
describe('UnifiedFieldList', () => {
loadTestFile(require.resolve('./existing_fields'));
loadTestFile(require.resolve('./legacy_existing_fields'));
loadTestFile(require.resolve('./field_stats'));
});
}

View file

@ -1,275 +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 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 expect from '@kbn/expect';
import { FtrProviderContext } from '../../ftr_provider_context';
const TEST_START_TIME = '2015-09-19T06:31:44.000';
const TEST_END_TIME = '2015-09-23T18:31:44.000';
const COMMON_HEADERS = {
'kbn-xsrf': 'some-xsrf-token',
};
const fieldsWithData = [
'@message',
'@message.raw',
'@tags',
'@tags.raw',
'@timestamp',
'_id',
'_index',
'agent',
'agent.raw',
'bytes',
'clientip',
'extension',
'extension.raw',
'geo.coordinates',
'geo.dest',
'geo.src',
'geo.srcdest',
'headings',
'headings.raw',
'host',
'host.raw',
'index',
'index.raw',
'ip',
'links',
'links.raw',
'machine.os',
'machine.os.raw',
'machine.ram',
'machine.ram_range',
'memory',
'phpmemory',
'referer',
'request',
'request.raw',
'response',
'response.raw',
'spaces',
'spaces.raw',
'type',
'url',
'url.raw',
'utc_time',
'xss',
'xss.raw',
'runtime_number',
'relatedContent.article:modified_time',
'relatedContent.article:published_time',
'relatedContent.article:section',
'relatedContent.article:section.raw',
'relatedContent.article:tag',
'relatedContent.article:tag.raw',
'relatedContent.og:description',
'relatedContent.og:description.raw',
'relatedContent.og:image',
'relatedContent.og:image.raw',
'relatedContent.og:image:height',
'relatedContent.og:image:height.raw',
'relatedContent.og:image:width',
'relatedContent.og:image:width.raw',
'relatedContent.og:site_name',
'relatedContent.og:site_name.raw',
'relatedContent.og:title',
'relatedContent.og:title.raw',
'relatedContent.og:type',
'relatedContent.og:type.raw',
'relatedContent.og:url',
'relatedContent.og:url.raw',
'relatedContent.twitter:card',
'relatedContent.twitter:card.raw',
'relatedContent.twitter:description',
'relatedContent.twitter:description.raw',
'relatedContent.twitter:image',
'relatedContent.twitter:image.raw',
'relatedContent.twitter:site',
'relatedContent.twitter:site.raw',
'relatedContent.twitter:title',
'relatedContent.twitter:title.raw',
'relatedContent.url',
'relatedContent.url.raw',
];
const metricBeatData = [
'@timestamp',
'_id',
'_index',
'agent.ephemeral_id',
'agent.ephemeral_id.keyword',
'agent.hostname',
'agent.hostname.keyword',
'agent.id',
'agent.id.keyword',
'agent.type',
'agent.type.keyword',
'agent.version',
'agent.version.keyword',
'ecs.version',
'ecs.version.keyword',
'event.dataset',
'event.dataset.keyword',
'event.duration',
'event.module',
'event.module.keyword',
'host.architecture',
'host.architecture.keyword',
'host.hostname',
'host.hostname.keyword',
'host.id',
'host.id.keyword',
'host.name',
'host.name.keyword',
'host.os.build',
'host.os.build.keyword',
'host.os.family',
'host.os.family.keyword',
'host.os.kernel',
'host.os.kernel.keyword',
'host.os.name',
'host.os.name.keyword',
'host.os.platform',
'host.os.platform.keyword',
'host.os.version',
'host.os.version.keyword',
'metricset.name',
'metricset.name.keyword',
'service.type',
'service.type.keyword',
'system.cpu.cores',
'system.cpu.idle.pct',
'system.cpu.iowait.pct',
'system.cpu.irq.pct',
'system.cpu.nice.pct',
'system.cpu.softirq.pct',
'system.cpu.steal.pct',
'system.cpu.system.pct',
'system.cpu.total.pct',
'system.cpu.user.pct',
];
export default ({ getService }: FtrProviderContext) => {
const esArchiver = getService('esArchiver');
const supertest = getService('supertest');
const kibanaServer = getService('kibanaServer');
describe('existing_fields apis legacy', () => {
before(async () => {
await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional');
await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/visualize/default');
await kibanaServer.savedObjects.cleanStandardList();
await kibanaServer.importExport.load(
'x-pack/test/functional/fixtures/kbn_archiver/visualize/default'
);
await kibanaServer.uiSettings.update({
'lens:useFieldExistenceSampling': true,
});
});
after(async () => {
await esArchiver.unload('x-pack/test/functional/es_archives/logstash_functional');
await esArchiver.unload('x-pack/test/functional/es_archives/visualize/default');
await kibanaServer.savedObjects.cleanStandardList();
await kibanaServer.uiSettings.update({
'lens:useFieldExistenceSampling': false,
});
});
describe('existence', () => {
it('should find which fields exist in the sample documents', async () => {
const { body } = await supertest
.post(`/api/unified_field_list/existing_fields/${encodeURIComponent('logstash-*')}`)
.set(COMMON_HEADERS)
.send({
dslQuery: {
bool: {
filter: [{ match_all: {} }],
},
},
fromDate: TEST_START_TIME,
toDate: TEST_END_TIME,
})
.expect(200);
expect(body.indexPatternTitle).to.eql('logstash-*');
expect(body.existingFieldNames.sort()).to.eql(fieldsWithData.sort());
});
it('should succeed for thousands of fields', async () => {
const { body } = await supertest
.post(`/api/unified_field_list/existing_fields/${encodeURIComponent('metricbeat-*')}`)
.set(COMMON_HEADERS)
.send({
dslQuery: { match_all: {} },
fromDate: TEST_START_TIME,
toDate: TEST_END_TIME,
})
.expect(200);
expect(body.indexPatternTitle).to.eql('metricbeat-*');
expect(body.existingFieldNames.sort()).to.eql(metricBeatData.sort());
});
it('should return fields filtered by query and filters', async () => {
const expectedFieldNames = [
'@message',
'@message.raw',
'@tags',
'@tags.raw',
'@timestamp',
'_id',
'_index',
'agent',
'agent.raw',
'bytes',
'clientip',
'extension',
'extension.raw',
'headings',
'headings.raw',
'host',
'host.raw',
'index',
'index.raw',
'referer',
'request',
'request.raw',
'response',
'response.raw',
'runtime_number',
'spaces',
'spaces.raw',
'type',
'url',
'url.raw',
'utc_time',
'xss',
'xss.raw',
];
const { body } = await supertest
.post(`/api/unified_field_list/existing_fields/${encodeURIComponent('logstash-*')}`)
.set(COMMON_HEADERS)
.send({
dslQuery: {
bool: {
filter: [{ match: { referer: 'https://www.taylorswift.com/' } }],
},
},
fromDate: TEST_START_TIME,
toDate: TEST_END_TIME,
})
.expect(200);
expect(body.existingFieldNames.sort()).to.eql(expectedFieldNames.sort());
});
});
});
};

View file

@ -245,26 +245,16 @@ export const InnerFormBasedDataPanel = function InnerFormBasedDataPanel({
[layerFields]
);
const onOverrideFieldGroupDetails = useCallback(
(groupName) => {
if (groupName === FieldsGroupNames.AvailableFields) {
const isUsingSampling = core.uiSettings.get('lens:useFieldExistenceSampling');
return {
helpText: isUsingSampling
? i18n.translate('xpack.lens.indexPattern.allFieldsSamplingLabelHelp', {
defaultMessage:
'Available fields contain the data in the first 500 documents that match your filters. To view all fields, expand Empty fields. You are unable to create visualizations with full text, geographic, flattened, and object fields.',
})
: i18n.translate('xpack.lens.indexPattern.allFieldsLabelHelp', {
defaultMessage:
'Drag and drop available fields to the workspace and create visualizations. To change the available fields, select a different data view, edit your queries, or use a different time range. Some field types cannot be visualized in Lens, including full text and geographic fields.',
}),
};
}
},
[core.uiSettings]
);
const onOverrideFieldGroupDetails = useCallback((groupName) => {
if (groupName === FieldsGroupNames.AvailableFields) {
return {
helpText: i18n.translate('xpack.lens.indexPattern.allFieldsLabelHelp', {
defaultMessage:
'Drag and drop available fields to the workspace and create visualizations. To change the available fields, select a different data view, edit your queries, or use a different time range. Some field types cannot be visualized in Lens, including full text and geographic fields.',
}),
};
}
}, []);
const { fieldListFiltersProps, fieldListGroupedProps } = useGroupedFields<IndexPatternField>({
dataViewId: currentIndexPatternId,

View file

@ -276,8 +276,7 @@ function FieldItemPopoverContents(
onAddFilter: AddFieldFilterHandler | undefined;
}
) {
const { query, filters, indexPattern, dataViewField, dateRange, core, onAddFilter, uiActions } =
props;
const { query, filters, indexPattern, dataViewField, dateRange, onAddFilter, uiActions } = props;
const services = useKibana<LensAppServices>().services;
const exploreInDiscover = useMemo(() => {
@ -330,18 +329,12 @@ function FieldItemPopoverContents(
overrideMissingContent={(params) => {
if (params.reason === 'no-data') {
// TODO: should we replace this with a default message "Analysis is not available for this field?"
const isUsingSampling = core.uiSettings.get('lens:useFieldExistenceSampling');
return (
<EuiText size="s" data-test-subj="lnsFieldListPanel-missingFieldStats">
{isUsingSampling
? i18n.translate('xpack.lens.indexPattern.fieldStatsSamplingNoData', {
defaultMessage:
'Lens is unable to create visualizations with this field because it does not contain data in the first 500 documents that match your filters. To create a visualization, drag and drop a different field.',
})
: i18n.translate('xpack.lens.indexPattern.fieldStatsNoData', {
defaultMessage:
'Lens is unable to create visualizations with this field because it does not contain data. To create a visualization, drag and drop a different field.',
})}
{i18n.translate('xpack.lens.indexPattern.fieldStatsNoData', {
defaultMessage:
'Lens is unable to create visualizations with this field because it does not contain data. To create a visualization, drag and drop a different field.',
})}
</EuiText>
);
}

View file

@ -66,7 +66,6 @@ import {
getFiltersInLayer,
getShardFailuresWarningMessages,
getVisualDefaultsForLayer,
getDeprecatedSamplingWarningMessage,
isColumnInvalid,
cloneLayer,
} from './utils';
@ -872,7 +871,6 @@ export function getFormBasedDatasource({
return message;
}),
...getDeprecatedSamplingWarningMessage(core),
];
return [...layerErrorMessages, ...dimensionErrorMessages, ...warningMessages];

View file

@ -8,10 +8,10 @@
import React from 'react';
import { i18n } from '@kbn/i18n';
import { FormattedMessage } from '@kbn/i18n-react';
import type { CoreStart, DocLinksStart, ThemeServiceStart } from '@kbn/core/public';
import type { DocLinksStart, ThemeServiceStart } from '@kbn/core/public';
import type { DatatableUtilitiesService } from '@kbn/data-plugin/common';
import { TimeRange } from '@kbn/es-query';
import { EuiCallOut, EuiLink, EuiSpacer, EuiText } from '@elastic/eui';
import { EuiLink, EuiSpacer, EuiText } from '@elastic/eui';
import type { DatatableColumn } from '@kbn/expressions-plugin/common';
import { groupBy, escape, uniq } from 'lodash';
@ -393,52 +393,6 @@ export function getPrecisionErrorWarningMessages(
return warningMessages;
}
export function getDeprecatedSamplingWarningMessage(core: CoreStart): UserMessage[] {
const useFieldExistenceSamplingKey = 'lens:useFieldExistenceSampling';
const isUsingSampling = core.uiSettings.get(useFieldExistenceSamplingKey);
return isUsingSampling
? [
{
severity: 'warning',
fixableInEditor: false,
displayLocations: [{ id: 'banner' }],
shortMessage: '',
longMessage: (
<EuiCallOut
color="warning"
iconType="alert"
size="s"
title={
<FormattedMessage
id="xpack.lens.indexPattern.useFieldExistenceSamplingBody"
defaultMessage="Field existence sampling has been deprecated and will be removed in Kibana {version}. You may disable this feature in {link}."
values={{
version: '8.6.0',
link: (
<EuiLink
onClick={() => {
core.application.navigateToApp('management', {
path: `/kibana/settings?query=${useFieldExistenceSamplingKey}`,
});
}}
>
<FormattedMessage
id="xpack.lens.indexPattern.useFieldExistenceSampling.advancedSettings"
defaultMessage="Advanced Settings"
/>
</EuiLink>
),
}}
/>
}
/>
),
},
]
: [];
}
export function getVisualDefaultsForLayer(layer: FormBasedLayer) {
return Object.keys(layer.columns).reduce<Record<string, Record<string, unknown>>>(
(memo, columnId) => {

View file

@ -5162,9 +5162,6 @@
"unifiedFieldList.fieldStats.filterOutValueButtonAriaLabel": "Exclure le {field} : \"{value}\"",
"unifiedFieldList.fieldStats.filterValueButtonAriaLabel": "Filtrer sur le {field} : \"{value}\"",
"unifiedFieldList.fieldStats.noFieldDataInSampleDescription": "Aucune donnée de champ pour {sampledDocumentsFormatted} {sampledDocuments, plural, one {exemple d'enregistrement} other {exemples d'enregistrement}}.",
"unifiedFieldList.advancedSettings.useFieldExistenceSampling.deprecation": "Ce paramètre est déclassé et ne sera plus pris en charge à partir de la version 8.6.",
"unifiedFieldList.advancedSettings.useFieldExistenceSampling.description": "Lorsque cette option est activée, léchantillonnage de document est utilisé pour déterminer lexistence des champs (disponibles ou vides) pour la liste de champs Lens au lieu de se fonder sur les mappings dindex.",
"unifiedFieldList.advancedSettings.useFieldExistenceSampling.title": "Utiliser léchantillonnage dexistence des champs",
"unifiedFieldList.fieldList.noFieldsCallout.noDataLabel": "Aucun champ.",
"unifiedFieldList.fieldList.noFieldsCallout.noFields.extendTimeBullet": "Extension de la plage temporelle",
"unifiedFieldList.fieldList.noFieldsCallout.noFields.fieldTypeFilterBullet": "Utilisation de différents filtres de champ",
@ -18191,7 +18188,6 @@
"xpack.lens.indexPattern.timeShiftSmallWarning": "{label} utilise un décalage temporel de {columnTimeShift} qui est inférieur à l'intervalle de l'histogramme des dates de {interval}. Pour éviter une non-correspondance des données, utilisez un multiple de {interval} comme décalage.",
"xpack.lens.indexPattern.tsdbRollupWarning": "{label} utilise une fonction qui n'est pas prise en charge par les données cumulées. Sélectionnez une autre fonction ou modifiez la plage temporelle.",
"xpack.lens.indexPattern.uniqueLabel": "{label} [{num}]",
"xpack.lens.indexPattern.useFieldExistenceSamplingBody": "L'échantillonnage d'existence des champs a été déclassé et sera retiré dans Kibana {version}. Vous pouvez désactiver cette fonctionnalité dans {link}.",
"xpack.lens.indexPattern.valueCountOf": "Nombre de {name}",
"xpack.lens.indexPatternSuggestion.removeLayerLabel": "Afficher uniquement {indexPatternTitle}",
"xpack.lens.indexPatternSuggestion.removeLayerPositionLabel": "Afficher uniquement le calque {layerNumber}",
@ -18525,7 +18521,6 @@
"xpack.lens.indexPattern.advancedSettings": "Avancé",
"xpack.lens.indexPattern.allFieldsForTextBasedLabelHelp": "Glissez-déposez les champs disponibles dans lespace de travail et créez des visualisations. Pour modifier les champs disponibles, modifiez votre requête.",
"xpack.lens.indexPattern.allFieldsLabelHelp": "Glissez-déposez les champs disponibles dans lespace de travail et créez des visualisations. Pour modifier les champs disponibles, sélectionnez une vue de données différente, modifiez vos requêtes ou utilisez une plage temporelle différente. Certains types de champ ne peuvent pas être visualisés dans Lens, y compris les champ de texte intégral et champs géographiques.",
"xpack.lens.indexPattern.allFieldsSamplingLabelHelp": "Les champs disponibles contiennent les données des 500 premiers documents correspondant aux filtres. Pour afficher tous les filtres, développez les champs vides. Vous ne pouvez pas créer de visualisations avec des champs de texte intégral, géographiques, lissés et dobjet.",
"xpack.lens.indexPattern.ascendingCountPrecisionErrorWarning.link": "veuillez consulter la documentation",
"xpack.lens.indexPattern.availableFieldsLabel": "Champs disponibles",
"xpack.lens.indexPattern.avg": "Moyenne",
@ -18592,7 +18587,6 @@
"xpack.lens.indexPattern.fieldStatsButtonEmptyLabel": "Ce champ ne comporte aucune donnée mais vous pouvez toujours effectuer un glisser-déposer pour visualiser.",
"xpack.lens.indexPattern.fieldStatsButtonLabel": "Cliquez pour obtenir un aperçu du champ, ou effectuez un glisser-déposer pour visualiser.",
"xpack.lens.indexPattern.fieldStatsNoData": "Lens ne peut pas créer de visualisation avec ce champ, car il ne contient pas de données. Pour créer une visualisation, glissez-déposez un autre champ.",
"xpack.lens.indexPattern.fieldStatsSamplingNoData": "Lens ne peut pas créer de visualisation avec ce champ, car il ne contient aucune donnée dans les 500 premiers documents correspondant aux filtres. Pour créer une visualisation, glissez-déposez un autre champ.",
"xpack.lens.indexPattern.filterBy.clickToEdit": "Cliquer pour modifier",
"xpack.lens.indexPattern.filterBy.emptyFilterQuery": "(vide)",
"xpack.lens.indexPattern.filterBy.label": "Filtrer par",
@ -18792,7 +18786,6 @@
"xpack.lens.indexPattern.timeShift.year": "Il y a 1 an (1y)",
"xpack.lens.indexPattern.timeShiftPlaceholder": "Saisissez des valeurs personnalisées (par ex. 8w)",
"xpack.lens.indexPattern.useAsTopLevelAgg": "Agréger d'abord en fonction de cette dimension",
"xpack.lens.indexPattern.useFieldExistenceSampling.advancedSettings": "Paramètres avancés",
"xpack.lens.label.gauge.labelMajor.header": "Titre",
"xpack.lens.label.gauge.labelMinor.header": "Sous-titre",
"xpack.lens.label.header": "Étiquette",

View file

@ -5159,9 +5159,6 @@
"unifiedFieldList.fieldStats.filterOutValueButtonAriaLabel": "{field}を除外:\"{value}\"",
"unifiedFieldList.fieldStats.filterValueButtonAriaLabel": "{field}を除外:\"{value}\"",
"unifiedFieldList.fieldStats.noFieldDataInSampleDescription": "{sampledDocumentsFormatted}サンプル{sampledDocuments, plural, other {レコード}}のフィールドデータがありません。",
"unifiedFieldList.advancedSettings.useFieldExistenceSampling.deprecation": "この設定はサポートが終了し、8.6以降ではサポートされません。",
"unifiedFieldList.advancedSettings.useFieldExistenceSampling.description": "有効な場合、インデックスマッピングを使用するのではなく、ドキュメントサンプリングを使用して、Lensフィールドリストのフィールドの存在使用可能または空を決定します。",
"unifiedFieldList.advancedSettings.useFieldExistenceSampling.title": "フィールド存在サンプリングを使用",
"unifiedFieldList.fieldList.noFieldsCallout.noDataLabel": "フィールドがありません。",
"unifiedFieldList.fieldList.noFieldsCallout.noFields.extendTimeBullet": "時間範囲を拡張中",
"unifiedFieldList.fieldList.noFieldsCallout.noFields.fieldTypeFilterBullet": "別のフィールドフィルターを使用",
@ -18171,7 +18168,6 @@
"xpack.lens.indexPattern.timeShiftSmallWarning": "{label}は{columnTimeShift}の時間シフトを使用しています。これは{interval}の日付ヒストグラム間隔よりも小さいです。不一致のデータを防止するには、時間シフトとして{interval}を使用します。",
"xpack.lens.indexPattern.tsdbRollupWarning": "{label}は、ロールアップされたデータによってサポートされていない関数を使用しています。別の関数を選択するか、時間範囲を選択してください。",
"xpack.lens.indexPattern.uniqueLabel": "{label} [{num}]",
"xpack.lens.indexPattern.useFieldExistenceSamplingBody": "フィールド存在サンプリングは廃止予定であり、Kibana {version}で削除される予定です。{link}でこの機能を無効化できます。",
"xpack.lens.indexPattern.valueCountOf": "{name}のカウント",
"xpack.lens.indexPatternSuggestion.removeLayerLabel": "{indexPatternTitle}のみを表示",
"xpack.lens.indexPatternSuggestion.removeLayerPositionLabel": "レイヤー{layerNumber}のみを表示",
@ -18507,7 +18503,6 @@
"xpack.lens.indexPattern.advancedSettings": "高度な設定",
"xpack.lens.indexPattern.allFieldsForTextBasedLabelHelp": "使用可能なフィールドをワークスペースまでドラッグし、ビジュアライゼーションを作成します。使用可能なフィールドを変更するには、クエリを編集します。",
"xpack.lens.indexPattern.allFieldsLabelHelp": "使用可能なフィールドをワークスペースまでドラッグし、ビジュアライゼーションを作成します。使用可能なフィールドを変更するには、別のデータビューを選択するか、クエリを編集するか、別の時間範囲を使用します。一部のフィールドタイプは、完全なテキストおよびグラフィックフィールドを含む Lens では、ビジュアライゼーションできません。",
"xpack.lens.indexPattern.allFieldsSamplingLabelHelp": "使用可能なフィールドには、フィルターと一致する最初の 500 件のドキュメントのデータがあります。すべてのフィールドを表示するには、空のフィールドを展開します。全文、地理、フラット化、オブジェクトフィールドでビジュアライゼーションを作成できません。",
"xpack.lens.indexPattern.ascendingCountPrecisionErrorWarning.link": "ドキュメントをご覧ください",
"xpack.lens.indexPattern.availableFieldsLabel": "利用可能なフィールド",
"xpack.lens.indexPattern.avg": "平均",
@ -18574,7 +18569,6 @@
"xpack.lens.indexPattern.fieldStatsButtonEmptyLabel": "このフィールドにはデータがありませんが、ドラッグアンドドロップで可視化できます。",
"xpack.lens.indexPattern.fieldStatsButtonLabel": "フィールドプレビューを表示するには、クリックします。可視化するには、ドラッグアンドドロップします。",
"xpack.lens.indexPattern.fieldStatsNoData": "Lensはこのフィールドのビジュアライゼーションを作成できません。フィールドにデータがありません。ビジュアライゼーションを作成するには、別のフィールドをドラッグします。",
"xpack.lens.indexPattern.fieldStatsSamplingNoData": "Lensはこのフィールドのビジュアライゼーションを作成できません。フィルターと一致する最初の500件のドキュメントではフィールドにデータがありません。ビジュアライゼーションを作成するには、別のフィールドをドラッグします。",
"xpack.lens.indexPattern.filterBy.clickToEdit": "クリックして編集",
"xpack.lens.indexPattern.filterBy.emptyFilterQuery": "(空)",
"xpack.lens.indexPattern.filterBy.label": "フィルタリング条件",
@ -18774,7 +18768,6 @@
"xpack.lens.indexPattern.timeShift.year": "1年前1y",
"xpack.lens.indexPattern.timeShiftPlaceholder": "カスタム値を入力8w",
"xpack.lens.indexPattern.useAsTopLevelAgg": "最初にこのディメンションで集約",
"xpack.lens.indexPattern.useFieldExistenceSampling.advancedSettings": "高度な設定",
"xpack.lens.label.gauge.labelMajor.header": "タイトル",
"xpack.lens.label.gauge.labelMinor.header": "サブタイトル",
"xpack.lens.label.header": "ラベル",

View file

@ -5165,9 +5165,6 @@
"unifiedFieldList.fieldStats.filterOutValueButtonAriaLabel": "筛除 {field}:“{value}”",
"unifiedFieldList.fieldStats.filterValueButtonAriaLabel": "筛留 {field}:“{value}”",
"unifiedFieldList.fieldStats.noFieldDataInSampleDescription": "{sampledDocumentsFormatted} 个样例{sampledDocuments, plural, other {记录}}无字段数据。",
"unifiedFieldList.advancedSettings.useFieldExistenceSampling.deprecation": "此设置已过时,自 8.6 中起不再受支持。",
"unifiedFieldList.advancedSettings.useFieldExistenceSampling.description": "如果启用,文档采样将用于确定 Lens 字段列表中的字段是否存在(可用或为空),而不依赖索引映射。",
"unifiedFieldList.advancedSettings.useFieldExistenceSampling.title": "使用字段存在采样",
"unifiedFieldList.fieldList.noFieldsCallout.noDataLabel": "无字段。",
"unifiedFieldList.fieldList.noFieldsCallout.noFields.extendTimeBullet": "延伸时间范围",
"unifiedFieldList.fieldList.noFieldsCallout.noFields.fieldTypeFilterBullet": "使用不同的字段筛选",
@ -18196,7 +18193,6 @@
"xpack.lens.indexPattern.timeShiftSmallWarning": "{label} 使用的时间偏移 {columnTimeShift} 小于 Date Histogram 时间间隔 {interval} 。要防止数据不匹配,请使用 {interval} 的倍数作为时间偏移。",
"xpack.lens.indexPattern.tsdbRollupWarning": "{label} 使用的函数不受汇总/打包数据支持。请选择其他函数,或更改时间范围。",
"xpack.lens.indexPattern.uniqueLabel": "{label} [{num}]",
"xpack.lens.indexPattern.useFieldExistenceSamplingBody": "字段存在采样已过时,将在 Kibana {version} 中移除。您可以在 {link} 中禁用此功能。",
"xpack.lens.indexPattern.valueCountOf": "{name} 的计数",
"xpack.lens.indexPatternSuggestion.removeLayerLabel": "仅显示 {indexPatternTitle}",
"xpack.lens.indexPatternSuggestion.removeLayerPositionLabel": "仅显示图层 {layerNumber}",
@ -18532,7 +18528,6 @@
"xpack.lens.indexPattern.advancedSettings": "高级",
"xpack.lens.indexPattern.allFieldsForTextBasedLabelHelp": "将可用字段拖放到工作区并创建可视化。要更改可用字段,请编辑您的查询。",
"xpack.lens.indexPattern.allFieldsLabelHelp": "将可用字段拖放到工作区并创建可视化。要更改可用字段,请选择不同数据视图,编辑您的查询或使用不同时间范围。一些字段类型无法在 Lens 中可视化,包括全文本字段和地理字段。",
"xpack.lens.indexPattern.allFieldsSamplingLabelHelp": "可用字段包含与您的筛选匹配的前 500 个文档中的数据。要查看所有字段,请展开空字段。无法使用全文本、地理、扁平和对象字段创建可视化。",
"xpack.lens.indexPattern.ascendingCountPrecisionErrorWarning.link": "访问文档",
"xpack.lens.indexPattern.availableFieldsLabel": "可用字段",
"xpack.lens.indexPattern.avg": "平均值",
@ -18599,7 +18594,6 @@
"xpack.lens.indexPattern.fieldStatsButtonEmptyLabel": "此字段不包含任何数据,但您仍然可以拖放以进行可视化。",
"xpack.lens.indexPattern.fieldStatsButtonLabel": "单击以进行字段预览,或拖放以进行可视化。",
"xpack.lens.indexPattern.fieldStatsNoData": "Lens 无法使用此字段创建可视化,因为其中未包含数据。要创建可视化,请拖放其他字段。",
"xpack.lens.indexPattern.fieldStatsSamplingNoData": "Lens 无法使用此字段创建可视化,因为其中未包含与您的筛选匹配的前 500 个文档中的数据。要创建可视化,请拖放其他字段。",
"xpack.lens.indexPattern.filterBy.clickToEdit": "单击以编辑",
"xpack.lens.indexPattern.filterBy.emptyFilterQuery": "(空)",
"xpack.lens.indexPattern.filterBy.label": "筛选依据",
@ -18799,7 +18793,6 @@
"xpack.lens.indexPattern.timeShift.year": "1 年前 (1y)",
"xpack.lens.indexPattern.timeShiftPlaceholder": "键入定制值(如 8w",
"xpack.lens.indexPattern.useAsTopLevelAgg": "首先按此维度聚合",
"xpack.lens.indexPattern.useFieldExistenceSampling.advancedSettings": "高级设置",
"xpack.lens.label.gauge.labelMajor.header": "标题",
"xpack.lens.label.gauge.labelMinor.header": "子标题",
"xpack.lens.label.header": "标签",