Skip to content

Commit d43b44b

Browse files
beyond-seunghyunsothawo
authored andcommitted
Adding GeoDistanceOrder's direction in request.
Original Pull Request #2602 Closes #2601 (cherry picked from commit 8a164b1) Polishing (cherry picked from commit b7570ff) add implementation for old client
1 parent a715d28 commit d43b44b

File tree

4 files changed

+63
-7
lines changed

4 files changed

+63
-7
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1490,8 +1490,9 @@ private SortOptions getSortOptions(Sort.Order order, @Nullable ElasticsearchPers
14901490
return SortOptions.of(so -> so //
14911491
.geoDistance(gd -> gd //
14921492
.field(fieldName) //
1493-
.location(loc -> loc.latlon(Queries.latLon(geoDistanceOrder.getGeoPoint())))//
1493+
.location(loc -> loc.latlon(Queries.latLon(geoDistanceOrder.getGeoPoint()))) //
14941494
.distanceType(geoDistanceType(geoDistanceOrder.getDistanceType())).mode(sortMode(finalMode)) //
1495+
.order(sortOrder(geoDistanceOrder.getDirection())) //
14951496
.unit(distanceUnit(geoDistanceOrder.getUnit())) //
14961497
.ignoreUnmapped(geoDistanceOrder.getIgnoreUnmapped())));
14971498
} else {

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.util.Map;
2929
import java.util.stream.Collectors;
3030

31+
import org.springframework.data.domain.Sort;
3132
import org.springframework.data.elasticsearch.core.RefreshPolicy;
3233
import org.springframework.data.elasticsearch.core.document.Document;
3334
import org.springframework.data.elasticsearch.core.query.*;
@@ -165,6 +166,20 @@ static GeoDistanceType geoDistanceType(GeoDistanceOrder.DistanceType distanceTyp
165166

166167
}
167168

169+
@Nullable
170+
static SortOrder sortOrder(@Nullable Sort.Direction direction) {
171+
172+
if (direction == null) {
173+
return null;
174+
}
175+
176+
return switch (direction) {
177+
case ASC -> SortOrder.Asc;
178+
case DESC -> SortOrder.Desc;
179+
};
180+
181+
}
182+
168183
@Nullable
169184
static HighlighterFragmenter highlighterFragmenter(@Nullable String value) {
170185

src/main/java/org/springframework/data/elasticsearch/client/erhlc/RequestFactory.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -348,8 +348,8 @@ public PutIndexTemplateRequest putIndexTemplateRequest(PutTemplateRequest putTem
348348
for (String aliasName : parametersAliases) {
349349
Alias alias = new Alias(aliasName);
350350

351-
//noinspection DuplicatedCode
352-
if (parameters.getRouting() != null) {
351+
// noinspection DuplicatedCode
352+
if (parameters.getRouting() != null) {
353353
alias.routing(parameters.getRouting());
354354
}
355355

@@ -526,7 +526,8 @@ public org.elasticsearch.index.reindex.ReindexRequest reindexRequest(ReindexRequ
526526
// endregion
527527

528528
// region delete
529-
public DeleteByQueryRequest deleteByQueryRequest(Query query, @Nullable String routing, Class<?> clazz, IndexCoordinates index) {
529+
public DeleteByQueryRequest deleteByQueryRequest(Query query, @Nullable String routing, Class<?> clazz,
530+
IndexCoordinates index) {
530531
SearchRequest searchRequest = searchRequest(query, routing, clazz, index);
531532
DeleteByQueryRequest deleteByQueryRequest = new DeleteByQueryRequest(index.getIndexNames()) //
532533
.setQuery(searchRequest.source().query()) //
@@ -754,10 +755,11 @@ public SearchRequest searchRequest(SuggestBuilder suggestion, IndexCoordinates i
754755
return searchRequest;
755756
}
756757

757-
public SearchRequest searchRequest(Query query, @Nullable String routing, @Nullable Class<?> clazz, IndexCoordinates index) {
758+
public SearchRequest searchRequest(Query query, @Nullable String routing, @Nullable Class<?> clazz,
759+
IndexCoordinates index) {
758760

759761
elasticsearchConverter.updateQuery(query, clazz);
760-
SearchRequest searchRequest = prepareSearchRequest(query, routing,clazz, index);
762+
SearchRequest searchRequest = prepareSearchRequest(query, routing, clazz, index);
761763
QueryBuilder elasticsearchQuery = getQuery(query);
762764
QueryBuilder elasticsearchFilter = getFilter(query);
763765

@@ -771,7 +773,8 @@ public SearchRequest searchRequest(Query query, @Nullable String routing, @Nulla
771773

772774
}
773775

774-
private SearchRequest prepareSearchRequest(Query query, @Nullable String routing, @Nullable Class<?> clazz, IndexCoordinates indexCoordinates) {
776+
private SearchRequest prepareSearchRequest(Query query, @Nullable String routing, @Nullable Class<?> clazz,
777+
IndexCoordinates indexCoordinates) {
775778

776779
String[] indexNames = indexCoordinates.getIndexNames();
777780
Assert.notNull(indexNames, "No index defined for Query");
@@ -968,6 +971,8 @@ private SortBuilder<?> getSortBuilder(Sort.Order order, @Nullable ElasticsearchP
968971
sort.ignoreUnmapped(geoDistanceOrder.getIgnoreUnmapped());
969972
}
970973

974+
sort.order(order.isAscending() ? SortOrder.ASC : SortOrder.DESC);
975+
971976
return sort;
972977
} else {
973978
FieldSortBuilder sort = SortBuilders //

src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryIntegrationTests.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1590,6 +1590,41 @@ void shouldUseGeoSortParameter() {
15901590
assertThat(searchHits.getSearchHit(2).getId()).isEqualTo("oslo");
15911591
}
15921592

1593+
@Test // #2601
1594+
void shouldUseGeoSortReverseParameter() {
1595+
GeoPoint munich = new GeoPoint(48.137154, 11.5761247);
1596+
GeoPoint berlin = new GeoPoint(52.520008, 13.404954);
1597+
GeoPoint vienna = new GeoPoint(48.20849, 16.37208);
1598+
GeoPoint oslo = new GeoPoint(59.9127, 10.7461);
1599+
1600+
List<SampleEntity> entities = new ArrayList<>();
1601+
1602+
SampleEntity entity1 = new SampleEntity();
1603+
entity1.setId("berlin");
1604+
entity1.setLocation(berlin);
1605+
entities.add(entity1);
1606+
1607+
SampleEntity entity2 = new SampleEntity();
1608+
entity2.setId("vienna");
1609+
entity2.setLocation(vienna);
1610+
entities.add(entity2);
1611+
1612+
SampleEntity entity3 = new SampleEntity();
1613+
entity3.setId("oslo");
1614+
entity3.setLocation(oslo);
1615+
entities.add(entity3);
1616+
1617+
repository.saveAll(entities);
1618+
1619+
SearchHits<SampleEntity> searchHits = repository
1620+
.searchBy(Sort.by(new GeoDistanceOrder("location", munich).with(Sort.Direction.DESC)));
1621+
1622+
assertThat(searchHits.getTotalHits()).isEqualTo(3);
1623+
assertThat(searchHits.getSearchHit(0).getId()).isEqualTo("oslo");
1624+
assertThat(searchHits.getSearchHit(1).getId()).isEqualTo("berlin");
1625+
assertThat(searchHits.getSearchHit(2).getId()).isEqualTo("vienna");
1626+
}
1627+
15931628
@Test // DATAES-749
15941629
void shouldReturnSearchPage() {
15951630
List<SampleEntity> entities = createSampleEntities("abc", 20);

0 commit comments

Comments
 (0)