[EPM] Improve object handling in index template mappings (#63688) (#63855)

* Unit-test current mapping for object types

* Handle 'enabled' attribute for object fields

* Handle 'dynamic' attribute for object fields

Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>

Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
This commit is contained in:
Sonja Krause-Harder 2020-04-18 11:37:12 +02:00 committed by GitHub
parent 06c62cf286
commit 13222a547b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 105 additions and 1 deletions

View file

@ -161,3 +161,101 @@ test('tests processing keyword field with multi fields with analyzed text field'
const mappings = generateMappings(processedFields);
expect(JSON.stringify(mappings)).toEqual(JSON.stringify(keywordWithAnalyzedMultiFieldsMapping));
});
test('tests processing object field with no other attributes', () => {
const objectFieldLiteralYml = `
- name: objectField
type: object
`;
const objectFieldMapping = {
properties: {
objectField: {
type: 'object',
},
},
};
const fields: Field[] = safeLoad(objectFieldLiteralYml);
const processedFields = processFields(fields);
const mappings = generateMappings(processedFields);
expect(JSON.stringify(mappings)).toEqual(JSON.stringify(objectFieldMapping));
});
test('tests processing object field with enabled set to false', () => {
const objectFieldEnabledFalseLiteralYml = `
- name: objectField
type: object
enabled: false
`;
const objectFieldEnabledFalseMapping = {
properties: {
objectField: {
type: 'object',
enabled: false,
},
},
};
const fields: Field[] = safeLoad(objectFieldEnabledFalseLiteralYml);
const processedFields = processFields(fields);
const mappings = generateMappings(processedFields);
expect(JSON.stringify(mappings)).toEqual(JSON.stringify(objectFieldEnabledFalseMapping));
});
test('tests processing object field with dynamic set to false', () => {
const objectFieldDynamicFalseLiteralYml = `
- name: objectField
type: object
dynamic: false
`;
const objectFieldDynamicFalseMapping = {
properties: {
objectField: {
type: 'object',
dynamic: false,
},
},
};
const fields: Field[] = safeLoad(objectFieldDynamicFalseLiteralYml);
const processedFields = processFields(fields);
const mappings = generateMappings(processedFields);
expect(JSON.stringify(mappings)).toEqual(JSON.stringify(objectFieldDynamicFalseMapping));
});
test('tests processing object field with dynamic set to true', () => {
const objectFieldDynamicTrueLiteralYml = `
- name: objectField
type: object
dynamic: true
`;
const objectFieldDynamicTrueMapping = {
properties: {
objectField: {
type: 'object',
dynamic: true,
},
},
};
const fields: Field[] = safeLoad(objectFieldDynamicTrueLiteralYml);
const processedFields = processFields(fields);
const mappings = generateMappings(processedFields);
expect(JSON.stringify(mappings)).toEqual(JSON.stringify(objectFieldDynamicTrueMapping));
});
test('tests processing object field with dynamic set to strict', () => {
const objectFieldDynamicStrictLiteralYml = `
- name: objectField
type: object
dynamic: strict
`;
const objectFieldDynamicStrictMapping = {
properties: {
objectField: {
type: 'object',
dynamic: 'strict',
},
},
};
const fields: Field[] = safeLoad(objectFieldDynamicStrictLiteralYml);
const processedFields = processFields(fields);
const mappings = generateMappings(processedFields);
expect(JSON.stringify(mappings)).toEqual(JSON.stringify(objectFieldDynamicStrictMapping));
});

View file

@ -89,8 +89,13 @@ export function generateMappings(fields: Field[]): Mappings {
}
break;
case 'object':
// TODO improve
fieldProps.type = 'object';
if (field.hasOwnProperty('enabled')) {
fieldProps.enabled = field.enabled;
}
if (field.hasOwnProperty('dynamic')) {
fieldProps.dynamic = field.dynamic;
}
break;
case 'array':
// this assumes array fields were validated in an earlier step

View file

@ -27,6 +27,7 @@ export interface Field {
ignore_above?: number;
object_type?: string;
scaling_factor?: number;
dynamic?: 'strict' | boolean;
// Kibana specific
analyzed?: boolean;