Skip to content

Commit fdd1810

Browse files
committed
Wire FilterType and rebuild callback through createScanBuilder
Signed-off-by: Eric Wei <mengwei.eric@gmail.com>
1 parent c7c4130 commit fdd1810

1 file changed

Lines changed: 12 additions & 3 deletions

File tree

opensearch/src/main/java/org/opensearch/sql/opensearch/storage/VectorSearchIndex.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,18 @@ public TableScanBuilder createScanBuilder() {
6060
getSettings().getSettingValue(Settings.Key.SQL_CURSOR_KEEP_ALIVE);
6161
var requestBuilder = createRequestBuilder();
6262

63-
// Use VectorSearchQueryBuilder to keep knn in must (scoring) context.
64-
// WHERE filters will be placed in filter (non-scoring) context.
65-
var queryBuilder = new VectorSearchQueryBuilder(requestBuilder, buildKnnQuery(), options);
63+
// Callback for efficient filtering: serialize WHERE QueryBuilder to JSON,
64+
// rebuild knn query with filter embedded. JSON handling stays in this class.
65+
Function<QueryBuilder, QueryBuilder> rebuildWithFilter =
66+
whereQuery -> new WrapperQueryBuilder(buildKnnQueryJson(whereQuery.toString()));
67+
68+
boolean filterTypeExplicit = filterType != null;
69+
FilterType effectiveFilterType = filterType != null ? filterType : FilterType.POST;
70+
71+
var queryBuilder =
72+
new VectorSearchQueryBuilder(
73+
requestBuilder, buildKnnQuery(), options,
74+
effectiveFilterType, filterTypeExplicit, rebuildWithFilter);
6675
requestBuilder.pushDownTrackedScore(true);
6776

6877
// Default size policy: LIMIT pushdown will further reduce if present.

0 commit comments

Comments
 (0)