Mappings: Remove ability to configure _index

The `_index` field is now a completely virtual field thanks
to #12027. It is no longer necessary to index the actual value
of the index name.

closes #12329
This commit is contained in:
Ryan Ernst 2015-07-20 23:54:35 -07:00
parent 47efa5c058
commit 1c99626b84
4 changed files with 19 additions and 25 deletions

View File

@ -102,10 +102,11 @@ public class IndexFieldMapper extends MetadataFieldMapper {
@Override @Override
public Mapper.Builder parse(String name, Map<String, Object> node, ParserContext parserContext) throws MapperParsingException { public Mapper.Builder parse(String name, Map<String, Object> node, ParserContext parserContext) throws MapperParsingException {
Builder builder = new Builder(parserContext.mapperService().fullName(NAME)); Builder builder = new Builder(parserContext.mapperService().fullName(NAME));
if (parserContext.indexVersionCreated().before(Version.V_2_0_0_beta1)) { if (parserContext.indexVersionCreated().onOrAfter(Version.V_2_0_0_beta1)) {
parseField(builder, builder.name, node, parserContext); return builder;
} }
parseField(builder, builder.name, node, parserContext);
for (Iterator<Map.Entry<String, Object>> iterator = node.entrySet().iterator(); iterator.hasNext();) { for (Iterator<Map.Entry<String, Object>> iterator = node.entrySet().iterator(); iterator.hasNext();) {
Map.Entry<String, Object> entry = iterator.next(); Map.Entry<String, Object> entry = iterator.next();
String fieldName = Strings.toUnderscoreCase(entry.getKey()); String fieldName = Strings.toUnderscoreCase(entry.getKey());

View File

@ -32,12 +32,13 @@ import org.elasticsearch.test.ElasticsearchSingleNodeTest;
import static org.hamcrest.Matchers.*; import static org.hamcrest.Matchers.*;
public class IndexTypeMapperTests extends ElasticsearchSingleNodeTest { public class IndexTypeMapperTests extends ElasticsearchSingleNodeTest {
private Settings bwcSettings = Settings.builder().put(IndexMetaData.SETTING_VERSION_CREATED, Version.V_1_4_2.id).build();
public void testSimpleIndexMapper() throws Exception { public void testSimpleIndexMapperEnabledBackcompat() throws Exception {
String mapping = XContentFactory.jsonBuilder().startObject().startObject("type") String mapping = XContentFactory.jsonBuilder().startObject().startObject("type")
.startObject("_index").field("enabled", true).endObject() .startObject("_index").field("enabled", true).endObject()
.endObject().endObject().string(); .endObject().endObject().string();
DocumentMapper docMapper = createIndex("test").mapperService().documentMapperParser().parse(mapping); DocumentMapper docMapper = createIndex("test", bwcSettings).mapperService().documentMapperParser().parse(mapping);
IndexFieldMapper indexMapper = docMapper.indexMapper(); IndexFieldMapper indexMapper = docMapper.indexMapper();
assertThat(indexMapper.enabled(), equalTo(true)); assertThat(indexMapper.enabled(), equalTo(true));
@ -51,11 +52,11 @@ public class IndexTypeMapperTests extends ElasticsearchSingleNodeTest {
assertThat(doc.rootDoc().get("field"), equalTo("value")); assertThat(doc.rootDoc().get("field"), equalTo("value"));
} }
public void testExplicitDisabledIndexMapper() throws Exception { public void testExplicitDisabledIndexMapperBackcompat() throws Exception {
String mapping = XContentFactory.jsonBuilder().startObject().startObject("type") String mapping = XContentFactory.jsonBuilder().startObject().startObject("type")
.startObject("_index").field("enabled", false).endObject() .startObject("_index").field("enabled", false).endObject()
.endObject().endObject().string(); .endObject().endObject().string();
DocumentMapper docMapper = createIndex("test").mapperService().documentMapperParser().parse(mapping); DocumentMapper docMapper = createIndex("test", bwcSettings).mapperService().documentMapperParser().parse(mapping);
IndexFieldMapper indexMapper = docMapper.rootMapper(IndexFieldMapper.class); IndexFieldMapper indexMapper = docMapper.rootMapper(IndexFieldMapper.class);
assertThat(indexMapper.enabled(), equalTo(false)); assertThat(indexMapper.enabled(), equalTo(false));
@ -86,11 +87,11 @@ public class IndexTypeMapperTests extends ElasticsearchSingleNodeTest {
assertThat(doc.rootDoc().get("field"), equalTo("value")); assertThat(doc.rootDoc().get("field"), equalTo("value"));
} }
public void testThatMergingFieldMappingAllowsDisabling() throws Exception { public void testThatMergingFieldMappingAllowsDisablingBackcompat() throws Exception {
String mappingWithIndexEnabled = XContentFactory.jsonBuilder().startObject().startObject("type") String mappingWithIndexEnabled = XContentFactory.jsonBuilder().startObject().startObject("type")
.startObject("_index").field("enabled", true).endObject() .startObject("_index").field("enabled", true).endObject()
.endObject().endObject().string(); .endObject().endObject().string();
DocumentMapperParser parser = createIndex("test").mapperService().documentMapperParser(); DocumentMapperParser parser = createIndex("test", bwcSettings).mapperService().documentMapperParser();
DocumentMapper mapperEnabled = parser.parse(mappingWithIndexEnabled); DocumentMapper mapperEnabled = parser.parse(mappingWithIndexEnabled);
@ -103,11 +104,11 @@ public class IndexTypeMapperTests extends ElasticsearchSingleNodeTest {
assertThat(mapperEnabled.IndexFieldMapper().enabled(), is(false)); assertThat(mapperEnabled.IndexFieldMapper().enabled(), is(false));
} }
public void testThatDisablingWorksWhenMerging() throws Exception { public void testThatDisablingWorksWhenMergingBackcompat() throws Exception {
String enabledMapping = XContentFactory.jsonBuilder().startObject().startObject("type") String enabledMapping = XContentFactory.jsonBuilder().startObject().startObject("type")
.startObject("_index").field("enabled", true).endObject() .startObject("_index").field("enabled", true).endObject()
.endObject().endObject().string(); .endObject().endObject().string();
DocumentMapperParser parser = createIndex("test").mapperService().documentMapperParser(); DocumentMapperParser parser = createIndex("test", bwcSettings).mapperService().documentMapperParser();
DocumentMapper enabledMapper = parser.parse(enabledMapping); DocumentMapper enabledMapper = parser.parse(enabledMapping);
String disabledMapping = XContentFactory.jsonBuilder().startObject().startObject("type") String disabledMapping = XContentFactory.jsonBuilder().startObject().startObject("type")
@ -125,8 +126,8 @@ public class IndexTypeMapperTests extends ElasticsearchSingleNodeTest {
.field("enabled", true) .field("enabled", true)
.field("store", "yes").endObject() .field("store", "yes").endObject()
.endObject().endObject().string(); .endObject().endObject().string();
Settings indexSettings = Settings.builder().put(IndexMetaData.SETTING_VERSION_CREATED, Version.V_1_4_2.id).build();
DocumentMapper docMapper = createIndex("test", indexSettings).mapperService().documentMapperParser().parse(mapping); DocumentMapper docMapper = createIndex("test", bwcSettings).mapperService().documentMapperParser().parse(mapping);
IndexFieldMapper indexMapper = docMapper.rootMapper(IndexFieldMapper.class); IndexFieldMapper indexMapper = docMapper.rootMapper(IndexFieldMapper.class);
assertThat(indexMapper.enabled(), equalTo(true)); assertThat(indexMapper.enabled(), equalTo(true));
assertThat(indexMapper.fieldType().stored(), equalTo(true)); assertThat(indexMapper.fieldType().stored(), equalTo(true));

View File

@ -1,15 +1,7 @@
[[mapping-index-field]] [[mapping-index-field]]
=== `_index` === `_index`
The ability to store in a document the index it belongs to. By default When performing queries across multiple indexes, it is sometimes desirable
it is disabled, in order to enable it, the following mapping should be to add query clauses that are associated with documents of only certain
defined: indexes. The `_index` field allows matching on the index a document was
indexed into.
[source,js]
--------------------------------------------------
{
"tweet" : {
"_index" : { "enabled" : true }
}
}
--------------------------------------------------

View File

@ -290,7 +290,7 @@ to provide special features. They now have limited configuration options.
* `_id` configuration can no longer be changed. If you need to sort, use `_uid` instead. * `_id` configuration can no longer be changed. If you need to sort, use `_uid` instead.
* `_type` configuration can no longer be changed. * `_type` configuration can no longer be changed.
* `_index` configuration is limited to enabling the field. * `_index` configuration can no longer be changed.
* `_routing` configuration is limited to requiring the field. * `_routing` configuration is limited to requiring the field.
* `_boost` has been removed. * `_boost` has been removed.
* `_field_names` configuration is limited to disabling the field. * `_field_names` configuration is limited to disabling the field.