Add searchAfter interfaces to NativeSearchQueryBuilder.

Original Pull Request #2106 
Closes #2105
This commit is contained in:
Owen-q 2022-03-12 19:27:35 +09:00 committed by GitHub
parent 9c740f14bd
commit 33c4bb23b7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 63 additions and 0 deletions

View File

@ -50,6 +50,7 @@ import org.springframework.lang.Nullable;
* @author Peter-Josef Meisch
* @author Peer Mueller
* @author vdisk
* @author owen.qq
*/
public class NativeSearchQueryBuilder {
@ -80,6 +81,7 @@ public class NativeSearchQueryBuilder {
@Nullable private Duration timeout;
private final List<RescorerQuery> rescorerQueries = new ArrayList<>();
@Nullable private SuggestBuilder suggestBuilder;
@Nullable private List<Object> searchAfter;
public NativeSearchQueryBuilder withQuery(QueryBuilder queryBuilder) {
this.queryBuilder = queryBuilder;
@ -342,6 +344,15 @@ public class NativeSearchQueryBuilder {
return this;
}
public NativeSearchQueryBuilder withSearchAfter(List<Object> searchAfter) {
if (searchAfter != null && searchAfter.isEmpty()) {
return this;
}
this.searchAfter = searchAfter;
return this;
}
public NativeSearchQuery build() {
NativeSearchQuery nativeSearchQuery = new NativeSearchQuery( //
@ -431,6 +442,11 @@ public class NativeSearchQueryBuilder {
if (suggestBuilder != null) {
nativeSearchQuery.setSuggestBuilder(suggestBuilder);
}
if (searchAfter != null) {
nativeSearchQuery.setSearchAfter(searchAfter);
}
return nativeSearchQuery;
}
}

View File

@ -0,0 +1,47 @@
package org.springframework.data.elasticsearch.core.query;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.List;
import org.junit.jupiter.api.Test;
import com.google.common.collect.Lists;
/**
* @author owen.qq
*/
public class NativeSearchQueryBuilderTests {
@Test // #2105
void shouldContainEffectiveSearchAfterValue() {
Long lastSortValue = 1L;
List<Object> searchAfter = Lists.newArrayList(lastSortValue);
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
nativeSearchQueryBuilder.withSearchAfter(searchAfter);
NativeSearchQuery nativeSearchQuery = nativeSearchQueryBuilder.build();
assertThat(nativeSearchQuery.getSearchAfter()).isNotNull();
}
@Test // #2105
void shouldIgnoreNullableSearchAfterValue() {
List<Object> emptySearchValueByFirstSearch = null;
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
nativeSearchQueryBuilder.withSearchAfter(emptySearchValueByFirstSearch);
NativeSearchQuery nativeSearchQuery = nativeSearchQueryBuilder.build();
assertThat(nativeSearchQuery.getSearchAfter()).isNull();
}
@Test // #2105
void shouldIgnoreEmptySearchAfterValue() {
List<Object> emptySearchValueByFirstSearch = Lists.newArrayList();
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
nativeSearchQueryBuilder.withSearchAfter(emptySearchValueByFirstSearch);
NativeSearchQuery nativeSearchQuery = nativeSearchQueryBuilder.build();
assertThat(nativeSearchQuery.getSearchAfter()).isNull();
}
}