mirror of
https://github.com/spring-projects/spring-data-elasticsearch.git
synced 2025-06-23 04:22:12 +00:00
Move scripted fields from native query up to base query.
Original Pull Request #2481 Closes #2477
This commit is contained in:
parent
43ab49b5fa
commit
b4c3e25a60
@ -50,7 +50,6 @@ public class NativeQuery extends BaseQuery {
|
|||||||
private final Map<String, Aggregation> aggregations = new LinkedHashMap<>();
|
private final Map<String, Aggregation> aggregations = new LinkedHashMap<>();
|
||||||
@Nullable private Suggester suggester;
|
@Nullable private Suggester suggester;
|
||||||
@Nullable private FieldCollapse fieldCollapse;
|
@Nullable private FieldCollapse fieldCollapse;
|
||||||
private List<ScriptedField> scriptedFields = Collections.emptyList();
|
|
||||||
private List<SortOptions> sortOptions = Collections.emptyList();
|
private List<SortOptions> sortOptions = Collections.emptyList();
|
||||||
|
|
||||||
private Map<String, JsonData> searchExtensions = Collections.emptyMap();
|
private Map<String, JsonData> searchExtensions = Collections.emptyMap();
|
||||||
@ -63,7 +62,6 @@ public class NativeQuery extends BaseQuery {
|
|||||||
this.aggregations.putAll(builder.getAggregations());
|
this.aggregations.putAll(builder.getAggregations());
|
||||||
this.suggester = builder.getSuggester();
|
this.suggester = builder.getSuggester();
|
||||||
this.fieldCollapse = builder.getFieldCollapse();
|
this.fieldCollapse = builder.getFieldCollapse();
|
||||||
this.scriptedFields = builder.getScriptedFields();
|
|
||||||
this.sortOptions = builder.getSortOptions();
|
this.sortOptions = builder.getSortOptions();
|
||||||
this.searchExtensions = builder.getSearchExtensions();
|
this.searchExtensions = builder.getSearchExtensions();
|
||||||
|
|
||||||
@ -107,10 +105,6 @@ public class NativeQuery extends BaseQuery {
|
|||||||
return fieldCollapse;
|
return fieldCollapse;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ScriptedField> getScriptedFields() {
|
|
||||||
return scriptedFields;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<SortOptions> getSortOptions() {
|
public List<SortOptions> getSortOptions() {
|
||||||
return sortOptions;
|
return sortOptions;
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,6 @@ import java.util.Map;
|
|||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
import org.springframework.data.elasticsearch.core.query.BaseQueryBuilder;
|
import org.springframework.data.elasticsearch.core.query.BaseQueryBuilder;
|
||||||
import org.springframework.data.elasticsearch.core.query.ScriptedField;
|
|
||||||
import org.springframework.lang.Nullable;
|
import org.springframework.lang.Nullable;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
@ -48,7 +47,6 @@ public class NativeQueryBuilder extends BaseQueryBuilder<NativeQuery, NativeQuer
|
|||||||
private final Map<String, Aggregation> aggregations = new LinkedHashMap<>();
|
private final Map<String, Aggregation> aggregations = new LinkedHashMap<>();
|
||||||
@Nullable private Suggester suggester;
|
@Nullable private Suggester suggester;
|
||||||
@Nullable private FieldCollapse fieldCollapse;
|
@Nullable private FieldCollapse fieldCollapse;
|
||||||
private final List<ScriptedField> scriptedFields = new ArrayList<>();
|
|
||||||
private List<SortOptions> sortOptions = new ArrayList<>();
|
private List<SortOptions> sortOptions = new ArrayList<>();
|
||||||
private Map<String, JsonData> searchExtensions = new LinkedHashMap<>();
|
private Map<String, JsonData> searchExtensions = new LinkedHashMap<>();
|
||||||
|
|
||||||
@ -81,10 +79,6 @@ public class NativeQueryBuilder extends BaseQueryBuilder<NativeQuery, NativeQuer
|
|||||||
return fieldCollapse;
|
return fieldCollapse;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ScriptedField> getScriptedFields() {
|
|
||||||
return scriptedFields;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<SortOptions> getSortOptions() {
|
public List<SortOptions> getSortOptions() {
|
||||||
return sortOptions;
|
return sortOptions;
|
||||||
}
|
}
|
||||||
@ -149,17 +143,10 @@ public class NativeQueryBuilder extends BaseQueryBuilder<NativeQuery, NativeQuer
|
|||||||
return this;
|
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) {
|
public NativeQueryBuilder withSort(List<SortOptions> values) {
|
||||||
|
|
||||||
Assert.notEmpty(values, "values must not be empty");
|
Assert.notEmpty(values, "values must not be empty");
|
||||||
|
|
||||||
sortOptions.clear();
|
sortOptions.clear();
|
||||||
sortOptions.addAll(values);
|
sortOptions.addAll(values);
|
||||||
|
|
||||||
|
@ -1157,6 +1157,9 @@ class RequestConverter {
|
|||||||
bb.indicesBoost(boosts);
|
bb.indicesBoost(boosts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
query.getScriptedFields().forEach(scriptedField -> bb.scriptFields(scriptedField.getFieldName(),
|
||||||
|
sf -> sf.script(getScript(scriptedField.getScriptData()))));
|
||||||
|
|
||||||
if (query instanceof NativeQuery) {
|
if (query instanceof NativeQuery) {
|
||||||
prepareNativeSearch((NativeQuery) query, bb);
|
prepareNativeSearch((NativeQuery) query, bb);
|
||||||
}
|
}
|
||||||
@ -1259,6 +1262,9 @@ class RequestConverter {
|
|||||||
|
|
||||||
addHighlight(query, builder);
|
addHighlight(query, builder);
|
||||||
|
|
||||||
|
query.getScriptedFields().forEach(scriptedField -> builder.scriptFields(scriptedField.getFieldName(),
|
||||||
|
sf -> sf.script(getScript(scriptedField.getScriptData()))));
|
||||||
|
|
||||||
if (query instanceof NativeQuery) {
|
if (query instanceof NativeQuery) {
|
||||||
prepareNativeSearch((NativeQuery) query, builder);
|
prepareNativeSearch((NativeQuery) query, builder);
|
||||||
}
|
}
|
||||||
@ -1424,9 +1430,6 @@ class RequestConverter {
|
|||||||
@SuppressWarnings("DuplicatedCode")
|
@SuppressWarnings("DuplicatedCode")
|
||||||
private void prepareNativeSearch(NativeQuery query, SearchRequest.Builder builder) {
|
private void prepareNativeSearch(NativeQuery query, SearchRequest.Builder builder) {
|
||||||
|
|
||||||
query.getScriptedFields().forEach(scriptedField -> builder.scriptFields(scriptedField.getFieldName(),
|
|
||||||
sf -> sf.script(getScript(scriptedField.getScriptData()))));
|
|
||||||
|
|
||||||
builder //
|
builder //
|
||||||
.suggest(query.getSuggester()) //
|
.suggest(query.getSuggester()) //
|
||||||
.collapse(query.getFieldCollapse()) //
|
.collapse(query.getFieldCollapse()) //
|
||||||
@ -1445,9 +1448,6 @@ class RequestConverter {
|
|||||||
@SuppressWarnings("DuplicatedCode")
|
@SuppressWarnings("DuplicatedCode")
|
||||||
private void prepareNativeSearch(NativeQuery query, MultisearchBody.Builder builder) {
|
private void prepareNativeSearch(NativeQuery query, MultisearchBody.Builder builder) {
|
||||||
|
|
||||||
query.getScriptedFields().forEach(scriptedField -> builder.scriptFields(scriptedField.getFieldName(),
|
|
||||||
sf -> sf.script(getScript(scriptedField.getScriptData()))));
|
|
||||||
|
|
||||||
builder //
|
builder //
|
||||||
.suggest(query.getSuggester()) //
|
.suggest(query.getSuggester()) //
|
||||||
.collapse(query.getFieldCollapse()) //
|
.collapse(query.getFieldCollapse()) //
|
||||||
|
@ -81,6 +81,7 @@ public class BaseQuery implements Query {
|
|||||||
@Nullable private Boolean allowNoIndices = null;
|
@Nullable private Boolean allowNoIndices = null;
|
||||||
private EnumSet<IndicesOptions.WildcardStates> expandWildcards;
|
private EnumSet<IndicesOptions.WildcardStates> expandWildcards;
|
||||||
private List<DocValueField> docValueFields = new ArrayList<>();
|
private List<DocValueField> docValueFields = new ArrayList<>();
|
||||||
|
private List<ScriptedField> scriptedFields = new ArrayList<>();
|
||||||
|
|
||||||
public BaseQuery() {}
|
public BaseQuery() {}
|
||||||
|
|
||||||
@ -115,6 +116,7 @@ public class BaseQuery implements Query {
|
|||||||
this.allowNoIndices = builder.getAllowNoIndices();
|
this.allowNoIndices = builder.getAllowNoIndices();
|
||||||
this.expandWildcards = builder.getExpandWildcards();
|
this.expandWildcards = builder.getExpandWildcards();
|
||||||
this.docValueFields = builder.getDocValueFields();
|
this.docValueFields = builder.getDocValueFields();
|
||||||
|
this.scriptedFields = builder.getScriptedFields();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -543,4 +545,9 @@ public class BaseQuery implements Query {
|
|||||||
|
|
||||||
this.docValueFields = docValueFields;
|
this.docValueFields = docValueFields;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ScriptedField> getScriptedFields() {
|
||||||
|
return scriptedFields;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,6 +71,7 @@ public abstract class BaseQueryBuilder<Q extends BaseQuery, SELF extends BaseQue
|
|||||||
|
|
||||||
@Nullable Integer reactiveBatchSize;
|
@Nullable Integer reactiveBatchSize;
|
||||||
private final List<DocValueField> docValueFields = new ArrayList<>();
|
private final List<DocValueField> docValueFields = new ArrayList<>();
|
||||||
|
private final List<ScriptedField> scriptedFields = new ArrayList<>();
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public Sort getSort() {
|
public Sort getSort() {
|
||||||
@ -226,6 +227,10 @@ public abstract class BaseQueryBuilder<Q extends BaseQuery, SELF extends BaseQue
|
|||||||
return docValueFields;
|
return docValueFields;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<ScriptedField> getScriptedFields() {
|
||||||
|
return scriptedFields;
|
||||||
|
}
|
||||||
|
|
||||||
public SELF withPageable(Pageable pageable) {
|
public SELF withPageable(Pageable pageable) {
|
||||||
this.pageable = pageable;
|
this.pageable = pageable;
|
||||||
return self();
|
return self();
|
||||||
@ -443,6 +448,14 @@ public abstract class BaseQueryBuilder<Q extends BaseQuery, SELF extends BaseQue
|
|||||||
return self();
|
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();
|
public abstract Q build();
|
||||||
|
|
||||||
private SELF self() {
|
private SELF self() {
|
||||||
|
@ -477,6 +477,12 @@ public interface Query {
|
|||||||
*/
|
*/
|
||||||
List<DocValueField> getDocValueFields();
|
List<DocValueField> getDocValueFields();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the list of scripted fields for the query
|
||||||
|
* @since 5.1
|
||||||
|
*/
|
||||||
|
List<ScriptedField> getScriptedFields();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @since 4.3
|
* @since 4.3
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user