Skip to content

Commit

Permalink
[EPM] Improve object handling in index template mappings (elastic#63688
Browse files Browse the repository at this point in the history
…) (elastic#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>
  • Loading branch information
skh and elasticmachine authored Apr 18, 2020
1 parent 06c62cf commit 13222a5
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -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));
});
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ export interface Field {
ignore_above?: number;
object_type?: string;
scaling_factor?: number;
dynamic?: 'strict' | boolean;

// Kibana specific
analyzed?: boolean;
Expand Down

0 comments on commit 13222a5

Please sign in to comment.