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

epugh pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/main by this push:
     new a0714c8d01d SOLR-504: a missing or blank "pf" must not add an 
empty/no-op boolean clause to the query (#4891)
a0714c8d01d is described below

commit a0714c8d01d070d1bf8fea2efb1d3bdece82c280
Author: Eric Pugh <[email protected]>
AuthorDate: Wed Sep 9 06:43:08 2026 -0400

    SOLR-504: a missing or blank "pf" must not add an empty/no-op boolean 
clause to the query (#4891)
---
 .../SOLR-504-dismax-blank-pf-empty-clause.yml      |  9 +++++++
 .../java/org/apache/solr/search/DisMaxQParser.java |  7 +++++-
 .../solr/search/TestExtendedDismaxParser.java      | 29 ++++++++++++++++++++++
 3 files changed, 44 insertions(+), 1 deletion(-)

diff --git a/changelog/unreleased/SOLR-504-dismax-blank-pf-empty-clause.yml 
b/changelog/unreleased/SOLR-504-dismax-blank-pf-empty-clause.yml
new file mode 100644
index 00000000000..ebab4b53904
--- /dev/null
+++ b/changelog/unreleased/SOLR-504-dismax-blank-pf-empty-clause.yml
@@ -0,0 +1,9 @@
+title: >
+  The DisMax query parser no longer adds an empty, no-op boolean clause to the 
query when the
+  pf parameter is blank or missing.
+type: fixed
+authors:
+  - name: Eric Pugh
+links:
+  - name: SOLR-504
+    url: https://issues.apache.org/jira/browse/SOLR-504
diff --git a/solr/core/src/java/org/apache/solr/search/DisMaxQParser.java 
b/solr/core/src/java/org/apache/solr/search/DisMaxQParser.java
index 25e93592d35..91eec6acabd 100644
--- a/solr/core/src/java/org/apache/solr/search/DisMaxQParser.java
+++ b/solr/core/src/java/org/apache/solr/search/DisMaxQParser.java
@@ -227,7 +227,12 @@ public class DisMaxQParser extends QParser {
      * matched those phrases but do match looser phrases.
      */
     String userPhraseQuery = userQuery.replace("\"", "");
-    return pp.parse("\"" + userPhraseQuery + "\"");
+    Query phrase = pp.parse("\"" + userPhraseQuery + "\"");
+    // blank/missing pf yields an empty BooleanQuery, not null; normalize it
+    if (ExtendedDismaxQParser.isEmpty(phrase)) {
+      return null;
+    }
+    return phrase;
   }
 
   protected Query getUserQuery(
diff --git 
a/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java 
b/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java
index cf80ef4eb24..f1568b25795 100644
--- a/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java
+++ b/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java
@@ -3377,4 +3377,33 @@ public class TestExtendedDismaxParser extends 
SolrTestCaseJ4 {
         "org.apache.solr.search.SyntaxError: Query Field 'nosuchfield' is not 
a valid field name",
         exception.getMessage());
   }
+
+  /** SOLR-504: a missing or blank "pf" must not add an empty/no-op boolean 
clause to the query */
+  @Test
+  public void testPfMissingOrBlankAddsNoEmptyClause() throws Exception {
+    final String expectedNoPf = "+((subject:hello | title:hello) 
(subject:world | title:world))";
+    final String expectedRealPf = expectedNoPf + " (subject:\"hello world\")";
+
+    for (String defType : List.of("dismax", "edismax")) {
+      try (SolrQueryRequest req = req("qf", "subject title", "defType", 
defType)) {
+        assertEquals(
+            defType,
+            expectedNoPf,
+            QParser.getParser("hello world", defType, 
req).getQuery().toString());
+      }
+      try (SolrQueryRequest req = req("qf", "subject title", "pf", "", 
"defType", defType)) {
+        assertEquals(
+            defType,
+            expectedNoPf,
+            QParser.getParser("hello world", defType, 
req).getQuery().toString());
+      }
+      // sanity check: a real pf *does* add a (non-empty) phrase clause
+      try (SolrQueryRequest req = req("qf", "subject title", "pf", "subject", 
"defType", defType)) {
+        assertEquals(
+            defType,
+            expectedRealPf,
+            QParser.getParser("hello world", defType, 
req).getQuery().toString());
+      }
+    }
+  }
 }

Reply via email to