diff --git a/src/main/java/org/springframework/data/elasticsearch/client/elc/NativeQuery.java b/src/main/java/org/springframework/data/elasticsearch/client/elc/NativeQuery.java index b4237e3786..93d3e2f442 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/elc/NativeQuery.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/elc/NativeQuery.java @@ -50,7 +50,6 @@ public class NativeQuery extends BaseQuery { private final Map aggregations = new LinkedHashMap<>(); @Nullable private Suggester suggester; @Nullable private FieldCollapse fieldCollapse; - private List scriptedFields = Collections.emptyList(); private List sortOptions = Collections.emptyList(); private Map searchExtensions = Collections.emptyMap(); @@ -63,7 +62,6 @@ public NativeQuery(NativeQueryBuilder builder) { this.aggregations.putAll(builder.getAggregations()); this.suggester = builder.getSuggester(); this.fieldCollapse = builder.getFieldCollapse(); - this.scriptedFields = builder.getScriptedFields(); this.sortOptions = builder.getSortOptions(); this.searchExtensions = builder.getSearchExtensions(); @@ -107,10 +105,6 @@ public FieldCollapse getFieldCollapse() { return fieldCollapse; } - public List getScriptedFields() { - return scriptedFields; - } - public List getSortOptions() { return sortOptions; } diff --git a/src/main/java/org/springframework/data/elasticsearch/client/elc/NativeQueryBuilder.java b/src/main/java/org/springframework/data/elasticsearch/client/elc/NativeQueryBuilder.java index 7ffe553cb1..c2c6ae7e21 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/elc/NativeQueryBuilder.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/elc/NativeQueryBuilder.java @@ -32,7 +32,6 @@ import java.util.function.Function; import org.springframework.data.elasticsearch.core.query.BaseQueryBuilder; -import org.springframework.data.elasticsearch.core.query.ScriptedField; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -48,7 +47,6 @@ public class NativeQueryBuilder extends BaseQueryBuilder aggregations = new LinkedHashMap<>(); @Nullable private Suggester suggester; @Nullable private FieldCollapse fieldCollapse; - private final List scriptedFields = new ArrayList<>(); private List sortOptions = new ArrayList<>(); private Map searchExtensions = new LinkedHashMap<>(); @@ -81,10 +79,6 @@ public FieldCollapse getFieldCollapse() { return fieldCollapse; } - public List getScriptedFields() { - return scriptedFields; - } - public List getSortOptions() { return sortOptions; } @@ -149,17 +143,10 @@ public NativeQueryBuilder withFieldCollapse(@Nullable FieldCollapse fieldCollaps return this; } - public NativeQueryBuilder withScriptedField(ScriptedField scriptedField) { - - Assert.notNull(scriptedField, "scriptedField must not be null"); - - this.scriptedFields.add(scriptedField); - return this; - } - public NativeQueryBuilder withSort(List values) { Assert.notEmpty(values, "values must not be empty"); + sortOptions.clear(); sortOptions.addAll(values); diff --git a/src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java b/src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java index 692212519e..7de1c517dc 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java @@ -1157,6 +1157,9 @@ public MsearchRequest searchMsearchRequest( bb.indicesBoost(boosts); } + query.getScriptedFields().forEach(scriptedField -> bb.scriptFields(scriptedField.getFieldName(), + sf -> sf.script(getScript(scriptedField.getScriptData())))); + if (query instanceof NativeQuery) { prepareNativeSearch((NativeQuery) query, bb); } @@ -1259,6 +1262,9 @@ private void prepareSearchRequest(Query query, @Nullable String routing, @Nu addHighlight(query, builder); + query.getScriptedFields().forEach(scriptedField -> builder.scriptFields(scriptedField.getFieldName(), + sf -> sf.script(getScript(scriptedField.getScriptData())))); + if (query instanceof NativeQuery) { prepareNativeSearch((NativeQuery) query, builder); } @@ -1424,9 +1430,6 @@ private SortOptions getSortOptions(Sort.Order order, @Nullable ElasticsearchPers @SuppressWarnings("DuplicatedCode") private void prepareNativeSearch(NativeQuery query, SearchRequest.Builder builder) { - query.getScriptedFields().forEach(scriptedField -> builder.scriptFields(scriptedField.getFieldName(), - sf -> sf.script(getScript(scriptedField.getScriptData())))); - builder // .suggest(query.getSuggester()) // .collapse(query.getFieldCollapse()) // @@ -1445,9 +1448,6 @@ private void prepareNativeSearch(NativeQuery query, SearchRequest.Builder builde @SuppressWarnings("DuplicatedCode") private void prepareNativeSearch(NativeQuery query, MultisearchBody.Builder builder) { - query.getScriptedFields().forEach(scriptedField -> builder.scriptFields(scriptedField.getFieldName(), - sf -> sf.script(getScript(scriptedField.getScriptData())))); - builder // .suggest(query.getSuggester()) // .collapse(query.getFieldCollapse()) // diff --git a/src/main/java/org/springframework/data/elasticsearch/core/query/BaseQuery.java b/src/main/java/org/springframework/data/elasticsearch/core/query/BaseQuery.java index 8978717c70..61289c4597 100755 --- a/src/main/java/org/springframework/data/elasticsearch/core/query/BaseQuery.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/query/BaseQuery.java @@ -81,6 +81,7 @@ public class BaseQuery implements Query { @Nullable private Boolean allowNoIndices = null; private EnumSet expandWildcards; private List docValueFields = new ArrayList<>(); + private List scriptedFields = new ArrayList<>(); public BaseQuery() {} @@ -115,6 +116,7 @@ public > BaseQuery(BaseQue this.allowNoIndices = builder.getAllowNoIndices(); this.expandWildcards = builder.getExpandWildcards(); this.docValueFields = builder.getDocValueFields(); + this.scriptedFields = builder.getScriptedFields(); } /** @@ -543,4 +545,9 @@ public void setDocValueFields(List docValueFields) { this.docValueFields = docValueFields; } + + @Override + public List getScriptedFields() { + return scriptedFields; + } } diff --git a/src/main/java/org/springframework/data/elasticsearch/core/query/BaseQueryBuilder.java b/src/main/java/org/springframework/data/elasticsearch/core/query/BaseQueryBuilder.java index e858296679..2385c5c6b2 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/query/BaseQueryBuilder.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/query/BaseQueryBuilder.java @@ -71,6 +71,7 @@ public abstract class BaseQueryBuilder docValueFields = new ArrayList<>(); + private final List scriptedFields = new ArrayList<>(); @Nullable public Sort getSort() { @@ -226,6 +227,10 @@ public List getDocValueFields() { return docValueFields; } + public List getScriptedFields() { + return scriptedFields; + } + public SELF withPageable(Pageable pageable) { this.pageable = pageable; return self(); @@ -443,6 +448,14 @@ public SELF withDocValueFields(List docValueFields) { return self(); } + public SELF withScriptedField(ScriptedField scriptedField) { + + Assert.notNull(scriptedField, "scriptedField must not be null"); + + this.scriptedFields.add(scriptedField); + return self(); + } + public abstract Q build(); private SELF self() { diff --git a/src/main/java/org/springframework/data/elasticsearch/core/query/Query.java b/src/main/java/org/springframework/data/elasticsearch/core/query/Query.java index 6d98c39b5c..d2fec076d3 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/query/Query.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/query/Query.java @@ -477,6 +477,12 @@ default Integer getReactiveBatchSize() { */ List getDocValueFields(); + /** + * @return the list of scripted fields for the query + * @since 5.1 + */ + List getScriptedFields(); + /** * @since 4.3 */