This is an automated email from the ASF dual-hosted git repository.

JingsongLi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/paimon.git


The following commit(s) were added to refs/heads/master by this push:
     new b8c9383dd5 [core] Honor query-level search-mode overrides (#9128)
b8c9383dd5 is described below

commit b8c9383dd5ac672dcab29018b716637b0795ce7d
Author: CrownChu <[email protected]>
AuthorDate: Mon Aug 10 13:43:11 2026 +0800

    [core] Honor query-level search-mode overrides (#9128)
---
 .../apache/paimon/table/source/DataEvolutionVectorScan.java  | 12 ++++++++++--
 .../apache/paimon/table/source/VectorSearchBuilderTest.java  | 11 +++++++++++
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git 
a/paimon-core/src/main/java/org/apache/paimon/table/source/DataEvolutionVectorScan.java
 
b/paimon-core/src/main/java/org/apache/paimon/table/source/DataEvolutionVectorScan.java
index 2064b5614e..fdb57385ab 100644
--- 
a/paimon-core/src/main/java/org/apache/paimon/table/source/DataEvolutionVectorScan.java
+++ 
b/paimon-core/src/main/java/org/apache/paimon/table/source/DataEvolutionVectorScan.java
@@ -18,6 +18,7 @@
 
 package org.apache.paimon.table.source;
 
+import org.apache.paimon.CoreOptions;
 import org.apache.paimon.CoreOptions.GlobalIndexSearchMode;
 import org.apache.paimon.Snapshot;
 import org.apache.paimon.globalindex.DataEvolutionGlobalIndexCoverage;
@@ -159,7 +160,8 @@ public class DataEvolutionVectorScan implements VectorScan {
             splits.add(new IndexVectorSearchSplit(range.from, range.to, 
vectorFiles, scalarFiles));
         }
 
-        GlobalIndexSearchMode vectorSearchMode = 
table.coreOptions().vectorIndexSearchMode();
+        CoreOptions effectiveOptions = effectiveCoreOptions();
+        GlobalIndexSearchMode vectorSearchMode = 
effectiveOptions.vectorIndexSearchMode();
         List<Range> rawRowRanges =
                 new DataEvolutionGlobalIndexCoverage(
                                 table,
@@ -175,7 +177,7 @@ public class DataEvolutionVectorScan implements VectorScan {
                                     snapshot,
                                     partitionFilter,
                                     scalarIndexFiles(allIndexFiles),
-                                    
table.coreOptions().scalarIndexSearchMode())
+                                    effectiveOptions.scalarIndexSearchMode())
                             .unindexedRanges(table.rowType(), filter);
             if (vectorSearchMode == GlobalIndexSearchMode.FAST) {
                 scalarUnindexedRanges =
@@ -209,6 +211,12 @@ public class DataEvolutionVectorScan implements VectorScan 
{
         };
     }
 
+    private CoreOptions effectiveCoreOptions() {
+        Map<String, String> merged = new HashMap<>(table.options());
+        merged.putAll(options);
+        return CoreOptions.fromMap(merged);
+    }
+
     private static boolean isPrimaryColumn(GlobalIndexMeta meta, int fieldId) {
         return meta.indexFieldId() == fieldId;
     }
diff --git 
a/paimon-core/src/test/java/org/apache/paimon/table/source/VectorSearchBuilderTest.java
 
b/paimon-core/src/test/java/org/apache/paimon/table/source/VectorSearchBuilderTest.java
index ec116a87a7..408ed2f0e0 100644
--- 
a/paimon-core/src/test/java/org/apache/paimon/table/source/VectorSearchBuilderTest.java
+++ 
b/paimon-core/src/test/java/org/apache/paimon/table/source/VectorSearchBuilderTest.java
@@ -1319,6 +1319,17 @@ public class VectorSearchBuilderTest extends 
TableTestBase {
         GlobalIndexResult result =
                 
searchBuilder.newVectorRead().read(searchBuilder.newVectorScan().scan());
         assertThat(result.results().isEmpty()).isTrue();
+
+        VectorSearchBuilder fullFallback =
+                table.newVectorSearchBuilder()
+                        .withVector(new float[] {0.0f, 0.0f})
+                        .withLimit(1)
+                        .withVectorColumn(VECTOR_FIELD_NAME)
+                        .withFilter(idFilter)
+                        
.withOption(CoreOptions.SCALAR_INDEX_SEARCH_MODE.key(), "full");
+        GlobalIndexResult fallbackResult =
+                
fullFallback.newVectorRead().read(fullFallback.newVectorScan().scan());
+        assertThat(fallbackResult.results()).containsExactly(8L);
     }
 
     @Test

Reply via email to