Module org.elasticsearch.server
Class FlattenedFieldMapper
java.lang.Object
org.elasticsearch.index.mapper.Mapper
org.elasticsearch.index.mapper.FieldMapper
org.elasticsearch.index.mapper.flattened.FlattenedFieldMapper
- All Implemented Interfaces:
Iterable<Mapper>,PassThroughFieldSource,ToXContent,ToXContentFragment
A field mapper that accepts a JSON object and flattens it into a single field. This data type
can be a useful alternative to an 'object' mapping when the object has a large, unknown set
of keys.
Currently the mapper extracts all leaf values of the JSON object, converts them to their text
representations, and indexes each one as a keyword. It creates both a 'keyed' version of the token
to allow searches on particular key-value pairs, as well as a 'root' token without the key
As an example, given a flattened field called 'field' and the following input
{
"field": {
"key1": "some value",
"key2": {
"key3": true
}
}
}
the mapper will produce untokenized string fields with the name "field" and values
"some value" and "true", as well as string fields called "field._keyed" with values
"key1\0some value" and "key2.key3\0true". Note that \0 is used as a reserved separator
character (see
FlattenedFieldParser.SEPARATOR).-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final classstatic classstatic classA field data implementation that gives access to the values associated with a particular JSON key.static final classA field type that represents the values under a particular JSON key, used when searching under a specific key as in 'my_flattened.key: some_value'.static enumstatic final classA field type that represents all 'root' values.Nested classes/interfaces inherited from class org.elasticsearch.index.mapper.FieldMapper
FieldMapper.BuilderParams, FieldMapper.Conflicts, FieldMapper.CopyTo, FieldMapper.DimensionBuilder, FieldMapper.DocValuesParameter, FieldMapper.MergeValidator<T>, FieldMapper.MultiFields, FieldMapper.Parameter<T>, FieldMapper.Serializer<T>, FieldMapper.SerializerCheck<T>, FieldMapper.SyntheticSourceMode, FieldMapper.SyntheticSourceSupport, FieldMapper.TextFamilyBuilder, FieldMapper.TypeParserNested classes/interfaces inherited from class org.elasticsearch.index.mapper.Mapper
Mapper.IgnoreAbove, Mapper.SourceKeepModeNested classes/interfaces inherited from interface org.elasticsearch.xcontent.ToXContent
ToXContent.DelegatingMapParams, ToXContent.MapParams, ToXContent.Params -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final Stringstatic final FieldMapper.DocValuesParameter.Valuesstatic final NodeFeaturestatic final NodeFeaturestatic final Stringstatic final Stringstatic final FieldMapper.TypeParserstatic final StringFields inherited from class org.elasticsearch.index.mapper.FieldMapper
builderParams, COERCE_SETTING, deprecationLogger, IGNORE_MALFORMED_SETTING, mappedFieldTypeFields inherited from class org.elasticsearch.index.mapper.Mapper
SYNTHETIC_SOURCE_KEEP_INDEX_SETTING, SYNTHETIC_SOURCE_KEEP_PARAMFields inherited from interface org.elasticsearch.xcontent.ToXContent
EMPTY, EMPTY_PARAMS -
Method Summary
Modifier and TypeMethodDescriptionprotected Stringprotected voiddoXContentBody(XContentBuilder xContentBuilder, ToXContent.Params params) Returns aFieldMapper.Builderto be used for merging and serialization Implement as follows:return new MyBuilder(simpleName()).init(this);intThe total number of fields as defined in the mapping.booleaniterator()protected voidparseCreateField(DocumentParserContext context) Parse the field value and populate the fields onDocumentParserContext.doc().The set of sub-field mappers whoseMapper.leafName()should be registered as root-level aliases.intpriority()The non-negative priority used to resolve conflicts when multiple passthrough sources expose sub-fields with the same leaf name at the root level.protected booleanWhether this mapper can handle an object value during document parsing.protected FieldMapper.SyntheticSourceSupportReturns implementation of synthetic source support for the mapper.Methods inherited from class org.elasticsearch.index.mapper.FieldMapper
checkIncomingMergeType, copyTo, createTypeParserWithLegacySupport, doParseMultiFields, doValidate, executeScript, fullPath, hasScript, ignoreMalformed, indexScriptValues, multiFields, multiFieldsIterator, notFromDynamicTemplates, notInMultiFields, parse, parsesArrayValue, sourceKeepMode, sourcePathUsedBy, syntheticFieldLoader, syntheticVectorsLoader, throwIndexingWithScriptParam, toXContent, typeName, validateMethods inherited from class org.elasticsearch.index.mapper.Mapper
freezeAndDeduplicateFieldType, getOffsetFieldName, internFieldName, leafName, supportStoringArrayOffsets, toStringMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface java.lang.Iterable
forEach, spliteratorMethods inherited from interface org.elasticsearch.index.mapper.PassThroughFieldSource
fullPathMethods inherited from interface org.elasticsearch.xcontent.ToXContentFragment
isFragment
-
Field Details
-
CONTENT_TYPE
- See Also:
-
KEYED_FIELD_SUFFIX
- See Also:
-
KEYED_IGNORED_VALUES_FIELD_SUFFIX
- See Also:
-
TIME_SERIES_DIMENSIONS_ARRAY_PARAM
- See Also:
-
FLATTENED_MAPPED_SUBFIELDS_FEATURE
-
FLATTENED_PASSTHROUGH_FEATURE
-
DEFAULT_DOC_VALUES_PARAMS
-
PARSER
-
-
Method Details
-
preserveLeafArrays
-
indexAnalyzers
- Overrides:
indexAnalyzersin classFieldMapper
-
contentType
- Specified by:
contentTypein classFieldMapper
-
isPassthrough
public boolean isPassthrough() -
priority
public int priority()Description copied from interface:PassThroughFieldSourceThe non-negative priority used to resolve conflicts when multiple passthrough sources expose sub-fields with the same leaf name at the root level. Higher priority wins.- Specified by:
priorityin interfacePassThroughFieldSource
-
passThroughSubFields
Description copied from interface:PassThroughFieldSourceThe set of sub-field mappers whoseMapper.leafName()should be registered as root-level aliases. Returns an empty collection when passthrough is disabled or there are no eligible sub-fields.- Specified by:
passThroughSubFieldsin interfacePassThroughFieldSource
-
fieldType
- Overrides:
fieldTypein classFieldMapper
-
supportsParsingObject
protected boolean supportsParsingObject()Description copied from class:FieldMapperWhether this mapper can handle an object value during document parsing. When the subobjects property is set to false, and we encounter an object while parsing we need a way to understand if its fieldMapper is able to parse an object. If that's the case we can provide the entire object to the FieldMapper otherwise its name becomes the part of the dotted field name of each internal value.- Overrides:
supportsParsingObjectin classFieldMapper
-
iterator
- Specified by:
iteratorin interfaceIterable<Mapper>- Overrides:
iteratorin classFieldMapper
-
getTotalFieldsCount
public int getTotalFieldsCount()Description copied from class:MapperThe total number of fields as defined in the mapping. Defines how this mapper counts towardsMapperService.INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING.- Overrides:
getTotalFieldsCountin classFieldMapper
-
parseCreateField
Description copied from class:FieldMapperParse the field value and populate the fields onDocumentParserContext.doc(). Implementations of this method should ensure that on failing to parse parser.currentToken() must be the current failing token- Specified by:
parseCreateFieldin classFieldMapper- Throws:
IOException
-
doXContentBody
protected void doXContentBody(XContentBuilder xContentBuilder, ToXContent.Params params) throws IOException - Overrides:
doXContentBodyin classFieldMapper- Throws:
IOException
-
getMergeBuilder
Description copied from class:FieldMapperReturns aFieldMapper.Builderto be used for merging and serialization Implement as follows:return new MyBuilder(simpleName()).init(this);- Specified by:
getMergeBuilderin classFieldMapper
-
syntheticSourceSupport
Description copied from class:FieldMapperReturns implementation of synthetic source support for the mapper.
By default (meaningFieldMapper.SyntheticSourceSupport.Fallback), an exact full copy of parsed field value is stored separately and used for synthetic source.Field mappers must override this method if they provide a more efficient field-specific implementation of synthetic source.
- Overrides:
syntheticSourceSupportin classFieldMapper- Returns:
FieldMapper.SyntheticSourceMode
-