diff --git a/docs/reference/index-modules/mapper.asciidoc b/docs/reference/index-modules/mapper.asciidoc index 2bbca6c095d..baca199efae 100644 --- a/docs/reference/index-modules/mapper.asciidoc +++ b/docs/reference/index-modules/mapper.asciidoc @@ -32,7 +32,7 @@ mapping specified in the <> or `_default_` mapping. The default mapping definition is a plain mapping definition that is -embedded within ElasticSearch: +embedded within Elasticsearch: [source,js] -------------------------------------------------- @@ -46,11 +46,8 @@ Pretty short, isn't it? Basically, everything is `_default_`ed, including the dynamic nature of the root object mapping which allows new fields to be added automatically. -The built-in default mapping definition can be overridden in several ways. A -`_default_` mapping can be specified when creating a new index, or the global -`_default_` mapping (for all indices) can be configured by creating a file -called `config/default-mapping.json`. (This location can be changed with -the `index.mapper.default_mapping_location` setting.) +The default mapping can be overridden by specifying the `_default_` type when +creating a new index. Dynamic creation of mappings for unmapped types can be completely disabled by setting `index.mapper.dynamic` to `false`. diff --git a/docs/reference/mapping.asciidoc b/docs/reference/mapping.asciidoc index 945d5a49ffc..7e11fe658a2 100644 --- a/docs/reference/mapping.asciidoc +++ b/docs/reference/mapping.asciidoc @@ -71,8 +71,6 @@ include::mapping/date-format.asciidoc[] include::mapping/dynamic-mapping.asciidoc[] -include::mapping/conf-mappings.asciidoc[] - include::mapping/meta.asciidoc[] include::mapping/transform.asciidoc[] diff --git a/docs/reference/mapping/conf-mappings.asciidoc b/docs/reference/mapping/conf-mappings.asciidoc deleted file mode 100644 index e9bb3f91f93..00000000000 --- a/docs/reference/mapping/conf-mappings.asciidoc +++ /dev/null @@ -1,19 +0,0 @@ -[[mapping-conf-mappings]] -== Config Mappings - -Creating new mappings can be done using the -<> -API. When a document is indexed with no mapping associated with it in -the specific index, the -<> feature will kick in and automatically create mapping -definition for it. - -Mappings can also be provided on the node level, meaning that each index -created will automatically be started with all the mappings defined -within a certain location. - -Mappings can be defined within files called `[mapping_name].json` and be -placed either under `config/mappings/_default` location, or under -`config/mappings/[index_name]` (for mappings that should be associated -only with a specific index). diff --git a/docs/reference/mapping/dynamic-mapping.asciidoc b/docs/reference/mapping/dynamic-mapping.asciidoc index abcfbc650e1..91ecd6b0c2d 100644 --- a/docs/reference/mapping/dynamic-mapping.asciidoc +++ b/docs/reference/mapping/dynamic-mapping.asciidoc @@ -21,12 +21,8 @@ embedded within the distribution: -------------------------------------------------- Pretty short, isn't it? Basically, everything is defaulted, especially the -dynamic nature of the root object mapping. The default mapping -definition can be overridden in several manners. The simplest manner is -to simply define a file called `default-mapping.json` and to place it -under the `config` directory (which can be configured to exist in a -different location). It can also be explicitly set using the -`index.mapper.default_mapping_location` setting. +dynamic nature of the root object mapping. The default mapping can be +overridden by specifying the `_default_` type when creating a new index. The dynamic creation of mappings for unmapped types can be completely disabled by setting `index.mapper.dynamic` to `false`. diff --git a/docs/reference/migration/migrate_2_0.asciidoc b/docs/reference/migration/migrate_2_0.asciidoc index ff8befce427..5435f4df2fd 100644 --- a/docs/reference/migration/migrate_2_0.asciidoc +++ b/docs/reference/migration/migrate_2_0.asciidoc @@ -312,6 +312,14 @@ They are always stored with doc values, and not indexed. The `_source` field no longer supports `includes` and `excludes` paramters. When `_source` is enabled, the entire original source will be stored. +==== Config based mappings +The ability to specify mappings in configuration files has been removed. To specify +default mappings that apply to multiple indexes, use index templates. + +The following settings are no longer valid: +* `index.mapper.default_mapping_location` +* `index.mapper.default_percolator_mapping_location` + === Codecs It is no longer possible to specify per-field postings and doc values formats diff --git a/src/main/java/org/elasticsearch/index/mapper/MapperService.java b/src/main/java/org/elasticsearch/index/mapper/MapperService.java index 58f6bb271d7..7d242c953c0 100755 --- a/src/main/java/org/elasticsearch/index/mapper/MapperService.java +++ b/src/main/java/org/elasticsearch/index/mapper/MapperService.java @@ -20,13 +20,11 @@ package org.elasticsearch.index.mapper; import com.carrotsearch.hppc.ObjectOpenHashSet; -import com.google.common.base.Charsets; import com.google.common.base.Predicate; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterators; import com.google.common.collect.Lists; - import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.DelegatingAnalyzerWrapper; import org.apache.lucene.index.IndexOptions; @@ -44,14 +42,9 @@ import org.elasticsearch.common.collect.ImmutableOpenMap; import org.elasticsearch.common.collect.Tuple; import org.elasticsearch.common.compress.CompressedString; import org.elasticsearch.common.inject.Inject; -import org.elasticsearch.common.io.FileSystemUtils; -import org.elasticsearch.common.io.PathUtils; -import org.elasticsearch.common.io.Streams; import org.elasticsearch.common.lucene.search.Queries; import org.elasticsearch.common.regex.Regex; import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.env.Environment; -import org.elasticsearch.env.FailedToResolveConfigException; import org.elasticsearch.index.AbstractIndexComponent; import org.elasticsearch.index.Index; import org.elasticsearch.index.analysis.AnalysisService; @@ -67,8 +60,6 @@ import org.elasticsearch.percolator.PercolatorService; import org.elasticsearch.script.ScriptService; import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -122,7 +113,7 @@ public class MapperService extends AbstractIndexComponent { private volatile ImmutableMap> unmappedFieldMappers = ImmutableMap.of(); @Inject - public MapperService(Index index, @IndexSettings Settings indexSettings, Environment environment, AnalysisService analysisService, IndexFieldDataService fieldDataService, + public MapperService(Index index, @IndexSettings Settings indexSettings, AnalysisService analysisService, IndexFieldDataService fieldDataService, SimilarityLookupService similarityLookupService, ScriptService scriptService) { super(index, indexSettings); @@ -134,107 +125,36 @@ public class MapperService extends AbstractIndexComponent { this.searchQuoteAnalyzer = new SmartIndexNameSearchQuoteAnalyzer(analysisService.defaultSearchQuoteAnalyzer()); this.dynamic = indexSettings.getAsBoolean("index.mapper.dynamic", true); - String defaultMappingLocation = indexSettings.get("index.mapper.default_mapping_location"); - final URL defaultMappingUrl; + defaultPercolatorMappingSource = "{\n" + + "\"_default_\":{\n" + + "\"properties\" : {\n" + + "\"query\" : {\n" + + "\"type\" : \"object\",\n" + + "\"enabled\" : false\n" + + "}\n" + + "}\n" + + "}\n" + + "}"; if (index.getName().equals(ScriptService.SCRIPT_INDEX)){ - defaultMappingUrl = getMappingUrl(indexSettings, environment, defaultMappingLocation, "script-mapping.json", "org/elasticsearch/index/mapper/script-mapping.json"); - } else { - defaultMappingUrl = getMappingUrl(indexSettings, environment, defaultMappingLocation, "default-mapping.json", "org/elasticsearch/index/mapper/default-mapping.json"); - } - - if (defaultMappingUrl == null) { - logger.info("failed to find default-mapping.json in the classpath, using the default template"); - if (index.getName().equals(ScriptService.SCRIPT_INDEX)){ - defaultMappingSource = "{" + - "\"_default_\": {" + - "\"properties\": {" + + defaultMappingSource = "{" + + "\"_default_\": {" + + "\"properties\": {" + "\"script\": { \"enabled\": false }," + "\"template\": { \"enabled\": false }" + - "}" + - "}" + - "}"; - } else { - defaultMappingSource = "{\n" + - " \"_default_\":{\n" + - " }\n" + - "}"; - } + "}" + + "}" + + "}"; } else { - try { - defaultMappingSource = Streams.copyToString(FileSystemUtils.newBufferedReader(defaultMappingUrl, Charsets.UTF_8)); - } catch (IOException e) { - throw new MapperException("Failed to load default mapping source from [" + defaultMappingLocation + "]", e); - } - } - - String percolatorMappingLocation = indexSettings.get("index.mapper.default_percolator_mapping_location"); - URL percolatorMappingUrl = null; - if (percolatorMappingLocation != null) { - try { - percolatorMappingUrl = environment.resolveConfig(percolatorMappingLocation); - } catch (FailedToResolveConfigException e) { - // not there, default to the built in one - try { - percolatorMappingUrl = PathUtils.get(percolatorMappingLocation).toUri().toURL(); - } catch (MalformedURLException e1) { - throw new FailedToResolveConfigException("Failed to resolve default percolator mapping location [" + percolatorMappingLocation + "]"); - } - } - } - if (percolatorMappingUrl != null) { - try { - defaultPercolatorMappingSource = Streams.copyToString(FileSystemUtils.newBufferedReader(percolatorMappingUrl, Charsets.UTF_8)); - } catch (IOException e) { - throw new MapperException("Failed to load default percolator mapping source from [" + percolatorMappingUrl + "]", e); - } - } else { - defaultPercolatorMappingSource = "{\n" + - //" \"" + PercolatorService.TYPE_NAME + "\":{\n" + - " \"" + "_default_" + "\":{\n" + - " \"properties\" : {\n" + - " \"query\" : {\n" + - " \"type\" : \"object\",\n" + - " \"enabled\" : false\n" + - " }\n" + - " }\n" + - " }\n" + - "}"; + defaultMappingSource = "{\"_default_\":{}}"; } if (logger.isTraceEnabled()) { - logger.trace("using dynamic[{}], default mapping: default_mapping_location[{}], loaded_from[{}] and source[{}], default percolator mapping: location[{}], loaded_from[{}] and source[{}]", dynamic, defaultMappingLocation, defaultMappingUrl, defaultMappingSource, percolatorMappingLocation, percolatorMappingUrl, defaultPercolatorMappingSource); + logger.trace("using dynamic[{}], default mapping source[{}], default percolator mapping source[{}]", dynamic, defaultMappingSource, defaultPercolatorMappingSource); } else if (logger.isDebugEnabled()) { - logger.debug("using dynamic[{}], default mapping: default_mapping_location[{}], loaded_from[{}], default percolator mapping: location[{}], loaded_from[{}]", dynamic, defaultMappingLocation, defaultMappingUrl, percolatorMappingLocation, percolatorMappingUrl); + logger.debug("using dynamic[{}]", dynamic); } } - private URL getMappingUrl(Settings indexSettings, Environment environment, String mappingLocation, String configString, String resourceLocation) { - URL mappingUrl; - if (mappingLocation == null) { - try { - mappingUrl = environment.resolveConfig(configString); - } catch (FailedToResolveConfigException e) { - // not there, default to the built in one - mappingUrl = indexSettings.getClassLoader().getResource(resourceLocation); - if (mappingUrl == null) { - mappingUrl = MapperService.class.getClassLoader().getResource(resourceLocation); - } - } - } else { - try { - mappingUrl = environment.resolveConfig(mappingLocation); - } catch (FailedToResolveConfigException e) { - // not there, default to the built in one - try { - mappingUrl = PathUtils.get(mappingLocation).toUri().toURL(); - } catch (MalformedURLException e1) { - throw new FailedToResolveConfigException("Failed to resolve dynamic mapping location [" + mappingLocation + "]"); - } - } - } - return mappingUrl; - } - public void close() { for (DocumentMapper documentMapper : mappers.values()) { documentMapper.close();