Skip to content

Commit b4c3e25

Browse files
authored
Move scripted fields from native query up to base query.
Original Pull Request #2481 Closes #2477
1 parent 43ab49b commit b4c3e25

File tree

6 files changed

+33
-26
lines changed

6 files changed

+33
-26
lines changed

src/main/java/org/springframework/data/elasticsearch/client/elc/NativeQuery.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ public class NativeQuery extends BaseQuery {
5050
private final Map<String, Aggregation> aggregations = new LinkedHashMap<>();
5151
@Nullable private Suggester suggester;
5252
@Nullable private FieldCollapse fieldCollapse;
53-
private List<ScriptedField> scriptedFields = Collections.emptyList();
5453
private List<SortOptions> sortOptions = Collections.emptyList();
5554

5655
private Map<String, JsonData> searchExtensions = Collections.emptyMap();
@@ -63,7 +62,6 @@ public NativeQuery(NativeQueryBuilder builder) {
6362
this.aggregations.putAll(builder.getAggregations());
6463
this.suggester = builder.getSuggester();
6564
this.fieldCollapse = builder.getFieldCollapse();
66-
this.scriptedFields = builder.getScriptedFields();
6765
this.sortOptions = builder.getSortOptions();
6866
this.searchExtensions = builder.getSearchExtensions();
6967

@@ -107,10 +105,6 @@ public FieldCollapse getFieldCollapse() {
107105
return fieldCollapse;
108106
}
109107

110-
public List<ScriptedField> getScriptedFields() {
111-
return scriptedFields;
112-
}
113-
114108
public List<SortOptions> getSortOptions() {
115109
return sortOptions;
116110
}

src/main/java/org/springframework/data/elasticsearch/client/elc/NativeQueryBuilder.java

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import java.util.function.Function;
3333

3434
import org.springframework.data.elasticsearch.core.query.BaseQueryBuilder;
35-
import org.springframework.data.elasticsearch.core.query.ScriptedField;
3635
import org.springframework.lang.Nullable;
3736
import org.springframework.util.Assert;
3837

@@ -48,7 +47,6 @@ public class NativeQueryBuilder extends BaseQueryBuilder<NativeQuery, NativeQuer
4847
private final Map<String, Aggregation> aggregations = new LinkedHashMap<>();
4948
@Nullable private Suggester suggester;
5049
@Nullable private FieldCollapse fieldCollapse;
51-
private final List<ScriptedField> scriptedFields = new ArrayList<>();
5250
private List<SortOptions> sortOptions = new ArrayList<>();
5351
private Map<String, JsonData> searchExtensions = new LinkedHashMap<>();
5452

@@ -81,10 +79,6 @@ public FieldCollapse getFieldCollapse() {
8179
return fieldCollapse;
8280
}
8381

84-
public List<ScriptedField> getScriptedFields() {
85-
return scriptedFields;
86-
}
87-
8882
public List<SortOptions> getSortOptions() {
8983
return sortOptions;
9084
}
@@ -149,17 +143,10 @@ public NativeQueryBuilder withFieldCollapse(@Nullable FieldCollapse fieldCollaps
149143
return this;
150144
}
151145

152-
public NativeQueryBuilder withScriptedField(ScriptedField scriptedField) {
153-
154-
Assert.notNull(scriptedField, "scriptedField must not be null");
155-
156-
this.scriptedFields.add(scriptedField);
157-
return this;
158-
}
159-
160146
public NativeQueryBuilder withSort(List<SortOptions> values) {
161147

162148
Assert.notEmpty(values, "values must not be empty");
149+
163150
sortOptions.clear();
164151
sortOptions.addAll(values);
165152

src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1157,6 +1157,9 @@ public MsearchRequest searchMsearchRequest(
11571157
bb.indicesBoost(boosts);
11581158
}
11591159

1160+
query.getScriptedFields().forEach(scriptedField -> bb.scriptFields(scriptedField.getFieldName(),
1161+
sf -> sf.script(getScript(scriptedField.getScriptData()))));
1162+
11601163
if (query instanceof NativeQuery) {
11611164
prepareNativeSearch((NativeQuery) query, bb);
11621165
}
@@ -1259,6 +1262,9 @@ private <T> void prepareSearchRequest(Query query, @Nullable String routing, @Nu
12591262

12601263
addHighlight(query, builder);
12611264

1265+
query.getScriptedFields().forEach(scriptedField -> builder.scriptFields(scriptedField.getFieldName(),
1266+
sf -> sf.script(getScript(scriptedField.getScriptData()))));
1267+
12621268
if (query instanceof NativeQuery) {
12631269
prepareNativeSearch((NativeQuery) query, builder);
12641270
}
@@ -1424,9 +1430,6 @@ private SortOptions getSortOptions(Sort.Order order, @Nullable ElasticsearchPers
14241430
@SuppressWarnings("DuplicatedCode")
14251431
private void prepareNativeSearch(NativeQuery query, SearchRequest.Builder builder) {
14261432

1427-
query.getScriptedFields().forEach(scriptedField -> builder.scriptFields(scriptedField.getFieldName(),
1428-
sf -> sf.script(getScript(scriptedField.getScriptData()))));
1429-
14301433
builder //
14311434
.suggest(query.getSuggester()) //
14321435
.collapse(query.getFieldCollapse()) //
@@ -1445,9 +1448,6 @@ private void prepareNativeSearch(NativeQuery query, SearchRequest.Builder builde
14451448
@SuppressWarnings("DuplicatedCode")
14461449
private void prepareNativeSearch(NativeQuery query, MultisearchBody.Builder builder) {
14471450

1448-
query.getScriptedFields().forEach(scriptedField -> builder.scriptFields(scriptedField.getFieldName(),
1449-
sf -> sf.script(getScript(scriptedField.getScriptData()))));
1450-
14511451
builder //
14521452
.suggest(query.getSuggester()) //
14531453
.collapse(query.getFieldCollapse()) //

src/main/java/org/springframework/data/elasticsearch/core/query/BaseQuery.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ public class BaseQuery implements Query {
8181
@Nullable private Boolean allowNoIndices = null;
8282
private EnumSet<IndicesOptions.WildcardStates> expandWildcards;
8383
private List<DocValueField> docValueFields = new ArrayList<>();
84+
private List<ScriptedField> scriptedFields = new ArrayList<>();
8485

8586
public BaseQuery() {}
8687

@@ -115,6 +116,7 @@ public <Q extends BaseQuery, B extends BaseQueryBuilder<Q, B>> BaseQuery(BaseQue
115116
this.allowNoIndices = builder.getAllowNoIndices();
116117
this.expandWildcards = builder.getExpandWildcards();
117118
this.docValueFields = builder.getDocValueFields();
119+
this.scriptedFields = builder.getScriptedFields();
118120
}
119121

120122
/**
@@ -543,4 +545,9 @@ public void setDocValueFields(List<DocValueField> docValueFields) {
543545

544546
this.docValueFields = docValueFields;
545547
}
548+
549+
@Override
550+
public List<ScriptedField> getScriptedFields() {
551+
return scriptedFields;
552+
}
546553
}

src/main/java/org/springframework/data/elasticsearch/core/query/BaseQueryBuilder.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ public abstract class BaseQueryBuilder<Q extends BaseQuery, SELF extends BaseQue
7171

7272
@Nullable Integer reactiveBatchSize;
7373
private final List<DocValueField> docValueFields = new ArrayList<>();
74+
private final List<ScriptedField> scriptedFields = new ArrayList<>();
7475

7576
@Nullable
7677
public Sort getSort() {
@@ -226,6 +227,10 @@ public List<DocValueField> getDocValueFields() {
226227
return docValueFields;
227228
}
228229

230+
public List<ScriptedField> getScriptedFields() {
231+
return scriptedFields;
232+
}
233+
229234
public SELF withPageable(Pageable pageable) {
230235
this.pageable = pageable;
231236
return self();
@@ -443,6 +448,14 @@ public SELF withDocValueFields(List<DocValueField> docValueFields) {
443448
return self();
444449
}
445450

451+
public SELF withScriptedField(ScriptedField scriptedField) {
452+
453+
Assert.notNull(scriptedField, "scriptedField must not be null");
454+
455+
this.scriptedFields.add(scriptedField);
456+
return self();
457+
}
458+
446459
public abstract Q build();
447460

448461
private SELF self() {

src/main/java/org/springframework/data/elasticsearch/core/query/Query.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,12 @@ default Integer getReactiveBatchSize() {
477477
*/
478478
List<DocValueField> getDocValueFields();
479479

480+
/**
481+
* @return the list of scripted fields for the query
482+
* @since 5.1
483+
*/
484+
List<ScriptedField> getScriptedFields();
485+
480486
/**
481487
* @since 4.3
482488
*/

0 commit comments

Comments
 (0)