Skip to content

Commit 416a327

Browse files
authored
reverting to _doc + _id (#4435)
1 parent ca5a5bd commit 416a327

File tree

3 files changed

+23
-13
lines changed

3 files changed

+23
-13
lines changed

opensearch/src/main/java/org/opensearch/sql/opensearch/request/OpenSearchQueryRequest.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
package org.opensearch.sql.opensearch.request;
77

88
import static org.opensearch.core.xcontent.DeprecationHandler.IGNORE_DEPRECATIONS;
9+
import static org.opensearch.search.sort.FieldSortBuilder.DOC_FIELD_NAME;
10+
import static org.opensearch.search.sort.SortOrder.ASC;
11+
import static org.opensearch.sql.opensearch.storage.OpenSearchIndex.METADATA_FIELD_ID;
912

1013
import java.io.IOException;
1114
import java.util.Collections;
@@ -28,8 +31,6 @@
2831
import org.opensearch.search.SearchModule;
2932
import org.opensearch.search.builder.PointInTimeBuilder;
3033
import org.opensearch.search.builder.SearchSourceBuilder;
31-
import org.opensearch.search.sort.ShardDocSortBuilder;
32-
import org.opensearch.search.sort.SortBuilders;
3334
import org.opensearch.sql.opensearch.data.value.OpenSearchExprValueFactory;
3435
import org.opensearch.sql.opensearch.response.OpenSearchResponse;
3536
import org.opensearch.sql.opensearch.storage.OpenSearchIndex;
@@ -202,14 +203,13 @@ public OpenSearchResponse searchWithPIT(Function<SearchRequest, SearchResponse>
202203
if (searchAfter != null) {
203204
this.sourceBuilder.searchAfter(searchAfter);
204205
}
205-
// Add sort tiebreaker `_shard_doc` for PIT search.
206-
// Actually, we can remove it since `_shard_doc` should be added implicitly in PIT.
207-
// https://github.com/opensearch-project/OpenSearch/pull/18924#issuecomment-3342365950
208-
if (this.sourceBuilder.sorts() == null
209-
|| this.sourceBuilder.sorts().stream().noneMatch(ShardDocSortBuilder.class::isInstance)) {
210-
this.sourceBuilder.sort(SortBuilders.shardDocSort());
206+
// Set sort field for search_after
207+
if (this.sourceBuilder.sorts() == null) {
208+
this.sourceBuilder.sort(DOC_FIELD_NAME, ASC);
209+
// Workaround to preserve sort location more exactly,
210+
// see https://github.com/opensearch-project/sql/pull/3061
211+
this.sourceBuilder.sort(METADATA_FIELD_ID, ASC);
211212
}
212-
213213
SearchRequest searchRequest =
214214
new SearchRequest().indices(indexName.getIndexNames()).source(this.sourceBuilder);
215215
this.searchResponse = searchAction.apply(searchRequest);

opensearch/src/test/java/org/opensearch/sql/opensearch/request/OpenSearchQueryRequestTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ void search_with_pit() {
184184
when(searchResponse.getHits()).thenReturn(searchHits);
185185
when(searchHits.getHits()).thenReturn(new SearchHit[] {searchHit});
186186
when(searchHit.getSortValues()).thenReturn(new String[] {"sortedValue"});
187+
when(sourceBuilder.sorts()).thenReturn(null);
187188

188189
OpenSearchResponse openSearchResponse = request.searchWithPIT(searchAction);
189190
assertFalse(openSearchResponse.isEmpty());
@@ -214,6 +215,7 @@ void search_with_pit_hits_null() {
214215
when(searchAction.apply(any())).thenReturn(searchResponse);
215216
when(searchResponse.getHits()).thenReturn(searchHits);
216217
when(searchHits.getHits()).thenReturn(new SearchHit[] {searchHit});
218+
when(sourceBuilder.sorts()).thenReturn(null);
217219

218220
OpenSearchResponse openSearchResponse = request.searchWithPIT(searchAction);
219221
assertFalse(openSearchResponse.isEmpty());
@@ -235,6 +237,7 @@ void search_with_pit_hits_empty() {
235237
when(searchAction.apply(any())).thenReturn(searchResponse);
236238
when(searchResponse.getHits()).thenReturn(searchHits);
237239
when(searchHits.getHits()).thenReturn(new SearchHit[] {});
240+
when(sourceBuilder.sorts()).thenReturn(null);
238241

239242
OpenSearchResponse openSearchResponse = request.searchWithPIT(searchAction);
240243
assertTrue(openSearchResponse.isEmpty());

opensearch/src/test/java/org/opensearch/sql/opensearch/request/OpenSearchRequestBuilderTest.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,11 @@
99
import static org.junit.jupiter.api.Assertions.assertEquals;
1010
import static org.mockito.Mockito.*;
1111
import static org.opensearch.index.query.QueryBuilders.*;
12+
import static org.opensearch.search.sort.FieldSortBuilder.DOC_FIELD_NAME;
13+
import static org.opensearch.search.sort.SortOrder.ASC;
1214
import static org.opensearch.sql.data.type.ExprCoreType.INTEGER;
1315
import static org.opensearch.sql.data.type.ExprCoreType.STRING;
16+
import static org.opensearch.sql.opensearch.storage.OpenSearchIndex.METADATA_FIELD_ID;
1417

1518
import java.util.Collections;
1619
import java.util.List;
@@ -404,7 +407,8 @@ void test_push_down_project() {
404407
.from(DEFAULT_OFFSET)
405408
.size(MAX_RESULT_WINDOW)
406409
.timeout(DEFAULT_QUERY_TIMEOUT)
407-
.sort(SortBuilders.shardDocSort())
410+
.sort(DOC_FIELD_NAME, ASC)
411+
.sort(METADATA_FIELD_ID, ASC)
408412
.pointInTimeBuilder(new PointInTimeBuilder("samplePITId"))
409413
.fetchSource(new String[] {"intA"}, new String[0]),
410414
requestBuilder);
@@ -416,7 +420,8 @@ void test_push_down_project() {
416420
.from(DEFAULT_OFFSET)
417421
.size(MAX_RESULT_WINDOW)
418422
.timeout(DEFAULT_QUERY_TIMEOUT)
419-
.sort(SortBuilders.shardDocSort())
423+
.sort(DOC_FIELD_NAME, ASC)
424+
.sort(METADATA_FIELD_ID, ASC)
420425
.pointInTimeBuilder(new PointInTimeBuilder("samplePITId"))
421426
.fetchSource("intA", null),
422427
exprValueFactory,
@@ -530,7 +535,8 @@ void test_push_down_project_with_alias_type() {
530535
.from(DEFAULT_OFFSET)
531536
.size(MAX_RESULT_WINDOW)
532537
.timeout(DEFAULT_QUERY_TIMEOUT)
533-
.sort(SortBuilders.shardDocSort())
538+
.sort(DOC_FIELD_NAME, ASC)
539+
.sort(METADATA_FIELD_ID, ASC)
534540
.pointInTimeBuilder(new PointInTimeBuilder("samplePITId"))
535541
.fetchSource(new String[] {"intA"}, new String[0]),
536542
requestBuilder);
@@ -542,7 +548,8 @@ void test_push_down_project_with_alias_type() {
542548
.from(DEFAULT_OFFSET)
543549
.size(MAX_RESULT_WINDOW)
544550
.timeout(DEFAULT_QUERY_TIMEOUT)
545-
.sort(SortBuilders.shardDocSort())
551+
.sort(DOC_FIELD_NAME, ASC)
552+
.sort(METADATA_FIELD_ID, ASC)
546553
.pointInTimeBuilder(new PointInTimeBuilder("samplePITId"))
547554
.fetchSource("intA", null),
548555
exprValueFactory,

0 commit comments

Comments
 (0)