---
title: Relevance Tuning
description: Tune the BM25 score by adjusting the weights of individual queries
canonical: https://docs.paradedb.com/documentation/sorting/boost
---
## Boosting
ParadeDB offers several ways to tune a document's [BM25 score](/documentation/sorting/score).
The first is boosting, which increases or decreases the impact of a specific query by multiplying its contribution to the overall BM25 score.
To boost a query, cast the query to the `boost` type. In this example, the `shoes` query is weighted twice as heavily as the `footwear` query.
```sql SQL
SELECT id, pdb.score(id), description, category
FROM mock_items
WHERE description ||| 'shoes'::pdb.boost(2) OR category ||| 'footwear'
ORDER BY score DESC
LIMIT 5;
```
```ts Drizzle
import { desc, or } from "drizzle-orm";
import { search } from "@paradedb/drizzle-paradedb";
await db
.select({
id: mockItems.id,
score: search.score(mockItems.id),
description: mockItems.description,
category: mockItems.category,
})
.from(mockItems)
.where(
or(
search.matchAny(mockItems.description, search.boost("shoes", 2)),
search.matchAny(mockItems.category, "footwear"),
),
)
.orderBy(desc(search.score(mockItems.id)))
.limit(5);
```
```python Django
from django.db.models import Q
from paradedb import Boost, MatchAny, ParadeDB, Score
MockItem.objects.filter(
Q(description=ParadeDB(MatchAny(Boost('shoes', 2)))) |
Q(category=ParadeDB(MatchAny('footwear')))
).annotate(
score=Score()
).values('id', 'score', 'description', 'category').order_by('-score')[:5]
```
```python SQLAlchemy
from sqlalchemy import desc, or_, select
from sqlalchemy.orm import Session
from paradedb.sqlalchemy import pdb, search
stmt = (
select(
MockItem.id,
pdb.score(MockItem.id).label("score"),
MockItem.description,
MockItem.category,
)
.where(
or_(
search.match_any(MockItem.description, "shoes", boost=2.0),
search.match_any(MockItem.category, "footwear"),
)
)
.order_by(desc("score"))
.limit(5)
)
with Session(engine) as session:
session.execute(stmt).all()
```
```ruby Rails
MockItem.search(:description)
.matching_any("shoes", boost: 2)
.or(MockItem.search(:category).matching_any("footwear"))
.with_score
.select(:id, :description, :category)
.order(search_score: :desc)
.limit(5)
```
```cs EF Core
await dbContext
.MockItems.Where(item =>
EF.Functions.MatchAny(item.Description, Pdb.Boost("shoes", 2))
|| EF.Functions.MatchAny(item.Category, "footwear")
)
.Select(item => new
{
item.Id,
Score = EF.Functions.Score(item.Id),
item.Description,
item.Category
})
.OrderByDescending(item => item.Score)
.Take(5)
.ToListAsync();
```
`boost` takes a numeric value, which is the multiplicative boost factor. It can be any floating point number between `-2048` and `2048`.
[Query builder functions](/documentation/query-builder/overview) can also be boosted:
```sql SQL
SELECT id, description, category, pdb.score(id)
FROM mock_items
WHERE description @@@ pdb.regex('key.*')::pdb.boost(2)
ORDER BY score DESC
LIMIT 5;
```
```ts Drizzle
import { desc } from "drizzle-orm";
import { search } from "@paradedb/drizzle-paradedb";
await db
.select({
id: mockItems.id,
description: mockItems.description,
category: mockItems.category,
score: search.score(mockItems.id),
})
.from(mockItems)
.where(search.boost(search.regex(mockItems.description, "key.*"), 2))
.orderBy(desc(search.score(mockItems.id)))
.limit(5);
```
```python Django
from paradedb import Boost, ParadeDB, Regex, Score
MockItem.objects.filter(
description=ParadeDB(Boost(Regex('key.*'), 2))
).annotate(
score=Score()
).values('id', 'description', 'category', 'score').order_by('-score')[:5]
```
```python SQLAlchemy
from sqlalchemy import desc, select
from sqlalchemy.orm import Session
from paradedb.sqlalchemy import pdb, search
stmt = (
select(
MockItem.id,
MockItem.description,
MockItem.category,
pdb.score(MockItem.id).label("score"),
)
.where(search.regex(MockItem.description, "key.*", boost=2.0))
.order_by(desc("score"))
.limit(5)
)
with Session(engine) as session:
session.execute(stmt).all()
```
```ruby Rails
MockItem.search(:description)
.regex("key.*", boost: 2)
.with_score
.select(:id, :description, :category)
.order(search_score: :desc)
.limit(5)
```
```cs EF Core
await dbContext
.MockItems.Where(item =>
Pdb.Boost(EF.Functions.Regex(item.Description, "key.*"), 2)
)
.Select(item => new
{
item.Id,
item.Description,
item.Category,
Score = EF.Functions.Score(item.Id)
})
.OrderByDescending(item => item.Score)
.Take(5)
.ToListAsync();
```
Boost can be used in conjunction with other type casts, like [fuzzy](/documentation/full-text/fuzzy):
```sql SQL
SELECT id, description, category, pdb.score(id)
FROM mock_items
WHERE description ||| 'shose'::pdb.fuzzy(2)::pdb.boost(2)
ORDER BY score DESC
LIMIT 5;
```
```ts Drizzle
import { desc } from "drizzle-orm";
import { search } from "@paradedb/drizzle-paradedb";
await db
.select({
id: mockItems.id,
description: mockItems.description,
category: mockItems.category,
score: search.score(mockItems.id),
})
.from(mockItems)
.where(
search.matchAny(
mockItems.description,
search.boost(search.fuzzy("shose", 2), 2),
),
)
.orderBy(desc(search.score(mockItems.id)))
.limit(5);
```
```python Django
from paradedb import Boost, Fuzzy, MatchAny, ParadeDB, Score
MockItem.objects.filter(
description=ParadeDB(MatchAny(Boost(Fuzzy('shose', 2), 2)))
).annotate(
score=Score()
).values('id', 'description', 'category', 'score').order_by('-score')[:5]
```
```python SQLAlchemy
from sqlalchemy import desc, select
from sqlalchemy.orm import Session
from paradedb.sqlalchemy import pdb, search
stmt = (
select(
MockItem.id,
MockItem.description,
MockItem.category,
pdb.score(MockItem.id).label("score"),
)
.where(search.match_any(MockItem.description, "shose", distance=2, boost=2.0))
.order_by(desc("score"))
.limit(5)
)
with Session(engine) as session:
session.execute(stmt).all()
```
```ruby Rails
MockItem.search(:description)
.matching_any("shose", distance: 2, boost: 2)
.with_score
.select(:id, :description, :category)
.order(search_score: :desc)
.limit(5)
```
```cs EF Core
await dbContext
.MockItems.Where(item =>
EF.Functions.MatchAny(item.Description, Pdb.Boost(Pdb.Fuzzy("shose", 2), 2))
)
.Select(item => new
{
item.Id,
item.Description,
item.Category,
Score = EF.Functions.Score(item.Id)
})
.OrderByDescending(item => item.Score)
.Take(5)
.ToListAsync();
```
## Constant Scoring
Constant scoring assigns the same score to all documents that match a query. To apply a constant score, cast the query to the `const` type with a
numeric value.
For instance, the following query assigns a score of `1` to all documents matching the query `shoes`.
```sql SQL
SELECT id, pdb.score(id), description, category
FROM mock_items
WHERE description ||| 'shoes'::pdb.const(1)
ORDER BY score DESC
LIMIT 5;
```
```ts Drizzle
import { desc } from "drizzle-orm";
import { search } from "@paradedb/drizzle-paradedb";
await db
.select({
id: mockItems.id,
score: search.score(mockItems.id),
description: mockItems.description,
category: mockItems.category,
})
.from(mockItems)
.where(search.matchAny(mockItems.description, search.constant("shoes", 1)))
.orderBy(desc(search.score(mockItems.id)))
.limit(5);
```
```python Django
from paradedb import Const, MatchAny, ParadeDB, Score
MockItem.objects.filter(
description=ParadeDB(MatchAny(Const('shoes', 1)))
).annotate(
score=Score()
).values('id', 'score', 'description', 'category').order_by('-score')[:5]
```
```python SQLAlchemy
from sqlalchemy import desc, select
from sqlalchemy.orm import Session
from paradedb.sqlalchemy import pdb, search
stmt = (
select(
MockItem.id,
pdb.score(MockItem.id).label("score"),
MockItem.description,
MockItem.category,
)
.where(search.match_any(MockItem.description, "shoes", const=1.0))
.order_by(desc("score"))
.limit(5)
)
with Session(engine) as session:
session.execute(stmt).all()
```
```ruby Rails
MockItem.search(:description)
.matching_any("shoes", constant_score: 1)
.with_score
.select(:id, :description, :category)
.order(search_score: :desc)
.limit(5)
```
```cs EF Core
await dbContext
.MockItems.Where(item => EF.Functions.MatchAny(item.Description, Pdb.Const("shoes", 1)))
.Select(item => new
{
item.Id,
Score = EF.Functions.Score(item.Id),
item.Description,
item.Category
})
.OrderByDescending(item => item.Score)
.Take(5)
.ToListAsync();
```