From 89944b66c4b9c701877160dfa378ba114c3aa5c7 Mon Sep 17 00:00:00 2001 From: Peter-Josef Meisch Date: Sat, 11 Apr 2020 11:50:31 +0200 Subject: [PATCH] DATAES-788 - Add missing path mapping to completion context. Original PR: #424 --- .../annotations/CompletionContext.java | 5 +-- .../core/index/MappingBuilder.java | 7 ++++ .../core/index/MappingBuilderTests.java | 33 +++++++++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/springframework/data/elasticsearch/annotations/CompletionContext.java b/src/main/java/org/springframework/data/elasticsearch/annotations/CompletionContext.java index 2039f488c..fff649dea 100644 --- a/src/main/java/org/springframework/data/elasticsearch/annotations/CompletionContext.java +++ b/src/main/java/org/springframework/data/elasticsearch/annotations/CompletionContext.java @@ -1,7 +1,5 @@ package org.springframework.data.elasticsearch.annotations; -import org.elasticsearch.search.suggest.completion.context.ContextMapping; - import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; @@ -9,6 +7,8 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.elasticsearch.search.suggest.completion.context.ContextMapping; + /** * Based on reference doc - https://www.elastic.co/guide/en/elasticsearch/reference/current/suggester-context.html * @@ -26,4 +26,5 @@ public @interface CompletionContext { String precision() default ""; + String path() default ""; } diff --git a/src/main/java/org/springframework/data/elasticsearch/core/index/MappingBuilder.java b/src/main/java/org/springframework/data/elasticsearch/core/index/MappingBuilder.java index 9b47ce583..d9ccdbab4 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/index/MappingBuilder.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/index/MappingBuilder.java @@ -81,6 +81,7 @@ public class MappingBuilder { private static final String FIELD_PARENT = "_parent"; private static final String FIELD_CONTEXT_NAME = "name"; private static final String FIELD_CONTEXT_TYPE = "type"; + private static final String FIELD_CONTEXT_PATH = "path"; private static final String FIELD_CONTEXT_PRECISION = "precision"; private static final String FIELD_DYNAMIC_TEMPLATES = "dynamic_templates"; @@ -279,9 +280,15 @@ public class MappingBuilder { builder.startObject(); builder.field(FIELD_CONTEXT_NAME, context.name()); builder.field(FIELD_CONTEXT_TYPE, context.type().name().toLowerCase()); + if (context.precision().length() > 0) { builder.field(FIELD_CONTEXT_PRECISION, context.precision()); } + + if (StringUtils.hasText(context.path())) { + builder.field(FIELD_CONTEXT_PATH, context.path()); + } + builder.endObject(); } builder.endArray(); diff --git a/src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderTests.java b/src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderTests.java index eb1de495c..3969bb537 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderTests.java @@ -43,6 +43,7 @@ import java.util.Map; import java.util.Set; import org.assertj.core.data.Percentage; +import org.elasticsearch.search.suggest.completion.context.ContextMapping; import org.json.JSONException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -560,6 +561,28 @@ public class MappingBuilderTests extends MappingContextBaseTests { assertEquals(expected, mapping, true); } + @Test // DATAES-788 + void shouldWriteCompletionContextInfo() throws JSONException { + String expected = "{\n" + // + " \"properties\": {\n" + // + " \"suggest\": {\n" + // + " \"type\": \"completion\",\n" + // + " \"contexts\": [\n" + // + " {\n" + // + " \"name\": \"location\",\n" + // + " \"type\": \"geo\",\n" + // + " \"path\": \"proppath\"\n" + // + " }\n" + // + " ]\n" + // + " }\n" + // + " }\n" + // + "}"; + + String mapping = getMappingBuilder().buildPropertyMapping(CompletionDocument.class); + + assertEquals(expected, mapping, false); + } + /** * @author Xiao Yu */ @@ -1029,4 +1052,14 @@ public class MappingBuilderTests extends MappingContextBaseTests { static class ValueDoc { @Field(type = Text) private ValueObject valueObject; } + + @Getter + @Setter + @Document(indexName = "completion") + static class CompletionDocument { + @Id private String id; + + @CompletionField(contexts = { @CompletionContext(name = "location", type = ContextMapping.Type.GEO, + path = "proppath") }) private Completion suggest; + } }