FUSE
Serverless Stack
The FUSE
processing command merges rows from multiple result sets and assigns
new relevance scores.
FUSE
enables hybrid search to combine and score results from multiple queries, together with the FORK
command.
FUSE
works by:
- Merging rows with matching
<key_columns>
values - Assigning new relevance scores using the specified
<fuse_method>
algorithm and the values from the<group_column>
and<score_column>
FUSE
is for search use cases: it merges ranked result sets and computes relevance.
Learn more about how search works in ES|QL.
Use default parameters:
FUSE
Specify custom parameters:
FUSE <fuse_method> SCORE BY <score_column> GROUP BY <group_column> KEY BY <key_columns> WITH <options>
fuse_method
- Defaults to
RRF
. Can be one ofRRF
(for Reciprocal Rank Fusion) orLINEAR
(for linear combination of scores). Designates which method to use to assign new relevance scores. options
- Options for the
fuse_method
.
When fuse_method
is RRF
, options
supports the following parameters:
rank_constant
- Defaults to
60
. Represents therank_constant
used in the RRF formula. weights
- Defaults to
{}
. Allows you to set different weights for RRF scores based ongroup_column
values. Refer to the Set custom weights example.
When fuse_method
is LINEAR
, options
supports the following parameters:
normalizer
- Defaults to
none
. Can be one ofnone
orminmax
. Specifies which score normalization method to apply. weights
- Defaults to
{}
. Allows you to different weights for scores based ongroup_column
values. Refer to the Set custom weights example.
score_column
- Defaults to
_score
. Designates which column to use to retrieve the relevance scores of the input row and where to output the new relevance scores of the merged rows. group_column
- Defaults to
_fork
. Designates which column represents the result set. key_columns
- Defaults to
_id, _index
. Rows with matchingkey_columns
values are merged.
In the following example, we use the FORK
command to run two different queries: a lexical and a semantic query.
We then use FUSE
to merge the results (applies RRF
by default):
FROM books METADATA _id, _index, _score
| FORK (WHERE title:"Shakespeare" | SORT _score DESC)
(WHERE semantic_title:"Shakespeare" | SORT _score DESC)
| FUSE
- Include document ID, index name, and relevance score
- Fork 1: Lexical search on title field, sorted by relevance score
- Fork 2: Semantic search on semantic_title field, sorted by relevance score
- Merge results using RRF algorithm by default
FUSE
can also use linear score combination:
FROM books METADATA _id, _index, _score
| FORK (WHERE title:"Shakespeare" | SORT _score DESC)
(WHERE semantic_title:"Shakespeare" | SORT _score DESC)
| FUSE LINEAR
- Fork 1: Lexical search on title
- Fork 2: Semantic search on semantic_title
- Merge results using linear combination of scores (equal weights by default)
When combining results from semantic and lexical queries through linear combination, we recommend first normalizing the scores from each result set.
The following example uses minmax
score normalization.
This means the scores normalize and assign values between 0 and 1, before combining the rows:
FROM books METADATA _id, _index, _score
| FORK (WHERE title:"Shakespeare" | SORT _score DESC)
(WHERE semantic_title:"Shakespeare" | SORT _score DESC)
| FUSE LINEAR WITH { "normalizer": "minmax" }
- Fork 1: Lexical search
- Fork 2: Semantic search
- Linear combination with min-max normalization (scales scores to 0-1 range)
FUSE
allows you to specify different weights to scores, based on the _fork
column values, enabling you to control the relative importance of each query branch in the final results.
FROM books METADATA _id, _index, _score
| FORK (WHERE title:"Shakespeare" | SORT _score DESC)
(WHERE semantic_title:"Shakespeare" | SORT _score DESC)
| FUSE LINEAR WITH { "weights": { "fork1": 0.7, "fork2": 0.3 }, "normalizer": "minmax" }
- Fork 1: Lexical search
- Fork 2: Semantic search
- Weighted linear combination: 70% lexical, 30% semantic, with min-max normalization
These limitations can be present either when:
FUSE
is not combined withFORK
FUSE
doesn't use the default metadata columns_id
,_index
,_score
and_fork
FUSE
assumes thatkey_columns
are single valued. Whenkey_columns
are multivalued,FUSE
can produce unreliable relevance scores.FUSE
automatically assigns a score value ofNULL
if the<score_column>
or<group_column>
are multivalued.FUSE
assumes that the combination ofkey_columns
andgroup_column
is unique. If not,FUSE
can produce unreliable relevance scores.