From e997b39f68bc0967c06c27a43e52b83afdb0b522 Mon Sep 17 00:00:00 2001 From: Peter-Josef Meisch Date: Sat, 18 May 2024 18:11:43 +0200 Subject: [PATCH] Fix max dim value for dense vector. Closes #2911 --- .../core/index/MappingParameters.java | 8 +++--- .../core/index/MappingParametersTest.java | 27 ++++++++++++------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/springframework/data/elasticsearch/core/index/MappingParameters.java b/src/main/java/org/springframework/data/elasticsearch/core/index/MappingParameters.java index 72fa129bc..595cc6bd6 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/index/MappingParameters.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/index/MappingParameters.java @@ -171,8 +171,8 @@ public final class MappingParameters { positiveScoreImpact = field.positiveScoreImpact(); dims = field.dims(); if (type == FieldType.Dense_Vector) { - Assert.isTrue(dims >= 1 && dims <= 2048, - "Invalid required parameter! Dense_Vector value \"dims\" must be between 1 and 2048."); + Assert.isTrue(dims >= 1 && dims <= 4096, + "Invalid required parameter! Dense_Vector value \"dims\" must be between 1 and 4096."); } Assert.isTrue(field.enabled() || type == FieldType.Object, "enabled false is only allowed for field type object"); enabled = field.enabled(); @@ -214,8 +214,8 @@ public final class MappingParameters { positiveScoreImpact = field.positiveScoreImpact(); dims = field.dims(); if (type == FieldType.Dense_Vector) { - Assert.isTrue(dims >= 1 && dims <= 2048, - "Invalid required parameter! Dense_Vector value \"dims\" must be between 1 and 2048."); + Assert.isTrue(dims >= 1 && dims <= 4096, + "Invalid required parameter! Dense_Vector value \"dims\" must be between 1 and 4096."); } enabled = true; eagerGlobalOrdinals = field.eagerGlobalOrdinals(); diff --git a/src/test/java/org/springframework/data/elasticsearch/core/index/MappingParametersTest.java b/src/test/java/org/springframework/data/elasticsearch/core/index/MappingParametersTest.java index a572ab747..7d424d049 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/index/MappingParametersTest.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/index/MappingParametersTest.java @@ -70,8 +70,8 @@ public class MappingParametersTest extends MappingContextBaseTests { } @Test // #1700 - @DisplayName("should not allow dims length greater than 2048 for dense_vector type") - void shouldNotAllowDimsLengthGreaterThan2048ForDenseVectorType() { + @DisplayName("should not allow dims length greater than 4096 for dense_vector type") + void shouldNotAllowDimsLengthGreaterThan4096ForDenseVectorType() { ElasticsearchPersistentEntity failEntity = elasticsearchConverter.get().getMappingContext() .getRequiredPersistentEntity(DenseVectorInvalidDimsClass.class); Annotation annotation = failEntity.getRequiredPersistentProperty("dense_vector").findAnnotation(Field.class); @@ -90,21 +90,28 @@ public class MappingParametersTest extends MappingContextBaseTests { } static class AnnotatedClass { - @Nullable @Field private String field; - @Nullable @MultiField(mainField = @Field, + @Nullable + @Field private String field; + @Nullable + @MultiField(mainField = @Field, otherFields = { @InnerField(suffix = "test", type = FieldType.Text) }) private String mainField; - @Nullable @Field(type = FieldType.Text, docValues = false) private String docValuesText; - @Nullable @Field(type = FieldType.Nested, docValues = false) private String docValuesNested; - @Nullable @Field(type = Object, enabled = true) private String enabledObject; - @Nullable @Field(type = Object, enabled = false) private String disabledObject; + @Nullable + @Field(type = FieldType.Text, docValues = false) private String docValuesText; + @Nullable + @Field(type = FieldType.Nested, docValues = false) private String docValuesNested; + @Nullable + @Field(type = Object, enabled = true) private String enabledObject; + @Nullable + @Field(type = Object, enabled = false) private String disabledObject; } static class InvalidEnabledFieldClass { - @Nullable @Field(type = FieldType.Text, enabled = false) private String disabledObject; + @Nullable + @Field(type = FieldType.Text, enabled = false) private String disabledObject; } static class DenseVectorInvalidDimsClass { - @Field(type = Dense_Vector, dims = 2049) private float[] dense_vector; + @Field(type = Dense_Vector, dims = 4097) private float[] dense_vector; } static class DenseVectorMissingDimsClass {