From ec8401a2fbc2d3ac4583f88e05f6c27fd336f22d Mon Sep 17 00:00:00 2001 From: Peter-Josef Meisch Date: Sun, 13 Aug 2023 21:18:35 +0200 Subject: [PATCH] Fix similarity field mapping. Original Pull Request #2666 Closes #2659 (cherry picked from commit 8c5ff92cd2ec2177452dc0aa1b9307bdfcfa4e75) (cherry picked from commit 9b9136d852d61c3bcdb429ec648b1e08272e017f) # Conflicts: # src/main/java/org/springframework/data/elasticsearch/core/index/MappingParameters.java # src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderIntegrationTests.java --- .../core/index/MappingParameters.java | 2 ++ .../index/MappingBuilderIntegrationTests.java | 15 +++++++++++++++ 2 files changed, 17 insertions(+) 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 1489bb9d2..d615f0923 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 @@ -332,6 +332,8 @@ public final class MappingParameters { if (similarity != Similarity.Default) { objectNode.put(FIELD_PARAM_SIMILARITY, similarity.toString()); + // similarity must have index explicitly set, otherwise Elasticsearch returns an error + objectNode.put(FIELD_PARAM_INDEX, index); } if (termVector != TermVector.none) { diff --git a/src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderIntegrationTests.java b/src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderIntegrationTests.java index 3f3912b20..f38be56f6 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderIntegrationTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderIntegrationTests.java @@ -279,6 +279,12 @@ public abstract class MappingBuilderIntegrationTests extends MappingContextBaseT indexOps.createWithMapping(); } + @Test // #2659 + @DisplayName("should write correct mapping for dense vector property") + void shouldWriteCorrectMappingForDenseVectorProperty() { + operations.indexOps(SimilarityEntity.class).createWithMapping(); + } + // region Entities @Document(indexName = "#{@indexNameProvider.indexName()}") static class Book { @@ -901,5 +907,14 @@ public abstract class MappingBuilderIntegrationTests extends MappingContextBaseT @Nullable @Field(type = FieldType.Dense_Vector, dims = 1) String denseVectorField; } + + @Document(indexName = "#{@indexNameProvider.indexName()}") + static class SimilarityEntity { + @Nullable + @Id private String id; + + @Field(type = FieldType.Dense_Vector, dims = 42, similarity = "cosine") private double[] denseVector; + } + // endregion }