Back to Paradedb

All

docs/documentation/query-builder/compound/all.mdx

0.23.32.4 KB
Original Source

The all query means "search all rows in the index."

The primary use case for the all query is to force the query to be executed by the ParadeDB index instead of Postgres' other execution methods. Because ParadeDB executes a query only when a ParadeDB operator is present in the query, the all query injects an operator into the query without changing the query's meaning.

To use it, pass the key field to the left-hand side of @@@ and pdb.all() to the right-hand side.

<CodeGroup> ```sql SQL -- Top K executed by standard Postgres SELECT id, description, rating, category FROM mock_items WHERE rating IS NOT NULL ORDER BY rating LIMIT 5;

-- Top K executed by ParadeDB SELECT id, description, rating, category FROM mock_items WHERE rating IS NOT NULL AND id @@@ pdb.all() ORDER BY rating LIMIT 5;


```python Django
from paradedb import All, ParadeDB

# Top K executed by standard Postgres
MockItem.objects.filter(
    rating__isnull=False
).order_by('rating')[:5]

# Top K executed by ParadeDB
MockItem.objects.filter(
    rating__isnull=False,
    id=ParadeDB(All())
).order_by('rating')[:5]
python
from sqlalchemy import select
from sqlalchemy.orm import Session
from paradedb.sqlalchemy import search

standard_topn_stmt = (
    select(MockItem.id, MockItem.description, MockItem.rating, MockItem.category)
    .where(MockItem.rating.is_not(None))
    .order_by(MockItem.rating)
    .limit(5)
)

paradedb_topn_stmt = (
    select(MockItem.id, MockItem.description, MockItem.rating, MockItem.category)
    .where(MockItem.rating.is_not(None), search.all(MockItem.id))
    .order_by(MockItem.rating)
    .limit(5)
)

with Session(engine) as session:
    {
        "standard_rows": session.execute(standard_topn_stmt).all(),
        "paradedb_rows": session.execute(paradedb_topn_stmt).all(),
    }
ruby
# Top K executed by standard Postgres
MockItem.where.not(rating: nil).order(:rating).limit(5)

# Top K executed by ParadeDB
MockItem.search(:id)
        .match_all
        .where.not(rating: nil)
        .order(:rating)
        .limit(5)
</CodeGroup>

This is useful for cases where queries that don't contain a ParadeDB operator can be more efficiently executed by ParadeDB vs. standard Postgres, like Top K or aggregate queries.