From 315bf7c21dd2b3729bbea215ba91883639cbb75f Mon Sep 17 00:00:00 2001 From: Peter-Josef Meisch Date: Sun, 13 Aug 2023 21:15:27 +0200 Subject: [PATCH] Fix similarity field mapping. Closes #2659 --- .../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 fcd15ebe08..7ae84076f0 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 void writeTypeAndParametersTo(ObjectNode objectNode) throws IOException { if (!Similarity.Default.equals(similarity)) { objectNode.put(FIELD_PARAM_SIMILARITY, similarity); + // 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 849cfabe20..080098ca07 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 @@ -263,6 +263,12 @@ void shouldWriteMappingWithFieldNameWithDots() { 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 { @@ -893,5 +899,14 @@ private static class FieldNameDotsEntity { @Nullable @Field(name = "dotted.field", type = Text) private String dottedField; } + + @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 }