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

ishan pushed a commit to branch jira/solr-17927
in repository https://gitbox.apache.org/repos/asf/solr.git

commit d90ef9983c816397ac03752cbabbe385890945d1
Author: punAhuja <[email protected]>
AuthorDate: Mon Sep 29 10:08:34 2025 +0530

    Modified tests to expect new behaviour of added default efSearch parameter
---
 .../org/apache/solr/schema/DenseVectorField.java   | 57 +++++++++++++---------
 .../org/apache/solr/search/vector/KnnQParser.java  |  7 ++-
 .../apache/solr/search/vector/KnnQParserTest.java  | 16 +++---
 .../search/TextToVectorQParserTest.java            |  2 +-
 4 files changed, 49 insertions(+), 33 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/schema/DenseVectorField.java 
b/solr/core/src/java/org/apache/solr/schema/DenseVectorField.java
index c35527cfec2..01c51a358d2 100644
--- a/solr/core/src/java/org/apache/solr/schema/DenseVectorField.java
+++ b/solr/core/src/java/org/apache/solr/schema/DenseVectorField.java
@@ -511,29 +511,40 @@ public class DenseVectorField extends FloatPointField {
     DenseVectorParser vectorBuilder =
         getVectorBuilder(vectorToSearch, DenseVectorParser.BuilderPhase.QUERY);
 
-    final Query knnQuery =
-        switch (vectorEncoding) {
-          case FLOAT32 -> new SolrKnnFloatVectorQuery(
-              fieldName, vectorBuilder.getFloatVector(), topK, efSearch, 
filterQuery);
-          case BYTE -> new SolrKnnByteVectorQuery(
-              fieldName, vectorBuilder.getByteVector(), topK, efSearch, 
filterQuery);
-        };
-
-    final boolean seedEnabled = (seedQuery != null);
-    final boolean earlyTerminationEnabled =
-        (earlyTermination != null && earlyTermination.isEnabled());
-
-    int caseNumber = (seedEnabled ? 1 : 0) + (earlyTerminationEnabled ? 2 : 0);
-    return switch (caseNumber) {
-        // 0: no seed, no early termination -> knnQuery
-      default -> knnQuery;
-        // 1: only seed -> Seeded(knnQuery)
-      case 1 -> getSeededQuery(knnQuery, seedQuery);
-        // 2: only early termination -> Patience(knnQuery)
-      case 2 -> getEarlyTerminationQuery(knnQuery, earlyTermination);
-        // 3: seed + early termination -> Patience(Seeded(knnQuery))
-      case 3 -> getEarlyTerminationQuery(getSeededQuery(knnQuery, seedQuery), 
earlyTermination);
-    };
+    switch (vectorEncoding) {
+      case FLOAT32:
+        SolrKnnFloatVectorQuery knnFloatVectorQuery =
+            new SolrKnnFloatVectorQuery(
+                fieldName, vectorBuilder.getFloatVector(), topK, efSearch, 
filterQuery);
+        if (earlyTermination.isEnabled()) {
+          return (earlyTermination.getSaturationThreshold() != null
+                  && earlyTermination.getPatience() != null)
+              ? PatienceKnnVectorQuery.fromFloatQuery(
+                  knnFloatVectorQuery,
+                  earlyTermination.getSaturationThreshold(),
+                  earlyTermination.getPatience())
+              : PatienceKnnVectorQuery.fromFloatQuery(knnFloatVectorQuery);
+        }
+        return knnFloatVectorQuery;
+      case BYTE:
+        SolrKnnByteVectorQuery knnByteVectorQuery =
+            new SolrKnnByteVectorQuery(
+                fieldName, vectorBuilder.getByteVector(), topK, efSearch, 
filterQuery);
+        if (earlyTermination.isEnabled()) {
+          return (earlyTermination.getSaturationThreshold() != null
+                  && earlyTermination.getPatience() != null)
+              ? PatienceKnnVectorQuery.fromByteQuery(
+                  knnByteVectorQuery,
+                  earlyTermination.getSaturationThreshold(),
+                  earlyTermination.getPatience())
+              : PatienceKnnVectorQuery.fromByteQuery(knnByteVectorQuery);
+        }
+        return knnByteVectorQuery;
+      default:
+        throw new SolrException(
+            SolrException.ErrorCode.SERVER_ERROR,
+            "Unexpected state. Vector Encoding: " + vectorEncoding);
+    }
   }
 
   /**
diff --git a/solr/core/src/java/org/apache/solr/search/vector/KnnQParser.java 
b/solr/core/src/java/org/apache/solr/search/vector/KnnQParser.java
index 65b5650ba38..95afb3ef18f 100644
--- a/solr/core/src/java/org/apache/solr/search/vector/KnnQParser.java
+++ b/solr/core/src/java/org/apache/solr/search/vector/KnnQParser.java
@@ -111,6 +111,11 @@ public class KnnQParser extends AbstractVectorQParserBase {
     final int efSearch = localParams.getInt("ef-search", topK * 2);
 
     return denseVectorType.getKnnVectorQuery(
-        schemaField.getName(), vectorToSearch, topK, efSearch, 
getFilterQuery(), getEarlyTerminationParams());
+        schemaField.getName(),
+        vectorToSearch,
+        topK,
+        efSearch,
+        getFilterQuery(),
+        getEarlyTerminationParams());
   }
 }
diff --git 
a/solr/core/src/test/org/apache/solr/search/vector/KnnQParserTest.java 
b/solr/core/src/test/org/apache/solr/search/vector/KnnQParserTest.java
index 35920c882c2..ca13e9fe02e 100644
--- a/solr/core/src/test/org/apache/solr/search/vector/KnnQParserTest.java
+++ b/solr/core/src/test/org/apache/solr/search/vector/KnnQParserTest.java
@@ -975,7 +975,7 @@ public class KnnQParserTest extends SolrTestCaseJ4 {
   }
 
   @Test
-  public void 
testKnnFloatWithoutExplicitlyEarlyTermination_returnsKnnFloatVectorQuery() {
+  public void 
testKnnFloatWithoutExplicitlyEarlyTermination_returnsSolrKnnFloatVectorQuery() {
     // It verifies that when no early termination parameters are provided,
     // the default behavior is applied (early termination is disabled), and no 
special logic is
     // triggered.
@@ -990,11 +990,11 @@ public class KnnQParserTest extends SolrTestCaseJ4 {
             "debugQuery",
             "true"),
         "//result[@numFound='5']",
-        
"//str[@name='parsedquery'][.='KnnFloatVectorQuery(KnnFloatVectorQuery:vector[1.0,...][5])']");
+        
"//str[@name='parsedquery'][.='SolrKnnFloatVectorQuery(SolrKnnFloatVectorQuery:vector[1.0,...][10])']");
   }
 
   @Test
-  public void testKnnFloatWithoutEarlyTermination_returnsKnnFloatVectorQuery() 
{
+  public void 
testKnnFloatWithoutEarlyTermination_returnsSolrKnnFloatVectorQuery() {
     // It verifies that when early termination is explicitly set to false, no 
special logic is
     // triggered.
     String vectorToSearch = "[1.0, 2.0, 3.0, 4.0]";
@@ -1008,7 +1008,7 @@ public class KnnQParserTest extends SolrTestCaseJ4 {
             "debugQuery",
             "true"),
         "//result[@numFound='5']",
-        
"//str[@name='parsedquery'][.='KnnFloatVectorQuery(KnnFloatVectorQuery:vector[1.0,...][5])']");
+        
"//str[@name='parsedquery'][.='SolrKnnFloatVectorQuery(SolrKnnFloatVectorQuery:vector[1.0,...][10])']");
   }
 
   @Test
@@ -1029,7 +1029,7 @@ public class KnnQParserTest extends SolrTestCaseJ4 {
     String expectedParsedQuery =
         String.format(
             Locale.US,
-            
"PatienceKnnVectorQuery(PatienceKnnVectorQuery{saturationThreshold=%.3f, 
patience=%d, delegate=KnnFloatVectorQuery:vector[1.0,...][10]})",
+            
"PatienceKnnVectorQuery(PatienceKnnVectorQuery{saturationThreshold=%.3f, 
patience=%d, delegate=SolrKnnFloatVectorQuery:vector[1.0,...][20]})",
             defaultSaturationThreshold,
             defaultPatience);
 
@@ -1068,7 +1068,7 @@ public class KnnQParserTest extends SolrTestCaseJ4 {
     String expectedParsedQuery =
         String.format(
             Locale.US,
-            
"PatienceKnnVectorQuery(PatienceKnnVectorQuery{saturationThreshold=%.3f, 
patience=%d, delegate=KnnFloatVectorQuery:vector[1.0,...][10]})",
+            
"PatienceKnnVectorQuery(PatienceKnnVectorQuery{saturationThreshold=%.3f, 
patience=%d, delegate=SolrKnnFloatVectorQuery:vector[1.0,...][20]})",
             explicitSaturationThreshold,
             explicitPatience);
 
@@ -1101,7 +1101,7 @@ public class KnnQParserTest extends SolrTestCaseJ4 {
     String expectedParsedQuery =
         String.format(
             Locale.US,
-            
"PatienceKnnVectorQuery(PatienceKnnVectorQuery{saturationThreshold=%.3f, 
patience=%d, delegate=KnnByteVectorQuery:vector_byte_encoding[2,...][5]})",
+            
"PatienceKnnVectorQuery(PatienceKnnVectorQuery{saturationThreshold=%.3f, 
patience=%d, delegate=SolrKnnByteVectorQuery:vector_byte_encoding[2,...][10]})",
             explicitSaturationThreshold,
             explicitPatience);
 
@@ -1133,7 +1133,7 @@ public class KnnQParserTest extends SolrTestCaseJ4 {
     String expectedParsedQuery =
         String.format(
             Locale.US,
-            
"PatienceKnnVectorQuery(PatienceKnnVectorQuery{saturationThreshold=%.3f, 
patience=%d, delegate=KnnFloatVectorQuery:vector[1.0,...][10]})",
+            
"PatienceKnnVectorQuery(PatienceKnnVectorQuery{saturationThreshold=%.3f, 
patience=%d, delegate=SolrKnnFloatVectorQuery:vector[1.0,...][20]})",
             explicitSaturationThreshold,
             explicitPatience);
 
diff --git 
a/solr/modules/language-models/src/test/org/apache/solr/languagemodels/textvectorisation/search/TextToVectorQParserTest.java
 
b/solr/modules/language-models/src/test/org/apache/solr/languagemodels/textvectorisation/search/TextToVectorQParserTest.java
index bfe42e30842..1756554aa20 100644
--- 
a/solr/modules/language-models/src/test/org/apache/solr/languagemodels/textvectorisation/search/TextToVectorQParserTest.java
+++ 
b/solr/modules/language-models/src/test/org/apache/solr/languagemodels/textvectorisation/search/TextToVectorQParserTest.java
@@ -406,7 +406,7 @@ public class TextToVectorQParserTest extends 
TestLanguageModelBase {
     String expectedParsedQuery =
         String.format(
             Locale.US,
-            
"PatienceKnnVectorQuery(PatienceKnnVectorQuery{saturationThreshold=%.3f, 
patience=%d, delegate=KnnFloatVectorQuery:vector[1.0,...][5]})",
+            
"PatienceKnnVectorQuery(PatienceKnnVectorQuery{saturationThreshold=%.3f, 
patience=%d, delegate=SolrKnnFloatVectorQuery:vector[1.0,...][10]})",
             defaultSaturationThreshold,
             defaultPatience);
 

Reply via email to