Skip to content

move scripted fields from native query up to base query #2481

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ public class NativeQuery extends BaseQuery {
private final Map<String, Aggregation> aggregations = new LinkedHashMap<>();
@Nullable private Suggester suggester;
@Nullable private FieldCollapse fieldCollapse;
private List<ScriptedField> scriptedFields = Collections.emptyList();
private List<SortOptions> sortOptions = Collections.emptyList();

private Map<String, JsonData> searchExtensions = Collections.emptyMap();
Expand All @@ -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();

Expand Down Expand Up @@ -107,10 +105,6 @@ public FieldCollapse getFieldCollapse() {
return fieldCollapse;
}

public List<ScriptedField> getScriptedFields() {
return scriptedFields;
}

public List<SortOptions> getSortOptions() {
return sortOptions;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

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

Expand Down Expand Up @@ -81,10 +79,6 @@ public FieldCollapse getFieldCollapse() {
return fieldCollapse;
}

public List<ScriptedField> getScriptedFields() {
return scriptedFields;
}

public List<SortOptions> getSortOptions() {
return sortOptions;
}
Expand Down Expand Up @@ -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<SortOptions> values) {

Assert.notEmpty(values, "values must not be empty");

sortOptions.clear();
sortOptions.addAll(values);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down Expand Up @@ -1259,6 +1262,9 @@ private <T> 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);
}
Expand Down Expand Up @@ -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()) //
Expand All @@ -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()) //
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ public class BaseQuery implements Query {
@Nullable private Boolean allowNoIndices = null;
private EnumSet<IndicesOptions.WildcardStates> expandWildcards;
private List<DocValueField> docValueFields = new ArrayList<>();
private List<ScriptedField> scriptedFields = new ArrayList<>();

public BaseQuery() {}

Expand Down Expand Up @@ -115,6 +116,7 @@ public <Q extends BaseQuery, B extends BaseQueryBuilder<Q, B>> BaseQuery(BaseQue
this.allowNoIndices = builder.getAllowNoIndices();
this.expandWildcards = builder.getExpandWildcards();
this.docValueFields = builder.getDocValueFields();
this.scriptedFields = builder.getScriptedFields();
}

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

this.docValueFields = docValueFields;
}

@Override
public List<ScriptedField> getScriptedFields() {
return scriptedFields;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ public abstract class BaseQueryBuilder<Q extends BaseQuery, SELF extends BaseQue

@Nullable Integer reactiveBatchSize;
private final List<DocValueField> docValueFields = new ArrayList<>();
private final List<ScriptedField> scriptedFields = new ArrayList<>();

@Nullable
public Sort getSort() {
Expand Down Expand Up @@ -226,6 +227,10 @@ public List<DocValueField> getDocValueFields() {
return docValueFields;
}

public List<ScriptedField> getScriptedFields() {
return scriptedFields;
}

public SELF withPageable(Pageable pageable) {
this.pageable = pageable;
return self();
Expand Down Expand Up @@ -443,6 +448,14 @@ public SELF withDocValueFields(List<DocValueField> 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() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -477,6 +477,12 @@ default Integer getReactiveBatchSize() {
*/
List<DocValueField> getDocValueFields();

/**
* @return the list of scripted fields for the query
* @since 5.1
*/
List<ScriptedField> getScriptedFields();

/**
* @since 4.3
*/
Expand Down