|
|
|
|
@@ -38,12 +38,18 @@ import java.util.Objects;
|
|
|
|
|
import java.util.Set;
|
|
|
|
|
|
|
|
|
|
import org.assertj.core.data.Percentage;
|
|
|
|
|
import org.junit.jupiter.api.BeforeEach;
|
|
|
|
|
import org.junit.jupiter.api.DisplayName;
|
|
|
|
|
import org.junit.jupiter.api.Order;
|
|
|
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.context.annotation.Bean;
|
|
|
|
|
import org.springframework.context.annotation.Configuration;
|
|
|
|
|
import org.springframework.context.annotation.Import;
|
|
|
|
|
import org.springframework.data.annotation.Id;
|
|
|
|
|
import org.springframework.data.elasticsearch.annotations.*;
|
|
|
|
|
import org.springframework.data.elasticsearch.backend.elasticsearch7.query.NativeSearchQuery;
|
|
|
|
|
import org.springframework.data.elasticsearch.backend.elasticsearch7.query.NativeSearchQueryBuilder;
|
|
|
|
|
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
|
|
|
|
|
import org.springframework.data.elasticsearch.core.IndexOperations;
|
|
|
|
|
import org.springframework.data.elasticsearch.core.MappingContextBaseTests;
|
|
|
|
|
@@ -51,12 +57,11 @@ import org.springframework.data.elasticsearch.core.SearchHits;
|
|
|
|
|
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
|
|
|
|
|
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
|
|
|
|
|
import org.springframework.data.elasticsearch.core.query.IndexQuery;
|
|
|
|
|
import org.springframework.data.elasticsearch.backend.elasticsearch7.query.NativeSearchQuery;
|
|
|
|
|
import org.springframework.data.elasticsearch.backend.elasticsearch7.query.NativeSearchQueryBuilder;
|
|
|
|
|
import org.springframework.data.elasticsearch.core.query.SeqNoPrimaryTerm;
|
|
|
|
|
import org.springframework.data.elasticsearch.core.suggest.Completion;
|
|
|
|
|
import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchRestTemplateConfiguration;
|
|
|
|
|
import org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest;
|
|
|
|
|
import org.springframework.data.elasticsearch.utils.IndexNameProvider;
|
|
|
|
|
import org.springframework.data.geo.Box;
|
|
|
|
|
import org.springframework.data.geo.Circle;
|
|
|
|
|
import org.springframework.data.geo.Point;
|
|
|
|
|
@@ -79,10 +84,25 @@ import org.springframework.test.context.ContextConfiguration;
|
|
|
|
|
* @author Morgan Lutz
|
|
|
|
|
*/
|
|
|
|
|
@SpringIntegrationTest
|
|
|
|
|
@ContextConfiguration(classes = { ElasticsearchRestTemplateConfiguration.class })
|
|
|
|
|
@ContextConfiguration(classes = { MappingBuilderIntegrationTests.Config.class })
|
|
|
|
|
public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
|
|
|
|
|
@Configuration
|
|
|
|
|
@Import({ ElasticsearchRestTemplateConfiguration.class })
|
|
|
|
|
static class Config {
|
|
|
|
|
@Bean
|
|
|
|
|
IndexNameProvider indexNameProvider() {
|
|
|
|
|
return new IndexNameProvider("mapping-builder");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Autowired private ElasticsearchOperations operations;
|
|
|
|
|
@Autowired IndexNameProvider indexNameProvider;
|
|
|
|
|
|
|
|
|
|
@BeforeEach
|
|
|
|
|
public void before() {
|
|
|
|
|
indexNameProvider.increment();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
@Order(java.lang.Integer.MAX_VALUE)
|
|
|
|
|
@@ -132,8 +152,7 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
@Test // DATAES-76
|
|
|
|
|
public void shouldAddSampleInheritedEntityDocumentToIndex() {
|
|
|
|
|
// given
|
|
|
|
|
IndexCoordinates index = IndexCoordinates.of("test-index-sample-inherited-mapping-builder");
|
|
|
|
|
IndexOperations indexOps = operations.indexOps(index);
|
|
|
|
|
IndexOperations indexOps = operations.indexOps(SampleInheritedEntity.class);
|
|
|
|
|
|
|
|
|
|
// when
|
|
|
|
|
indexOps.create();
|
|
|
|
|
@@ -142,11 +161,10 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
String message = "msg";
|
|
|
|
|
String id = "abc";
|
|
|
|
|
operations.index(new SampleInheritedEntityBuilder(id).createdDate(createdDate).message(message).buildIndex(),
|
|
|
|
|
index);
|
|
|
|
|
operations.indexOps(SampleInheritedEntity.class).refresh();
|
|
|
|
|
IndexCoordinates.of(indexNameProvider.indexName()));
|
|
|
|
|
|
|
|
|
|
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
|
|
|
|
|
SearchHits<SampleInheritedEntity> result = operations.search(searchQuery, SampleInheritedEntity.class, index);
|
|
|
|
|
SearchHits<SampleInheritedEntity> result = operations.search(searchQuery, SampleInheritedEntity.class);
|
|
|
|
|
|
|
|
|
|
// then
|
|
|
|
|
assertThat(result).hasSize(1);
|
|
|
|
|
@@ -163,7 +181,7 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
IndexOperations indexOpsUser = operations.indexOps(User.class);
|
|
|
|
|
indexOpsUser.create();
|
|
|
|
|
indexOpsUser.putMapping(User.class);
|
|
|
|
|
|
|
|
|
|
indexNameProvider.increment();
|
|
|
|
|
IndexOperations indexOpsGroup = operations.indexOps(Group.class);
|
|
|
|
|
indexOpsGroup.create();
|
|
|
|
|
indexOpsGroup.putMapping(Group.class);
|
|
|
|
|
@@ -336,11 +354,19 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test // #2024
|
|
|
|
|
@DisplayName("should map all field type values")
|
|
|
|
|
void shouldMapAllFieldTypeValues() {
|
|
|
|
|
operations.indexOps(EntityWithAllTypes.class).createWithMapping();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// region entities
|
|
|
|
|
@Document(indexName = "ignore-above-index")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
static class IgnoreAboveEntity {
|
|
|
|
|
@Nullable @Id private String id;
|
|
|
|
|
@Nullable @Field(type = FieldType.Keyword, ignoreAbove = 10) private String message;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Id private String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Keyword, ignoreAbove = 10) private String message;
|
|
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
|
public String getId() {
|
|
|
|
|
@@ -365,57 +391,76 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "fieldname-index")
|
|
|
|
|
static class IdEntity {
|
|
|
|
|
@Nullable @Id @Field("id-property") private String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Id
|
|
|
|
|
@Field("id-property") private String id;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "fieldname-index")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
static class TextEntity {
|
|
|
|
|
|
|
|
|
|
@Nullable @Id @Field("id-property") private String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Id
|
|
|
|
|
@Field("id-property") private String id;
|
|
|
|
|
|
|
|
|
|
@Field(name = "text-property", type = FieldType.Text) //
|
|
|
|
|
@Nullable private String textProperty;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "fieldname-index")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
static class MappingEntity {
|
|
|
|
|
|
|
|
|
|
@Nullable @Id @Field("id-property") private String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Id
|
|
|
|
|
@Field("id-property") private String id;
|
|
|
|
|
|
|
|
|
|
@Field("mapping-property") @Mapping(mappingPath = "/mappings/test-field-analyzed-mappings.json") //
|
|
|
|
|
@Field("mapping-property")
|
|
|
|
|
@Mapping(mappingPath = "/mappings/test-field-analyzed-mappings.json") //
|
|
|
|
|
@Nullable private byte[] mappingProperty;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "fieldname-index")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
static class GeoPointEntity {
|
|
|
|
|
|
|
|
|
|
@Nullable @Id @Field("id-property") private String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Id
|
|
|
|
|
@Field("id-property") private String id;
|
|
|
|
|
|
|
|
|
|
@Nullable @Field("geopoint-property") private GeoPoint geoPoint;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field("geopoint-property") private GeoPoint geoPoint;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "fieldname-index")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
static class CircularEntity {
|
|
|
|
|
|
|
|
|
|
@Nullable @Id @Field("id-property") private String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Id
|
|
|
|
|
@Field("id-property") private String id;
|
|
|
|
|
|
|
|
|
|
@Nullable @Field(name = "circular-property", type = FieldType.Object, ignoreFields = { "circular-property" }) //
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(name = "circular-property", type = FieldType.Object, ignoreFields = { "circular-property" }) //
|
|
|
|
|
private CircularEntity circularProperty;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "fieldname-index")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
static class CompletionEntity {
|
|
|
|
|
|
|
|
|
|
@Nullable @Id @Field("id-property") private String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Id
|
|
|
|
|
@Field("id-property") private String id;
|
|
|
|
|
|
|
|
|
|
@Nullable @Field("completion-property") @CompletionField(maxInputLength = 100) //
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field("completion-property")
|
|
|
|
|
@CompletionField(maxInputLength = 100) //
|
|
|
|
|
private Completion suggest;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "fieldname-index")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
static class MultiFieldEntity {
|
|
|
|
|
|
|
|
|
|
@Nullable @Id @Field("id-property") private String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Id
|
|
|
|
|
@Field("id-property") private String id;
|
|
|
|
|
|
|
|
|
|
@Nullable //
|
|
|
|
|
@MultiField(mainField = @Field(name = "main-field", type = FieldType.Text, analyzer = "whitespace"),
|
|
|
|
|
@@ -425,13 +470,17 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "test-index-book-mapping-builder")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
static class Book {
|
|
|
|
|
@Nullable @Id private String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Id private String id;
|
|
|
|
|
@Nullable private String name;
|
|
|
|
|
@Nullable @Field(type = FieldType.Object) private Author author;
|
|
|
|
|
@Nullable @Field(type = FieldType.Nested) private Map<Integer, Collection<String>> buckets = new HashMap<>();
|
|
|
|
|
@Nullable @MultiField(mainField = @Field(type = FieldType.Text, analyzer = "whitespace"),
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Object) private Author author;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Nested) private Map<Integer, Collection<String>> buckets = new HashMap<>();
|
|
|
|
|
@Nullable
|
|
|
|
|
@MultiField(mainField = @Field(type = FieldType.Text, analyzer = "whitespace"),
|
|
|
|
|
otherFields = { @InnerField(suffix = "prefix", type = FieldType.Text, analyzer = "stop",
|
|
|
|
|
searchAnalyzer = "standard") }) private String description;
|
|
|
|
|
|
|
|
|
|
@@ -481,11 +530,12 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "test-index-simple-recursive-mapping-builder")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
static class SimpleRecursiveEntity {
|
|
|
|
|
@Nullable @Id private String id;
|
|
|
|
|
@Nullable @Field(type = FieldType.Object,
|
|
|
|
|
ignoreFields = { "circularObject" }) private SimpleRecursiveEntity circularObject;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Id private String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Object, ignoreFields = { "circularObject" }) private SimpleRecursiveEntity circularObject;
|
|
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
|
public String getId() {
|
|
|
|
|
@@ -506,12 +556,16 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "test-copy-to-mapping-builder")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
static class CopyToEntity {
|
|
|
|
|
@Nullable @Id private String id;
|
|
|
|
|
@Nullable @Field(type = FieldType.Keyword, copyTo = "name") private String firstName;
|
|
|
|
|
@Nullable @Field(type = FieldType.Keyword, copyTo = "name") private String lastName;
|
|
|
|
|
@Nullable @Field(type = FieldType.Keyword) private String name;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Id private String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Keyword, copyTo = "name") private String firstName;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Keyword, copyTo = "name") private String lastName;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Keyword) private String name;
|
|
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
|
public String getId() {
|
|
|
|
|
@@ -550,12 +604,15 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "test-index-normalizer-mapping-builder")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
@Setting(settingPath = "/settings/test-normalizer.json")
|
|
|
|
|
static class NormalizerEntity {
|
|
|
|
|
@Nullable @Id private String id;
|
|
|
|
|
@Nullable @Field(type = FieldType.Keyword, normalizer = "lower_case_normalizer") private String name;
|
|
|
|
|
@Nullable @MultiField(mainField = @Field(type = FieldType.Text), otherFields = { @InnerField(suffix = "lower_case",
|
|
|
|
|
@Nullable
|
|
|
|
|
@Id private String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Keyword, normalizer = "lower_case_normalizer") private String name;
|
|
|
|
|
@Nullable
|
|
|
|
|
@MultiField(mainField = @Field(type = FieldType.Text), otherFields = { @InnerField(suffix = "lower_case",
|
|
|
|
|
type = FieldType.Keyword, normalizer = "lower_case_normalizer") }) private String description;
|
|
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
|
@@ -610,10 +667,11 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "test-index-sample-inherited-mapping-builder")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
static class SampleInheritedEntity extends AbstractInheritedEntity {
|
|
|
|
|
|
|
|
|
|
@Nullable @Field(type = Text, index = false, store = true, analyzer = "standard") private String message;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = Text, index = false, store = true, analyzer = "standard") private String message;
|
|
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
|
public String getMessage() {
|
|
|
|
|
@@ -656,11 +714,13 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "test-index-stock-mapping-builder")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
static class StockPrice {
|
|
|
|
|
@Nullable @Id private String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Id private String id;
|
|
|
|
|
@Nullable private String symbol;
|
|
|
|
|
@Nullable @Field(type = FieldType.Double) private BigDecimal price;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Double) private BigDecimal price;
|
|
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
|
public String getId() {
|
|
|
|
|
@@ -691,8 +751,10 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static class AbstractInheritedEntity {
|
|
|
|
|
@Nullable @Id private String id;
|
|
|
|
|
@Nullable @Field(type = FieldType.Date, format = DateFormat.date_time, index = false) private Date createdDate;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Id private String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Date, format = DateFormat.date_time, index = false) private Date createdDate;
|
|
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
|
public String getId() {
|
|
|
|
|
@@ -713,21 +775,27 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "test-index-geo-mapping-builder")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
static class GeoEntity {
|
|
|
|
|
@Nullable @Id private String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Id private String id;
|
|
|
|
|
// geo shape - Spring Data
|
|
|
|
|
@Nullable private Box box;
|
|
|
|
|
@Nullable private Circle circle;
|
|
|
|
|
@Nullable private Polygon polygon;
|
|
|
|
|
// geo point - Custom implementation + Spring Data
|
|
|
|
|
@Nullable @GeoPointField private Point pointA;
|
|
|
|
|
@Nullable
|
|
|
|
|
@GeoPointField private Point pointA;
|
|
|
|
|
@Nullable private GeoPoint pointB;
|
|
|
|
|
@Nullable @GeoPointField private String pointC;
|
|
|
|
|
@Nullable @GeoPointField private double[] pointD;
|
|
|
|
|
@Nullable
|
|
|
|
|
@GeoPointField private String pointC;
|
|
|
|
|
@Nullable
|
|
|
|
|
@GeoPointField private double[] pointD;
|
|
|
|
|
// geo shape, until e have the classes for this, us a strng
|
|
|
|
|
@Nullable @GeoShapeField private String shape1;
|
|
|
|
|
@Nullable @GeoShapeField(coerce = true, ignoreMalformed = true, ignoreZValue = false,
|
|
|
|
|
@Nullable
|
|
|
|
|
@GeoShapeField private String shape1;
|
|
|
|
|
@Nullable
|
|
|
|
|
@GeoShapeField(coerce = true, ignoreMalformed = true, ignoreZValue = false,
|
|
|
|
|
orientation = GeoShapeField.Orientation.clockwise) private String shape2;
|
|
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
|
@@ -821,17 +889,21 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "test-index-user-mapping-builder")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
|
|
|
|
|
static class User {
|
|
|
|
|
@Nullable @Id private String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Id private String id;
|
|
|
|
|
|
|
|
|
|
@Field(type = FieldType.Nested, ignoreFields = { "users" }) private Set<Group> groups = new HashSet<>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "test-index-group-mapping-builder")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
|
|
|
|
|
static class Group {
|
|
|
|
|
|
|
|
|
|
@Nullable @Id String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Id String id;
|
|
|
|
|
|
|
|
|
|
@Field(type = FieldType.Nested, ignoreFields = { "groups" }) private Set<User> users = new HashSet<>();
|
|
|
|
|
}
|
|
|
|
|
@@ -848,11 +920,14 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "completion")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
|
|
|
|
|
static class CompletionDocument {
|
|
|
|
|
@Nullable @Id private String id;
|
|
|
|
|
@Nullable @CompletionField(contexts = { @CompletionContext(name = "location",
|
|
|
|
|
type = CompletionContext.ContextMappingType.GEO, path = "proppath") }) private Completion suggest;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Id private String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@CompletionField(contexts = { @CompletionContext(name = "location", type = CompletionContext.ContextMappingType.GEO,
|
|
|
|
|
path = "proppath") }) private Completion suggest;
|
|
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
|
public String getId() {
|
|
|
|
|
@@ -873,9 +948,10 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "test-index-entity-with-seq-no-primary-term-mapping-builder")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
static class EntityWithSeqNoPrimaryTerm {
|
|
|
|
|
@Nullable @Field(type = Object) private SeqNoPrimaryTerm seqNoPrimaryTerm;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = Object) private SeqNoPrimaryTerm seqNoPrimaryTerm;
|
|
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
|
public SeqNoPrimaryTerm getSeqNoPrimaryTerm() {
|
|
|
|
|
@@ -888,10 +964,14 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static class RankFeatureEntity {
|
|
|
|
|
@Nullable @Id private String id;
|
|
|
|
|
@Nullable @Field(type = FieldType.Rank_Feature) private Integer pageRank;
|
|
|
|
|
@Nullable @Field(type = FieldType.Rank_Feature, positiveScoreImpact = false) private Integer urlLength;
|
|
|
|
|
@Nullable @Field(type = FieldType.Rank_Features) private Map<String, Integer> topics;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Id private String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Rank_Feature) private Integer pageRank;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Rank_Feature, positiveScoreImpact = false) private Integer urlLength;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Rank_Features) private Map<String, Integer> topics;
|
|
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
|
public String getId() {
|
|
|
|
|
@@ -930,18 +1010,25 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "termvectors-test")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
static class TermVectorFieldEntity {
|
|
|
|
|
@Nullable @Id private String id;
|
|
|
|
|
@Nullable @Field(type = FieldType.Text, termVector = TermVector.no) private String no;
|
|
|
|
|
@Nullable @Field(type = FieldType.Text, termVector = TermVector.yes) private String yes;
|
|
|
|
|
@Nullable @Field(type = FieldType.Text, termVector = TermVector.with_positions) private String with_positions;
|
|
|
|
|
@Nullable @Field(type = FieldType.Text, termVector = TermVector.with_offsets) private String with_offsets;
|
|
|
|
|
@Nullable @Field(type = FieldType.Text,
|
|
|
|
|
termVector = TermVector.with_positions_offsets) private String with_positions_offsets;
|
|
|
|
|
@Nullable @Field(type = FieldType.Text,
|
|
|
|
|
@Nullable
|
|
|
|
|
@Id private String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Text, termVector = TermVector.no) private String no;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Text, termVector = TermVector.yes) private String yes;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Text, termVector = TermVector.with_positions) private String with_positions;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Text, termVector = TermVector.with_offsets) private String with_offsets;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Text, termVector = TermVector.with_positions_offsets) private String with_positions_offsets;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Text,
|
|
|
|
|
termVector = TermVector.with_positions_payloads) private String with_positions_payloads;
|
|
|
|
|
@Nullable @Field(type = FieldType.Text,
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Text,
|
|
|
|
|
termVector = TermVector.with_positions_offsets_payloads) private String with_positions_offsets_payloads;
|
|
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
|
@@ -1017,10 +1104,12 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "wildcard-test")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
static class WildcardEntity {
|
|
|
|
|
@Nullable @Field(type = Wildcard) private String wildcardWithoutParams;
|
|
|
|
|
@Nullable @Field(type = Wildcard, nullValue = "WILD", ignoreAbove = 42) private String wildcardWithParams;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = Wildcard) private String wildcardWithoutParams;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = Wildcard, nullValue = "WILD", ignoreAbove = 42) private String wildcardWithParams;
|
|
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
|
public String getWildcardWithoutParams() {
|
|
|
|
|
@@ -1041,11 +1130,13 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "disabled-entity-mapping")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
@Mapping(enabled = false)
|
|
|
|
|
static class DisabledMappingEntity {
|
|
|
|
|
@Nullable @Id private String id;
|
|
|
|
|
@Nullable @Field(type = Text) private String text;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Id private String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = Text) private String text;
|
|
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
|
public String getId() {
|
|
|
|
|
@@ -1068,9 +1159,13 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "disabled-property-mapping")
|
|
|
|
|
static class DisabledMappingProperty {
|
|
|
|
|
@Nullable @Id private String id;
|
|
|
|
|
@Nullable @Field(type = Text) private String text;
|
|
|
|
|
@Nullable @Mapping(enabled = false) @Field(type = Object) private Object object;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Id private String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = Text) private String text;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Mapping(enabled = false)
|
|
|
|
|
@Field(type = Object) private Object object;
|
|
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
|
public String getId() {
|
|
|
|
|
@@ -1100,10 +1195,12 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "densevector-test")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
static class DenseVectorEntity {
|
|
|
|
|
@Nullable @Id private String id;
|
|
|
|
|
@Nullable @Field(type = Dense_Vector, dims = 3) private float[] dense_vector;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Id private String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = Dense_Vector, dims = 3) private float[] dense_vector;
|
|
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
|
public String getId() {
|
|
|
|
|
@@ -1124,15 +1221,19 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "dynamic-mapping-annotation")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
@DynamicMapping(DynamicMappingValue.False)
|
|
|
|
|
static class DynamicMappingAnnotationEntity {
|
|
|
|
|
|
|
|
|
|
@Nullable @DynamicMapping(DynamicMappingValue.Strict) @Field(type = FieldType.Object) private Author author;
|
|
|
|
|
@Nullable @DynamicMapping(DynamicMappingValue.False) @Field(
|
|
|
|
|
type = FieldType.Object) private Map<String, Object> objectMap;
|
|
|
|
|
@Nullable @DynamicMapping(DynamicMappingValue.False) @Field(
|
|
|
|
|
type = FieldType.Nested) private List<Map<String, Object>> nestedObjectMap;
|
|
|
|
|
@Nullable
|
|
|
|
|
@DynamicMapping(DynamicMappingValue.Strict)
|
|
|
|
|
@Field(type = FieldType.Object) private Author author;
|
|
|
|
|
@Nullable
|
|
|
|
|
@DynamicMapping(DynamicMappingValue.False)
|
|
|
|
|
@Field(type = FieldType.Object) private Map<String, Object> objectMap;
|
|
|
|
|
@Nullable
|
|
|
|
|
@DynamicMapping(DynamicMappingValue.False)
|
|
|
|
|
@Field(type = FieldType.Nested) private List<Map<String, Object>> nestedObjectMap;
|
|
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
|
public Author getAuthor() {
|
|
|
|
|
@@ -1144,57 +1245,140 @@ public class MappingBuilderIntegrationTests extends MappingContextBaseTests {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "dynamic-mapping", dynamic = Dynamic.FALSE)
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
static class DynamicMappingEntity {
|
|
|
|
|
|
|
|
|
|
@Nullable @Field(type = FieldType.Object) //
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Object) //
|
|
|
|
|
private Map<String, Object> objectInherit;
|
|
|
|
|
@Nullable @Field(type = FieldType.Object, dynamic = Dynamic.FALSE) //
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Object, dynamic = Dynamic.FALSE) //
|
|
|
|
|
private Map<String, Object> objectFalse;
|
|
|
|
|
@Nullable @Field(type = FieldType.Object, dynamic = Dynamic.TRUE) //
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Object, dynamic = Dynamic.TRUE) //
|
|
|
|
|
private Map<String, Object> objectTrue;
|
|
|
|
|
@Nullable @Field(type = FieldType.Object, dynamic = Dynamic.STRICT) //
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Object, dynamic = Dynamic.STRICT) //
|
|
|
|
|
private Map<String, Object> objectStrict;
|
|
|
|
|
@Nullable @Field(type = FieldType.Object, dynamic = Dynamic.RUNTIME) //
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Object, dynamic = Dynamic.RUNTIME) //
|
|
|
|
|
private Map<String, Object> objectRuntime;
|
|
|
|
|
@Nullable @Field(type = FieldType.Nested) //
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Nested) //
|
|
|
|
|
private List<Map<String, Object>> nestedObjectInherit;
|
|
|
|
|
@Nullable @Field(type = FieldType.Nested, dynamic = Dynamic.FALSE) //
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Nested, dynamic = Dynamic.FALSE) //
|
|
|
|
|
private List<Map<String, Object>> nestedObjectFalse;
|
|
|
|
|
@Nullable @Field(type = FieldType.Nested, dynamic = Dynamic.TRUE) //
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Nested, dynamic = Dynamic.TRUE) //
|
|
|
|
|
private List<Map<String, Object>> nestedObjectTrue;
|
|
|
|
|
@Nullable @Field(type = FieldType.Nested, dynamic = Dynamic.STRICT) //
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Nested, dynamic = Dynamic.STRICT) //
|
|
|
|
|
private List<Map<String, Object>> nestedObjectStrict;
|
|
|
|
|
@Nullable @Field(type = FieldType.Nested, dynamic = Dynamic.RUNTIME) //
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Nested, dynamic = Dynamic.RUNTIME) //
|
|
|
|
|
private List<Map<String, Object>> nestedObjectRuntime;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "dynamic-detection-mapping-true")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
@Mapping(dateDetection = Mapping.Detection.TRUE, numericDetection = Mapping.Detection.TRUE,
|
|
|
|
|
dynamicDateFormats = { "MM/dd/yyyy" })
|
|
|
|
|
private static class DynamicDetectionMapping {
|
|
|
|
|
@Id @Nullable private String id;
|
|
|
|
|
@Id
|
|
|
|
|
@Nullable private String id;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "runtime-fields")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
@Mapping(runtimeFieldsPath = "/mappings/runtime-fields.json")
|
|
|
|
|
private static class RuntimeFieldEntity {
|
|
|
|
|
@Id @Nullable private String id;
|
|
|
|
|
@Field(type = Date, format = DateFormat.epoch_millis, name = "@timestamp") @Nullable private Instant timestamp;
|
|
|
|
|
@Id
|
|
|
|
|
@Nullable private String id;
|
|
|
|
|
@Field(type = Date, format = DateFormat.epoch_millis, name = "@timestamp")
|
|
|
|
|
@Nullable private Instant timestamp;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "fields-excluded-from-source")
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
private static class ExcludedFieldEntity {
|
|
|
|
|
@Id @Nullable private String id;
|
|
|
|
|
@Nullable @Field(name = "excluded-date", type = Date, format = DateFormat.date,
|
|
|
|
|
@Id
|
|
|
|
|
@Nullable private String id;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(name = "excluded-date", type = Date, format = DateFormat.date,
|
|
|
|
|
excludeFromSource = true) private LocalDate excludedDate;
|
|
|
|
|
@Nullable @Field(type = Nested) private NestedExcludedFieldEntity nestedEntity;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = Nested) private NestedExcludedFieldEntity nestedEntity;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static class NestedExcludedFieldEntity {
|
|
|
|
|
@Nullable @Field(name = "excluded-text", type = Text, excludeFromSource = true) private String excludedText;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(name = "excluded-text", type = Text, excludeFromSource = true) private String excludedText;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
|
|
|
|
private static class EntityWithAllTypes {
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Auto) String autoField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Text) String textField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Keyword) String keywordField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Long) String longField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Integer) String integerField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Short) String shortField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Byte) String byteField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Double) String doubleField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Float) String floatField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Half_Float) String halfFloatField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Scaled_Float) String scaledFloatField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Date) String dateField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Date_Nanos) String dateNanosField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Boolean) String booleanField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Binary) String binaryField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Integer_Range) String integerRangeField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Float_Range) String floatRangeField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Long_Range) String longRangeField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Double_Range) String doubleRangeField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Date_Range) String dateRangeField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Ip_Range) String ipRangeField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Object) String objectField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Nested) String nestedField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Ip) String ipField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.TokenCount, analyzer = "standard") String tokenCountField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Percolator) String percolatorField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Flattened) String flattenedField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Search_As_You_Type) String searchAsYouTypeField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Rank_Feature) String rankFeatureField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Rank_Features) String rankFeaturesField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Wildcard) String wildcardField;
|
|
|
|
|
@Nullable
|
|
|
|
|
@Field(type = FieldType.Dense_Vector, dims = 1) String denseVectorField;
|
|
|
|
|
}
|
|
|
|
|
// endregion
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|