From 1860d7353a1060115300740957917f1ac21cf190 Mon Sep 17 00:00:00 2001 From: Peter-Josef Meisch Date: Sun, 12 Feb 2023 17:50:55 +0100 Subject: [PATCH] Allow for Spring Data Elasticsearch queries to be added to NativeQuery. Original Pull Request #2451 #Closes 2391 --- .../elasticsearch/client/elc/NativeQuery.java | 21 +++ .../client/elc/NativeQueryBuilder.java | 20 +++ .../client/elc/RequestConverter.java | 2 + .../query/NativeQueryELCIntegrationTests.java | 39 +++++ .../query/NativeQueryIntegrationTests.java | 137 ++++++++++++++++++ 5 files changed, 219 insertions(+) create mode 100644 src/test/java/org/springframework/data/elasticsearch/core/query/NativeQueryELCIntegrationTests.java create mode 100644 src/test/java/org/springframework/data/elasticsearch/core/query/NativeQueryIntegrationTests.java 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 cd1c1d7d3..0dec41fb1 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 @@ -30,6 +30,7 @@ import java.util.Map; import org.springframework.data.elasticsearch.core.query.BaseQuery; import org.springframework.data.elasticsearch.core.query.ScriptedField; import org.springframework.lang.Nullable; +import org.springframework.util.Assert; /** * A {@link org.springframework.data.elasticsearch.core.query.Query} implementation using query builders from the new @@ -42,6 +43,7 @@ import org.springframework.lang.Nullable; public class NativeQuery extends BaseQuery { @Nullable private final Query query; + @Nullable private org.springframework.data.elasticsearch.core.query.Query springDataQuery; @Nullable private Query filter; // note: the new client does not have pipeline aggs, these are just set up as normal aggs private final Map aggregations = new LinkedHashMap<>(); @@ -62,6 +64,12 @@ public class NativeQuery extends BaseQuery { this.scriptedFields = builder.getScriptedFields(); this.sortOptions = builder.getSortOptions(); this.searchExtensions = builder.getSearchExtensions(); + + if (builder.getSpringDataQuery() != null) { + Assert.isTrue(!NativeQuery.class.isAssignableFrom(builder.getSpringDataQuery().getClass()), + "Cannot add an NativeQuery in a NativeQuery"); + } + this.springDataQuery = builder.getSpringDataQuery(); } public NativeQuery(@Nullable Query query) { @@ -107,4 +115,17 @@ public class NativeQuery extends BaseQuery { public Map getSearchExtensions() { return searchExtensions; } + + /** + * @see NativeQueryBuilder#withQuery(org.springframework.data.elasticsearch.core.query.Query). + * @since 5.1 + */ + public void setSpringDataQuery(@Nullable org.springframework.data.elasticsearch.core.query.Query springDataQuery) { + this.springDataQuery = springDataQuery; + } + + @Nullable + public org.springframework.data.elasticsearch.core.query.Query getSpringDataQuery() { + return springDataQuery; + } } 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 534d312bf..86de08fcd 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 @@ -51,6 +51,8 @@ public class NativeQueryBuilder extends BaseQueryBuilder sortOptions = new ArrayList<>(); private Map searchExtensions = new LinkedHashMap<>(); + @Nullable private org.springframework.data.elasticsearch.core.query.Query springDataQuery; + public NativeQueryBuilder() {} @Nullable @@ -89,6 +91,11 @@ public class NativeQueryBuilder extends BaseQueryBuilder