> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lancedb.com/llms.txt
> Use this file to discover all available pages before exploring further.

# MRR Reranker

> Combine and rerank search results using Mean Reciprocal Rank (MRR) algorithm in LanceDB. Supports weighted scoring for hybrid and multivector search.

# MRR Reranker

This reranker uses the Mean Reciprocal Rank (MRR) algorithm to combine and rerank search results from vector and full-text search. You can use this reranker by passing `MRRReranker()` to the `rerank()` method. The MRR algorithm calculates the average of reciprocal ranks across different search results, providing a balanced way to merge results from multiple ranking systems.

> **Note:** Supported query types – Hybrid and Multivector search.

import lancedb
from lancedb.embeddings import get\_registry
from lancedb.pydantic import LanceModel, Vector
from lancedb.rerankers import MRRReranker

embedder = get\_registry().get("sentence-transformers").create()
db = lancedb.connect("\~/.lancedb")

class Schema(LanceModel):
&#x20;   text: str = embedder.SourceField()
&#x20;   vector: Vector(embedder.ndims()) = embedder.VectorField()

data = \[
&#x20;   \{"text": "hello world"},
&#x20;   \{"text": "goodbye world"},
]
tbl = db.create\_table("test", schema=Schema, mode="overwrite")
tbl.add(data)
reranker = MRRReranker(weight\_vector=0.7, weight\_fts=0.3)

\# Run hybrid search with a reranker
tbl.create\_fts\_index("text", replace=True)
result = (
&#x20;   tbl.search("hello", query\_type="hybrid").rerank(reranker=reranker).to\_list()
)

\# Run multivector search across multiple vector columns
rs1 = tbl.search("hello").limit(10).with\_row\_id(True).to\_arrow()
rs2 = tbl.search("greeting").limit(10).with\_row\_id(True).to\_arrow()
combined = MRRReranker().rerank\_multivector(\[rs1, rs2])


## Accepted Arguments

| Argument | Type | Default | Description |
| - | - | - | - |
| `weight_vector` | `float` | `0.5` | Weight for vector search results (0.0 to 1.0). |
| `weight_fts` | `float` | `0.5` | Weight for FTS search results (0.0 to 1.0). |
| `return_score` | `str` | `"relevance"` | Options are "relevance" or "all". The type of score to return. If "relevance", will return only the `_relevance_score`. If "all", will return all scores from the vector and FTS search along with the relevance score. |

**Note:** `weight_vector` + `weight_fts` must equal 1.0.

For multivector reranking, input result sets need `_rowid` so LanceDB can identify the same row
across the ranked lists. Add `.with_row_id(True)` to each vector search before passing the results
to the reranker.

## Supported Scores for each query type

You can specify the type of scores you want the reranker to return. The following are the supported scores for each query type:

### Hybrid Search

| `return_score` | Status | Description |
| - | - | - |
| `relevance` | ✅ Supported | Results only have the `_relevance_score` column. |
| `all` | ✅ Supported | Results have vector(`_distance`) and FTS(`score`) along with Hybrid Search score(`_relevance_score`). |

### Multivector Search

| `return_score` | Status | Description |
| - | - | - |
| `relevance` | ✅ Supported | Results only have the `_relevance_score` column. |
| `all` | ✅ Supported | Results have vector distances from all searches along with `_relevance_score`. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.