|
@@ -67,10 +67,6 @@ import static org.hamcrest.Matchers.notNullValue;
|
|
|
*
|
|
|
*/
|
|
|
public class MultiFieldTests extends ESSingleNodeTestCase {
|
|
|
- public void testMultiFieldMultiFieldType() throws Exception {
|
|
|
- String mapping = copyToStringFromClasspath("/org/elasticsearch/index/mapper/multifield/test-multi-field-type.json");
|
|
|
- testMultiField(mapping);
|
|
|
- }
|
|
|
|
|
|
public void testMultiFieldMultiFields() throws Exception {
|
|
|
String mapping = copyToStringFromClasspath("/org/elasticsearch/index/mapper/multifield/test-multi-fields.json");
|
|
@@ -186,224 +182,6 @@ public class MultiFieldTests extends ESSingleNodeTestCase {
|
|
|
assertEquals(IndexOptions.NONE, f.fieldType().indexOptions());
|
|
|
}
|
|
|
|
|
|
- public void testConvertMultiFieldNoDefaultField() throws Exception {
|
|
|
- String mapping = copyToStringFromClasspath("/org/elasticsearch/index/mapper/multifield/test-multi-field-type-no-default-field.json");
|
|
|
- DocumentMapper docMapper = createIndex("test").mapperService().documentMapperParser().parse("person", new CompressedXContent(mapping));
|
|
|
- BytesReference json = new BytesArray(copyToBytesFromClasspath("/org/elasticsearch/index/mapper/multifield/test-data.json"));
|
|
|
- Document doc = docMapper.parse("test", "person", "1", json).rootDoc();
|
|
|
-
|
|
|
- assertNull(doc.getField("name"));
|
|
|
- IndexableField f = doc.getField("name.indexed");
|
|
|
- assertThat(f.name(), equalTo("name.indexed"));
|
|
|
- assertThat(f.stringValue(), equalTo("some name"));
|
|
|
- assertThat(f.fieldType().stored(), equalTo(false));
|
|
|
- assertNotSame(IndexOptions.NONE, f.fieldType().indexOptions());
|
|
|
-
|
|
|
- f = doc.getField("name.not_indexed");
|
|
|
- assertThat(f.name(), equalTo("name.not_indexed"));
|
|
|
- assertThat(f.stringValue(), equalTo("some name"));
|
|
|
- assertThat(f.fieldType().stored(), equalTo(true));
|
|
|
- assertEquals(IndexOptions.NONE, f.fieldType().indexOptions());
|
|
|
-
|
|
|
- assertThat(docMapper.mappers().getMapper("name"), notNullValue());
|
|
|
- assertThat(docMapper.mappers().getMapper("name"), instanceOf(StringFieldMapper.class));
|
|
|
- assertEquals(IndexOptions.NONE, docMapper.mappers().getMapper("name").fieldType().indexOptions());
|
|
|
- assertThat(docMapper.mappers().getMapper("name").fieldType().stored(), equalTo(false));
|
|
|
- assertThat(docMapper.mappers().getMapper("name").fieldType().tokenized(), equalTo(true));
|
|
|
-
|
|
|
- assertThat(docMapper.mappers().getMapper("name.indexed"), notNullValue());
|
|
|
- assertThat(docMapper.mappers().getMapper("name.indexed"), instanceOf(StringFieldMapper.class));
|
|
|
- assertNotNull(docMapper.mappers().getMapper("name.indexed").fieldType().indexOptions());
|
|
|
- assertThat(docMapper.mappers().getMapper("name.indexed").fieldType().stored(), equalTo(false));
|
|
|
- assertThat(docMapper.mappers().getMapper("name.indexed").fieldType().tokenized(), equalTo(true));
|
|
|
-
|
|
|
- assertThat(docMapper.mappers().getMapper("name.not_indexed"), notNullValue());
|
|
|
- assertThat(docMapper.mappers().getMapper("name.not_indexed"), instanceOf(StringFieldMapper.class));
|
|
|
- assertEquals(IndexOptions.NONE, docMapper.mappers().getMapper("name.not_indexed").fieldType().indexOptions());
|
|
|
- assertThat(docMapper.mappers().getMapper("name.not_indexed").fieldType().stored(), equalTo(true));
|
|
|
- assertThat(docMapper.mappers().getMapper("name.not_indexed").fieldType().tokenized(), equalTo(true));
|
|
|
-
|
|
|
- assertNull(doc.getField("age"));
|
|
|
- f = doc.getField("age.not_stored");
|
|
|
- assertThat(f.name(), equalTo("age.not_stored"));
|
|
|
- assertThat(f.numericValue(), equalTo((Number) 28L));
|
|
|
- assertThat(f.fieldType().stored(), equalTo(false));
|
|
|
- assertNotSame(IndexOptions.NONE, f.fieldType().indexOptions());
|
|
|
-
|
|
|
- f = doc.getField("age.stored");
|
|
|
- assertThat(f.name(), equalTo("age.stored"));
|
|
|
- assertThat(f.numericValue(), equalTo((Number) 28L));
|
|
|
- assertThat(f.fieldType().stored(), equalTo(true));
|
|
|
- assertNotSame(IndexOptions.NONE, f.fieldType().indexOptions());
|
|
|
-
|
|
|
- assertThat(docMapper.mappers().getMapper("age"), notNullValue());
|
|
|
- assertThat(docMapper.mappers().getMapper("age"), instanceOf(LongFieldMapper.class));
|
|
|
- assertEquals(IndexOptions.NONE, docMapper.mappers().getMapper("age").fieldType().indexOptions());
|
|
|
- assertThat(docMapper.mappers().getMapper("age").fieldType().stored(), equalTo(false));
|
|
|
- assertThat(docMapper.mappers().getMapper("age").fieldType().tokenized(), equalTo(false));
|
|
|
-
|
|
|
- assertThat(docMapper.mappers().getMapper("age.not_stored"), notNullValue());
|
|
|
- assertThat(docMapper.mappers().getMapper("age.not_stored"), instanceOf(LongFieldMapper.class));
|
|
|
- assertNotSame(IndexOptions.NONE, docMapper.mappers().getMapper("age.not_stored").fieldType().indexOptions());
|
|
|
- assertThat(docMapper.mappers().getMapper("age.not_stored").fieldType().stored(), equalTo(false));
|
|
|
- assertThat(docMapper.mappers().getMapper("age.not_stored").fieldType().tokenized(), equalTo(false));
|
|
|
-
|
|
|
- assertThat(docMapper.mappers().getMapper("age.stored"), notNullValue());
|
|
|
- assertThat(docMapper.mappers().getMapper("age.stored"), instanceOf(LongFieldMapper.class));
|
|
|
- assertNotSame(IndexOptions.NONE, docMapper.mappers().getMapper("age.stored").fieldType().indexOptions());
|
|
|
- assertThat(docMapper.mappers().getMapper("age.stored").fieldType().stored(), equalTo(true));
|
|
|
- assertThat(docMapper.mappers().getMapper("age.stored").fieldType().tokenized(), equalTo(false));
|
|
|
- }
|
|
|
-
|
|
|
- public void testConvertMultiFieldGeoPoint() throws Exception {
|
|
|
- Version version = VersionUtils.randomVersionBetween(random(), Version.V_1_0_0, Version.CURRENT);
|
|
|
- Settings settings = Settings.settingsBuilder().put(IndexMetaData.SETTING_VERSION_CREATED, version).build();
|
|
|
- boolean indexCreatedBefore22 = version.before(Version.V_2_2_0);
|
|
|
- String mapping = copyToStringFromClasspath("/org/elasticsearch/index/mapper/multifield/test-multi-field-type-geo_point.json");
|
|
|
- DocumentMapper docMapper = createIndex("test", settings).mapperService().documentMapperParser().parse("type", new CompressedXContent(mapping));
|
|
|
-
|
|
|
- assertThat(docMapper.mappers().getMapper("a"), notNullValue());
|
|
|
- assertThat(docMapper.mappers().getMapper("a"), instanceOf(StringFieldMapper.class));
|
|
|
- assertNotSame(IndexOptions.NONE, docMapper.mappers().getMapper("a").fieldType().indexOptions());
|
|
|
- assertThat(docMapper.mappers().getMapper("a").fieldType().stored(), equalTo(false));
|
|
|
- assertThat(docMapper.mappers().getMapper("a").fieldType().tokenized(), equalTo(false));
|
|
|
-
|
|
|
- assertThat(docMapper.mappers().getMapper("a.b"), notNullValue());
|
|
|
- assertThat(docMapper.mappers().getMapper("a.b"), instanceOf(BaseGeoPointFieldMapper.class));
|
|
|
- assertNotSame(IndexOptions.NONE, docMapper.mappers().getMapper("a.b").fieldType().indexOptions());
|
|
|
- final boolean stored = indexCreatedBefore22 == false;
|
|
|
- assertThat(docMapper.mappers().getMapper("a.b").fieldType().stored(), equalTo(stored));
|
|
|
- assertThat(docMapper.mappers().getMapper("a.b").fieldType().tokenized(), equalTo(false));
|
|
|
- final boolean hasDocValues = indexCreatedBefore22 == false;
|
|
|
- assertThat(docMapper.mappers().getMapper("a.b").fieldType().hasDocValues(), equalTo(hasDocValues));
|
|
|
-
|
|
|
- BytesReference json = jsonBuilder().startObject()
|
|
|
- .field("a", "-1,-1")
|
|
|
- .endObject().bytes();
|
|
|
- Document doc = docMapper.parse("test", "type", "1", json).rootDoc();
|
|
|
-
|
|
|
- IndexableField f = doc.getField("a");
|
|
|
- assertThat(f, notNullValue());
|
|
|
- assertThat(f.name(), equalTo("a"));
|
|
|
- assertThat(f.stringValue(), equalTo("-1,-1"));
|
|
|
- assertThat(f.fieldType().stored(), equalTo(false));
|
|
|
- assertNotSame(IndexOptions.NONE, f.fieldType().indexOptions());
|
|
|
-
|
|
|
- f = doc.getField("a.b");
|
|
|
- assertThat(f, notNullValue());
|
|
|
- assertThat(f.name(), equalTo("a.b"));
|
|
|
- if (indexCreatedBefore22 == true) {
|
|
|
- assertThat(f.stringValue(), equalTo("-1.0,-1.0"));
|
|
|
- } else {
|
|
|
- assertThat(Long.parseLong(f.stringValue()), equalTo(GeoUtils.mortonHash(-1.0, -1.0)));
|
|
|
- }
|
|
|
- assertThat(f.fieldType().stored(), equalTo(stored));
|
|
|
- assertNotSame(IndexOptions.NONE, f.fieldType().indexOptions());
|
|
|
-
|
|
|
- assertThat(docMapper.mappers().getMapper("b"), notNullValue());
|
|
|
- assertThat(docMapper.mappers().getMapper("b"), instanceOf(BaseGeoPointFieldMapper.class));
|
|
|
- assertNotSame(IndexOptions.NONE, docMapper.mappers().getMapper("b").fieldType().indexOptions());
|
|
|
- assertThat(docMapper.mappers().getMapper("b").fieldType().stored(), equalTo(stored));
|
|
|
- assertThat(docMapper.mappers().getMapper("b").fieldType().tokenized(), equalTo(false));
|
|
|
- assertThat(docMapper.mappers().getMapper("b").fieldType().hasDocValues(), equalTo(hasDocValues));
|
|
|
-
|
|
|
- assertThat(docMapper.mappers().getMapper("b.a"), notNullValue());
|
|
|
- assertThat(docMapper.mappers().getMapper("b.a"), instanceOf(StringFieldMapper.class));
|
|
|
- assertNotSame(IndexOptions.NONE, docMapper.mappers().getMapper("b.a").fieldType().indexOptions());
|
|
|
- assertThat(docMapper.mappers().getMapper("b.a").fieldType().stored(), equalTo(false));
|
|
|
- assertThat(docMapper.mappers().getMapper("b.a").fieldType().tokenized(), equalTo(false));
|
|
|
-
|
|
|
- json = jsonBuilder().startObject()
|
|
|
- .field("b", "-1,-1")
|
|
|
- .endObject().bytes();
|
|
|
- doc = docMapper.parse("test", "type", "1", json).rootDoc();
|
|
|
-
|
|
|
- f = doc.getField("b");
|
|
|
- assertThat(f, notNullValue());
|
|
|
- assertThat(f.name(), equalTo("b"));
|
|
|
- if (indexCreatedBefore22 == true) {
|
|
|
- assertThat(f.stringValue(), equalTo("-1.0,-1.0"));
|
|
|
- } else {
|
|
|
- assertThat(Long.parseLong(f.stringValue()), equalTo(GeoUtils.mortonHash(-1.0, -1.0)));
|
|
|
- }
|
|
|
- assertThat(f.fieldType().stored(), equalTo(stored));
|
|
|
- assertNotSame(IndexOptions.NONE, f.fieldType().indexOptions());
|
|
|
-
|
|
|
- f = doc.getField("b.a");
|
|
|
- assertThat(f, notNullValue());
|
|
|
- assertThat(f.name(), equalTo("b.a"));
|
|
|
- assertThat(f.stringValue(), equalTo("-1,-1"));
|
|
|
- assertThat(f.fieldType().stored(), equalTo(false));
|
|
|
- assertNotSame(IndexOptions.NONE, f.fieldType().indexOptions());
|
|
|
- }
|
|
|
-
|
|
|
- public void testConvertMultiFieldCompletion() throws Exception {
|
|
|
- String mapping = copyToStringFromClasspath("/org/elasticsearch/index/mapper/multifield/test-multi-field-type-completion.json");
|
|
|
- DocumentMapper docMapper = createIndex("test").mapperService().documentMapperParser().parse("type", new CompressedXContent(mapping));
|
|
|
-
|
|
|
- assertThat(docMapper.mappers().getMapper("a"), notNullValue());
|
|
|
- assertThat(docMapper.mappers().getMapper("a"), instanceOf(StringFieldMapper.class));
|
|
|
- assertNotSame(IndexOptions.NONE, docMapper.mappers().getMapper("a").fieldType().indexOptions());
|
|
|
- assertThat(docMapper.mappers().getMapper("a").fieldType().stored(), equalTo(false));
|
|
|
- assertThat(docMapper.mappers().getMapper("a").fieldType().tokenized(), equalTo(false));
|
|
|
-
|
|
|
- assertThat(docMapper.mappers().getMapper("a.b"), notNullValue());
|
|
|
- assertThat(docMapper.mappers().getMapper("a.b"), instanceOf(CompletionFieldMapper.class));
|
|
|
- assertNotSame(IndexOptions.NONE, docMapper.mappers().getMapper("a.b").fieldType().indexOptions());
|
|
|
- assertThat(docMapper.mappers().getMapper("a.b").fieldType().stored(), equalTo(false));
|
|
|
- assertThat(docMapper.mappers().getMapper("a.b").fieldType().tokenized(), equalTo(true));
|
|
|
-
|
|
|
- BytesReference json = jsonBuilder().startObject()
|
|
|
- .field("a", "complete me")
|
|
|
- .endObject().bytes();
|
|
|
- Document doc = docMapper.parse("test", "type", "1", json).rootDoc();
|
|
|
-
|
|
|
- IndexableField f = doc.getField("a");
|
|
|
- assertThat(f, notNullValue());
|
|
|
- assertThat(f.name(), equalTo("a"));
|
|
|
- assertThat(f.stringValue(), equalTo("complete me"));
|
|
|
- assertThat(f.fieldType().stored(), equalTo(false));
|
|
|
- assertNotSame(IndexOptions.NONE, f.fieldType().indexOptions());
|
|
|
-
|
|
|
- f = doc.getField("a.b");
|
|
|
- assertThat(f, notNullValue());
|
|
|
- assertThat(f.name(), equalTo("a.b"));
|
|
|
- assertThat(f.stringValue(), equalTo("complete me"));
|
|
|
- assertThat(f.fieldType().stored(), equalTo(false));
|
|
|
- assertNotSame(IndexOptions.NONE, f.fieldType().indexOptions());
|
|
|
-
|
|
|
- assertThat(docMapper.mappers().getMapper("b"), notNullValue());
|
|
|
- assertThat(docMapper.mappers().getMapper("b"), instanceOf(CompletionFieldMapper.class));
|
|
|
- assertNotSame(IndexOptions.NONE, docMapper.mappers().getMapper("b").fieldType().indexOptions());
|
|
|
- assertThat(docMapper.mappers().getMapper("b").fieldType().stored(), equalTo(false));
|
|
|
- assertThat(docMapper.mappers().getMapper("b").fieldType().tokenized(), equalTo(true));
|
|
|
-
|
|
|
- assertThat(docMapper.mappers().getMapper("b.a"), notNullValue());
|
|
|
- assertThat(docMapper.mappers().getMapper("b.a"), instanceOf(StringFieldMapper.class));
|
|
|
- assertNotSame(IndexOptions.NONE, docMapper.mappers().getMapper("b.a").fieldType().indexOptions());
|
|
|
- assertThat(docMapper.mappers().getMapper("b.a").fieldType().stored(), equalTo(false));
|
|
|
- assertThat(docMapper.mappers().getMapper("b.a").fieldType().tokenized(), equalTo(false));
|
|
|
-
|
|
|
- json = jsonBuilder().startObject()
|
|
|
- .field("b", "complete me")
|
|
|
- .endObject().bytes();
|
|
|
- doc = docMapper.parse("test", "type", "1", json).rootDoc();
|
|
|
-
|
|
|
- f = doc.getField("b");
|
|
|
- assertThat(f, notNullValue());
|
|
|
- assertThat(f.name(), equalTo("b"));
|
|
|
- assertThat(f.stringValue(), equalTo("complete me"));
|
|
|
- assertThat(f.fieldType().stored(), equalTo(false));
|
|
|
- assertNotSame(IndexOptions.NONE, f.fieldType().indexOptions());
|
|
|
-
|
|
|
- f = doc.getField("b.a");
|
|
|
- assertThat(f, notNullValue());
|
|
|
- assertThat(f.name(), equalTo("b.a"));
|
|
|
- assertThat(f.stringValue(), equalTo("complete me"));
|
|
|
- assertThat(f.fieldType().stored(), equalTo(false));
|
|
|
- assertNotSame(IndexOptions.NONE, f.fieldType().indexOptions());
|
|
|
- }
|
|
|
-
|
|
|
// The underlying order of the fields in multi fields in the mapping source should always be consistent, if not this
|
|
|
// can to unnecessary re-syncing of the mappings between the local instance and cluster state
|
|
|
public void testMultiFieldsInConsistentOrder() throws Exception {
|