mirror of
https://github.com/spring-projects/spring-data-elasticsearch.git
synced 2025-06-22 12:02:10 +00:00
parent
a0b04a346e
commit
73fe0869e6
@ -1362,14 +1362,6 @@ class RequestConverter {
|
|||||||
builder.minScore((double) query.getMinScore());
|
builder.minScore((double) query.getMinScore());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (query.getSort() != null) {
|
|
||||||
List<SortOptions> sortOptions = getSortOptions(query.getSort(), persistentEntity);
|
|
||||||
|
|
||||||
if (!sortOptions.isEmpty()) {
|
|
||||||
builder.sort(sortOptions);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
addHighlight(query, builder);
|
addHighlight(query, builder);
|
||||||
|
|
||||||
query.getScriptedFields().forEach(scriptedField -> builder.scriptFields(scriptedField.getFieldName(),
|
query.getScriptedFields().forEach(scriptedField -> builder.scriptFields(scriptedField.getFieldName(),
|
||||||
@ -1378,6 +1370,15 @@ class RequestConverter {
|
|||||||
if (query instanceof NativeQuery nativeQuery) {
|
if (query instanceof NativeQuery nativeQuery) {
|
||||||
prepareNativeSearch(nativeQuery, builder);
|
prepareNativeSearch(nativeQuery, builder);
|
||||||
}
|
}
|
||||||
|
// query.getSort() must be checked after prepareNativeSearch as this already might hav a sort set that must have
|
||||||
|
// higher priority
|
||||||
|
if (query.getSort() != null) {
|
||||||
|
List<SortOptions> sortOptions = getSortOptions(query.getSort(), persistentEntity);
|
||||||
|
|
||||||
|
if (!sortOptions.isEmpty()) {
|
||||||
|
builder.sort(sortOptions);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (query.getTrackTotalHits() != null) {
|
if (query.getTrackTotalHits() != null) {
|
||||||
// logic from the RHLC, choose between -1 and Integer.MAX_VALUE
|
// logic from the RHLC, choose between -1 and Integer.MAX_VALUE
|
||||||
|
@ -18,6 +18,7 @@ package org.springframework.data.elasticsearch.core;
|
|||||||
import static org.assertj.core.api.Assertions.*;
|
import static org.assertj.core.api.Assertions.*;
|
||||||
import static org.springframework.data.elasticsearch.client.elc.Queries.*;
|
import static org.springframework.data.elasticsearch.client.elc.Queries.*;
|
||||||
|
|
||||||
|
import co.elastic.clients.elasticsearch._types.SortOrder;
|
||||||
import co.elastic.clients.elasticsearch._types.aggregations.Aggregate;
|
import co.elastic.clients.elasticsearch._types.aggregations.Aggregate;
|
||||||
import co.elastic.clients.elasticsearch._types.aggregations.Buckets;
|
import co.elastic.clients.elasticsearch._types.aggregations.Buckets;
|
||||||
import co.elastic.clients.elasticsearch._types.aggregations.StringTermsAggregate;
|
import co.elastic.clients.elasticsearch._types.aggregations.StringTermsAggregate;
|
||||||
@ -27,9 +28,12 @@ import co.elastic.clients.elasticsearch.core.search.FieldCollapse;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.DisplayName;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.context.annotation.Import;
|
import org.springframework.context.annotation.Import;
|
||||||
|
import org.springframework.data.domain.Pageable;
|
||||||
import org.springframework.data.elasticsearch.client.elc.Aggregation;
|
import org.springframework.data.elasticsearch.client.elc.Aggregation;
|
||||||
import org.springframework.data.elasticsearch.client.elc.ElasticsearchAggregation;
|
import org.springframework.data.elasticsearch.client.elc.ElasticsearchAggregation;
|
||||||
import org.springframework.data.elasticsearch.client.elc.NativeQuery;
|
import org.springframework.data.elasticsearch.client.elc.NativeQuery;
|
||||||
@ -48,6 +52,51 @@ import org.springframework.test.context.ContextConfiguration;
|
|||||||
@ContextConfiguration(classes = ReactiveElasticsearchELCIntegrationTests.Config.class)
|
@ContextConfiguration(classes = ReactiveElasticsearchELCIntegrationTests.Config.class)
|
||||||
public class ReactiveElasticsearchELCIntegrationTests extends ReactiveElasticsearchIntegrationTests {
|
public class ReactiveElasticsearchELCIntegrationTests extends ReactiveElasticsearchIntegrationTests {
|
||||||
|
|
||||||
|
@Test // #2745
|
||||||
|
@DisplayName("should use sort defined in native unbounded query")
|
||||||
|
void shouldUseSortDefinedInNativeUnboundedQuery() {
|
||||||
|
var entity1 = randomEntity(null);
|
||||||
|
entity1.setRate(7);
|
||||||
|
var entity2 = randomEntity(null);
|
||||||
|
entity2.setRate(5);
|
||||||
|
var entity3 = randomEntity(null);
|
||||||
|
entity3.setRate(11);
|
||||||
|
|
||||||
|
operations.saveAll(List.of(entity1, entity2, entity3), SampleEntity.class).blockLast();
|
||||||
|
|
||||||
|
var query = NativeQuery.builder()
|
||||||
|
.withQuery(qb -> qb
|
||||||
|
.matchAll(m -> m))
|
||||||
|
.withSort(sob -> sob
|
||||||
|
.field(f -> f
|
||||||
|
.field("rate")
|
||||||
|
.order(SortOrder.Asc)))
|
||||||
|
.withPageable(Pageable.unpaged())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
var rates = operations.search(query, SampleEntity.class)
|
||||||
|
.map(SearchHit::getContent)
|
||||||
|
.map(SampleEntity::getRate)
|
||||||
|
.collectList().block();
|
||||||
|
assertThat(rates).containsExactly(5, 7, 11);
|
||||||
|
|
||||||
|
query = NativeQuery.builder()
|
||||||
|
.withQuery(qb -> qb
|
||||||
|
.matchAll(m -> m))
|
||||||
|
.withSort(sob -> sob
|
||||||
|
.field(f -> f
|
||||||
|
.field("rate")
|
||||||
|
.order(SortOrder.Desc)))
|
||||||
|
.withPageable(Pageable.unpaged())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
rates = operations.search(query, SampleEntity.class)
|
||||||
|
.map(SearchHit::getContent)
|
||||||
|
.map(SampleEntity::getRate)
|
||||||
|
.collectList().block();
|
||||||
|
assertThat(rates).containsExactly(11, 7, 5);
|
||||||
|
}
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
@Import({ ReactiveElasticsearchTemplateConfiguration.class })
|
@Import({ ReactiveElasticsearchTemplateConfiguration.class })
|
||||||
static class Config {
|
static class Config {
|
||||||
|
@ -98,7 +98,7 @@ import org.springframework.util.StringUtils;
|
|||||||
@SpringIntegrationTest
|
@SpringIntegrationTest
|
||||||
public abstract class ReactiveElasticsearchIntegrationTests {
|
public abstract class ReactiveElasticsearchIntegrationTests {
|
||||||
|
|
||||||
@Autowired private ReactiveElasticsearchOperations operations;
|
@Autowired protected ReactiveElasticsearchOperations operations;
|
||||||
@Autowired private IndexNameProvider indexNameProvider;
|
@Autowired private IndexNameProvider indexNameProvider;
|
||||||
|
|
||||||
// region Setup
|
// region Setup
|
||||||
@ -1224,7 +1224,7 @@ public abstract class ReactiveElasticsearchIntegrationTests {
|
|||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
// region Helper functions
|
// region Helper functions
|
||||||
private SampleEntity randomEntity(String message) {
|
protected SampleEntity randomEntity(@Nullable String message) {
|
||||||
|
|
||||||
SampleEntity entity = new SampleEntity();
|
SampleEntity entity = new SampleEntity();
|
||||||
entity.setId(UUID.randomUUID().toString());
|
entity.setId(UUID.randomUUID().toString());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user