Skip to content

Commit 33c4bb2

Browse files
authored
Add searchAfter interfaces to NativeSearchQueryBuilder.
Original Pull Request #2106 Closes #2105
1 parent 9c740f1 commit 33c4bb2

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed

src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQueryBuilder.java

+16
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
* @author Peter-Josef Meisch
5151
* @author Peer Mueller
5252
* @author vdisk
53+
* @author owen.qq
5354
*/
5455
public class NativeSearchQueryBuilder {
5556

@@ -80,6 +81,7 @@ public class NativeSearchQueryBuilder {
8081
@Nullable private Duration timeout;
8182
private final List<RescorerQuery> rescorerQueries = new ArrayList<>();
8283
@Nullable private SuggestBuilder suggestBuilder;
84+
@Nullable private List<Object> searchAfter;
8385

8486
public NativeSearchQueryBuilder withQuery(QueryBuilder queryBuilder) {
8587
this.queryBuilder = queryBuilder;
@@ -342,6 +344,15 @@ public NativeSearchQueryBuilder withSuggestBuilder(SuggestBuilder suggestBuilder
342344
return this;
343345
}
344346

347+
public NativeSearchQueryBuilder withSearchAfter(List<Object> searchAfter) {
348+
if (searchAfter != null && searchAfter.isEmpty()) {
349+
return this;
350+
}
351+
352+
this.searchAfter = searchAfter;
353+
return this;
354+
}
355+
345356
public NativeSearchQuery build() {
346357

347358
NativeSearchQuery nativeSearchQuery = new NativeSearchQuery( //
@@ -431,6 +442,11 @@ public NativeSearchQuery build() {
431442
if (suggestBuilder != null) {
432443
nativeSearchQuery.setSuggestBuilder(suggestBuilder);
433444
}
445+
446+
if (searchAfter != null) {
447+
nativeSearchQuery.setSearchAfter(searchAfter);
448+
}
449+
434450
return nativeSearchQuery;
435451
}
436452
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package org.springframework.data.elasticsearch.core.query;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import java.util.List;
6+
7+
import org.junit.jupiter.api.Test;
8+
9+
import com.google.common.collect.Lists;
10+
11+
/**
12+
* @author owen.qq
13+
*/
14+
public class NativeSearchQueryBuilderTests {
15+
16+
@Test // #2105
17+
void shouldContainEffectiveSearchAfterValue() {
18+
Long lastSortValue = 1L;
19+
List<Object> searchAfter = Lists.newArrayList(lastSortValue);
20+
21+
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
22+
nativeSearchQueryBuilder.withSearchAfter(searchAfter);
23+
NativeSearchQuery nativeSearchQuery = nativeSearchQueryBuilder.build();
24+
25+
assertThat(nativeSearchQuery.getSearchAfter()).isNotNull();
26+
}
27+
28+
@Test // #2105
29+
void shouldIgnoreNullableSearchAfterValue() {
30+
List<Object> emptySearchValueByFirstSearch = null;
31+
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
32+
nativeSearchQueryBuilder.withSearchAfter(emptySearchValueByFirstSearch);
33+
NativeSearchQuery nativeSearchQuery = nativeSearchQueryBuilder.build();
34+
35+
assertThat(nativeSearchQuery.getSearchAfter()).isNull();
36+
}
37+
38+
@Test // #2105
39+
void shouldIgnoreEmptySearchAfterValue() {
40+
List<Object> emptySearchValueByFirstSearch = Lists.newArrayList();
41+
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
42+
nativeSearchQueryBuilder.withSearchAfter(emptySearchValueByFirstSearch);
43+
NativeSearchQuery nativeSearchQuery = nativeSearchQueryBuilder.build();
44+
45+
assertThat(nativeSearchQuery.getSearchAfter()).isNull();
46+
}
47+
}

0 commit comments

Comments
 (0)