All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.elasticsearch.index.mapper.MappingParserContext Maven / Gradle / Ivy

There is a newer version: 8.15.1
Show newest version
/*
 * 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.index.mapper;

import org.elasticsearch.TransportVersion;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.time.DateFormatter;
import org.elasticsearch.index.IndexSettings;
import org.elasticsearch.index.IndexVersion;
import org.elasticsearch.index.analysis.IndexAnalyzers;
import org.elasticsearch.index.query.SearchExecutionContext;
import org.elasticsearch.index.similarity.SimilarityProvider;
import org.elasticsearch.script.ScriptCompiler;

import java.util.function.Function;
import java.util.function.Supplier;

/**
 * Holds everything that is needed to parse mappings. This is carried around while parsing mappings whether that
 * be from a dynamic template or from index mappings themselves.
 */
public class MappingParserContext {

    private final Function similarityLookupService;
    private final Function typeParsers;
    private final Function runtimeFieldParsers;
    private final IndexVersion indexVersionCreated;
    private final Supplier clusterTransportVersion;
    private final Supplier searchExecutionContextSupplier;
    private final ScriptCompiler scriptCompiler;
    private final IndexAnalyzers indexAnalyzers;
    private final IndexSettings indexSettings;
    private final IdFieldMapper idFieldMapper;
    private final long mappingObjectDepthLimit;
    private long mappingObjectDepth = 0;

    public MappingParserContext(
        Function similarityLookupService,
        Function typeParsers,
        Function runtimeFieldParsers,
        IndexVersion indexVersionCreated,
        Supplier clusterTransportVersion,
        Supplier searchExecutionContextSupplier,
        ScriptCompiler scriptCompiler,
        IndexAnalyzers indexAnalyzers,
        IndexSettings indexSettings,
        IdFieldMapper idFieldMapper
    ) {
        this.similarityLookupService = similarityLookupService;
        this.typeParsers = typeParsers;
        this.runtimeFieldParsers = runtimeFieldParsers;
        this.indexVersionCreated = indexVersionCreated;
        this.clusterTransportVersion = clusterTransportVersion;
        this.searchExecutionContextSupplier = searchExecutionContextSupplier;
        this.scriptCompiler = scriptCompiler;
        this.indexAnalyzers = indexAnalyzers;
        this.indexSettings = indexSettings;
        this.idFieldMapper = idFieldMapper;
        this.mappingObjectDepthLimit = indexSettings.getMappingDepthLimit();
    }

    public IndexAnalyzers getIndexAnalyzers() {
        return indexAnalyzers;
    }

    public IndexSettings getIndexSettings() {
        return indexSettings;
    }

    public IdFieldMapper idFieldMapper() {
        return idFieldMapper;
    }

    public Settings getSettings() {
        return indexSettings.getSettings();
    }

    public SimilarityProvider getSimilarity(String name) {
        return similarityLookupService.apply(name);
    }

    public Mapper.TypeParser typeParser(String type) {
        return typeParsers.apply(type);
    }

    public RuntimeField.Parser runtimeFieldParser(String type) {
        return runtimeFieldParsers.apply(type);
    }

    public IndexVersion indexVersionCreated() {
        return indexVersionCreated;
    }

    public Supplier clusterTransportVersion() {
        return clusterTransportVersion;
    }

    public Supplier searchExecutionContext() {
        return searchExecutionContextSupplier;
    }

    /**
     * Gets an optional default date format for date fields that do not have an explicit format set
     * 

* If {@code null}, then date fields will default to {@link DateFieldMapper#DEFAULT_DATE_TIME_FORMATTER}. */ public DateFormatter getDateFormatter() { return null; } public boolean isWithinMultiField() { return false; } /** * true if this pars context is coming from parsing dynamic template mappings */ public boolean isFromDynamicTemplate() { return false; } /** * The {@linkplain ScriptCompiler} to compile scripts needed by the {@linkplain Mapper}. */ public ScriptCompiler scriptCompiler() { return scriptCompiler; } void incrementMappingObjectDepth() throws MapperParsingException { mappingObjectDepth++; if (mappingObjectDepth > mappingObjectDepthLimit) { throw new MapperParsingException("Limit of mapping depth [" + mappingObjectDepthLimit + "] has been exceeded"); } } void decrementMappingObjectDepth() throws MapperParsingException { mappingObjectDepth--; } public MappingParserContext createMultiFieldContext() { return new MultiFieldParserContext(this); } private static class MultiFieldParserContext extends MappingParserContext { MultiFieldParserContext(MappingParserContext in) { super( in.similarityLookupService, in.typeParsers, in.runtimeFieldParsers, in.indexVersionCreated, in.clusterTransportVersion, in.searchExecutionContextSupplier, in.scriptCompiler, in.indexAnalyzers, in.indexSettings, in.idFieldMapper ); } @Override public boolean isWithinMultiField() { return true; } } public MappingParserContext createDynamicTemplateContext(DateFormatter dateFormatter) { return new DynamicTemplateParserContext(this, dateFormatter); } private static class DynamicTemplateParserContext extends MappingParserContext { private final DateFormatter dateFormatter; DynamicTemplateParserContext(MappingParserContext in, DateFormatter dateFormatter) { super( in.similarityLookupService, in.typeParsers, in.runtimeFieldParsers, in.indexVersionCreated, in.clusterTransportVersion, in.searchExecutionContextSupplier, in.scriptCompiler, in.indexAnalyzers, in.indexSettings, in.idFieldMapper ); this.dateFormatter = dateFormatter; } @Override public DateFormatter getDateFormatter() { return dateFormatter; } @Override public boolean isFromDynamicTemplate() { return true; } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy