This is an automated email from the ASF dual-hosted git repository.
abenedetti pushed a commit to branch branch_10x
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/branch_10x by this push:
new f0f0a61d065 SOLR-18100: Improve Combined Query Feature documentation
(#4144)
f0f0a61d065 is described below
commit f0f0a61d0650e1332580f23fd583011394420502
Author: Ilaria Petreti <[email protected]>
AuthorDate: Mon Mar 16 11:48:48 2026 +0100
SOLR-18100: Improve Combined Query Feature documentation (#4144)
(cherry picked from commit 3724ebb50a4bf3b07e8e620ef327d4d458cb58da)
---
.../query-guide/pages/json-combined-query-dsl.adoc | 92 ++++++++++++++++------
1 file changed, 68 insertions(+), 24 deletions(-)
diff --git
a/solr/solr-ref-guide/modules/query-guide/pages/json-combined-query-dsl.adoc
b/solr/solr-ref-guide/modules/query-guide/pages/json-combined-query-dsl.adoc
index 98d3c2e96b8..0af349c4e80 100644
--- a/solr/solr-ref-guide/modules/query-guide/pages/json-combined-query-dsl.adoc
+++ b/solr/solr-ref-guide/modules/query-guide/pages/json-combined-query-dsl.adoc
@@ -25,6 +25,42 @@ It is extending JSON Query DSL ultimately enabling Hybrid
Search.
This feature is currently unsupported for grouping and Cursors.
====
+[IMPORTANT]
+====
+This feature works in both Standalone and SolrCloud modes and always performs
distributed search execution.
+In Standalone (user-managed) mode, shard URLs must be explicitly allow-listed
using the *allowUrls* parameter, otherwise Solr returns HTTP 403. For example:
+
+```
+"-Dsolr.security.allow.urls=http://localhost:8983/solr/"
+```
+
+====
+
+== Configuration Requirements
+
+Combined Query Feature has a separate handler with class
`solr.CombinedQuerySearchHandler` which can be configured as below:
+
+```
+<requestHandler name="/search" class="solr.CombinedQuerySearchHandler">
+.....
+</requestHandler>
+```
+
+In addition, the `QueryComponent` has been extended to create a new
`CombinedQueryComponent`, which must be declared as a search component:
+```
+<searchComponent class="solr.CombinedQueryComponent" name="combined_query">
+ <int name="maxCombinerQueries">2</int>
+</searchComponent>
+```
+
+
+The Search Component also accepts parameters as below:
+
+`maxCombinerQueries`::
+This parameter can be set to enforce an upper limit on the number of queries
defined in `combiner.query`.
+It defaults to `5` if not set.
+
+
== Query DSL Structure
The query structure is similar to JSON Query DSL except for how multiple
queries are defined along with their parameters.
@@ -71,37 +107,45 @@ Below is a sample JSON query payload:
}
```
-== Search Handler Configuration
-
-Combined Query Feature has a separate handler with class
`solr.CombinedQuerySearchHandler` which can be configured as below:
-
-```
-<requestHandler name="/search" class="solr.CombinedQuerySearchHandler">
-.....
-</requestHandler>
-```
-
-The Search Handler also accepts parameters as below:
+== Combiner Algorithm Plugin
-`maxCombinerQueries`::
- This parameter can be set to put upper limit check on the maximum number of
queries can be executed defined in `combiner.query`.
- It defaults to `5` if not set.
+As mentioned xref:json-combined-query-dsl.adoc#query-dsl-structure[above],
custom algorithms can be configured to combine the results across multiple
queries using a
https://solr.apache.org/guide/solr/latest/configuration-guide/solr-plugins.html[Solr
plugin].
-=== Combiner Algorithm Plugin
+The class to implement the custom logic has to extend
`org.apache.solr.handler.component.combine.QueryAndResponseCombiner`, which is
an abstract base class that provides a framework for implementing various
algorithms used to merge ranked lists and shard documents.
-As mentioned xref:json-combined-query-dsl.adoc#query-dsl-structure[above],
custom algorithms can be configured to combine the results across multiple
queries.
-The Combined Query Search Handler definition takes parameter `combiners` where
a custom class can be used to define the algorithm by giving a name and the
parameters required.
+The Combined Query Component definition takes the `combiners` parameter, where
the custom class can be declared by specifying a name and the custom parameters
required by the custom algorithm.
-Example of the Search Handler as below:
+Example of the Search Component as below:
```
<searchComponent class="solr.CombinedQueryComponent" name="combined_query">
- <int name="maxCombinerQueries">2</int>
+ <int name="maxCombinerQueries">2</int>
<lst name="combiners">
- <lst name="customAlgorithm">
- <str
name="class">org.apache.solr.search.combine.CustomCombiner</str>
- <int name="var1">35</int>
- <str name="var2">customValue</str>
+ <lst name="customAlgorithm">
+ <str
name="class">org.apache.solr.handler.component.combine.CustomCombiner</str>
+ <int name="customParam1">35</int>
+ <str name="customParam2">customValue</str>
</lst>
</lst>
- </searchComponent>
+</searchComponent>
```
+
+Then, when executing the combined query, the only thing that changes in the
JSON query payload is the value specified in the `combiner.algorithm` parameter:
+
+```
+ ...
+ "params": {
+ "combiner": true,
+ "combiner.query": ["lexical1", "vector"],
+ "combiner.algorithm": "customAlgorithm"
+ }
+...
+```
+
+In this case, `customAlgorithm` is specified which is the name defined in the
configuration; the RRF-specific parameters do not need to be provided.
+
+== Additional Resources
+
+Blog posts:
+
+*
https://sease.io/2026/03/hybrid-search-with-reciprocal-rank-fusion-in-apache-solr.html[Hybrid
Search with Reciprocal Rank Fusion in Apache Solr]
+*
https://sease.io/2026/03/hybrid-search-using-a-custom-algorithm-in-apache-solr.html[Hybrid
Search using a Custom Algorithm in Apache Solr]