org.elasticsearch.indices.mapper.MapperRegistry Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of elasticsearch Show documentation
Show all versions of elasticsearch Show documentation
Elasticsearch subproject :server
/*
* 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.
*/
package org.elasticsearch.indices.mapper;
import org.elasticsearch.Version;
import org.elasticsearch.index.mapper.AllFieldMapper;
import org.elasticsearch.index.mapper.DynamicRuntimeFieldsBuilder;
import org.elasticsearch.index.mapper.Mapper;
import org.elasticsearch.index.mapper.MetadataFieldMapper;
import org.elasticsearch.index.mapper.RuntimeFieldType;
import org.elasticsearch.plugins.MapperPlugin;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.function.Function;
import java.util.function.Predicate;
/**
* A registry for all field mappers.
*/
public final class MapperRegistry {
private final Map mapperParsers;
private final Map runtimeFieldTypeParsers;
private final DynamicRuntimeFieldsBuilder dynamicRuntimeFieldsBuilder;
private final Map metadataMapperParsers;
private final Map metadataMapperParsers6x;
private final Function> fieldFilter;
public MapperRegistry(Map mapperParsers, Map runtimeFieldTypeParsers,
DynamicRuntimeFieldsBuilder dynamicRuntimeFieldsBuilder,
Map metadataMapperParsers,
Function> fieldFilter) {
this.mapperParsers = Collections.unmodifiableMap(new LinkedHashMap<>(mapperParsers));
this.runtimeFieldTypeParsers = runtimeFieldTypeParsers;
this.dynamicRuntimeFieldsBuilder = dynamicRuntimeFieldsBuilder;
this.metadataMapperParsers = Collections.unmodifiableMap(new LinkedHashMap<>(metadataMapperParsers));
// add the _all field mapper for indices created in 6x
Map metadata6x = new LinkedHashMap<>();
metadata6x.put(AllFieldMapper.NAME, AllFieldMapper.PARSER);
metadata6x.putAll(metadataMapperParsers);
this.metadataMapperParsers6x = Collections.unmodifiableMap(metadata6x);
this.fieldFilter = fieldFilter;
}
/**
* Return a map of the mappers that have been registered. The
* returned map uses the type of the field as a key.
*/
public Map getMapperParsers() {
return mapperParsers;
}
public Map getRuntimeFieldTypeParsers() {
return runtimeFieldTypeParsers;
}
public DynamicRuntimeFieldsBuilder getDynamicRuntimeFieldsBuilder() {
return dynamicRuntimeFieldsBuilder;
}
/**
* Return a map of the meta mappers that have been registered. The
* returned map uses the name of the field as a key.
*/
public Map getMetadataMapperParsers(Version indexCreatedVersion) {
return indexCreatedVersion.onOrAfter(Version.V_7_0_0) ? metadataMapperParsers : metadataMapperParsers6x;
}
/**
* Returns a function that given an index name, returns a predicate that fields must match in order to be returned by get mappings,
* get index, get field mappings and field capabilities API. Useful to filter the fields that such API return.
* The predicate receives the field name as input arguments. In case multiple plugins register a field filter through
* {@link MapperPlugin#getFieldFilter()}, only fields that match all the registered filters will be returned by get mappings,
* get index, get field mappings and field capabilities API.
*/
public Function> getFieldFilter() {
return fieldFilter;
}
}