Postgres

Indexes

Postgres specific indexes.

class tortoise.contrib.postgres.indexes.BloomIndex(*expressions, fields=None, name=None, condition=None)[source]
class tortoise.contrib.postgres.indexes.BrinIndex(*expressions, fields=None, name=None, condition=None)[source]
class tortoise.contrib.postgres.indexes.GinIndex(*expressions, fields=None, name=None, condition=None)[source]
class tortoise.contrib.postgres.indexes.GistIndex(*expressions, fields=None, name=None, condition=None)[source]
class tortoise.contrib.postgres.indexes.HashIndex(*expressions, fields=None, name=None, condition=None)[source]
class tortoise.contrib.postgres.indexes.SpGistIndex(*expressions, fields=None, name=None, condition=None)[source]

Fields

Postgres specific fields.

class tortoise.contrib.postgres.fields.ArrayField(element_type='int', **kwargs)[source]
class tortoise.contrib.postgres.fields.TSVectorField(source_fields=None, config=None, weights=None, stored=True, **kwargs)[source]

Functions

class tortoise.contrib.postgres.functions.ToTsVector(field)[source]

to to_tsvector function

class tortoise.contrib.postgres.functions.ToTsQuery(field)[source]

to_tsquery function

class tortoise.contrib.postgres.functions.PlainToTsQuery(field)[source]

plainto_tsquery function

Postgres full text search.

Full text search uses TSVECTOR data and PostgreSQL search functions. Tortoise provides field support, expression helpers, and ranking/headline utilities similar to Django.

Generated TSVECTOR columns require PostgreSQL 12+.

from tortoise import fields, models
from tortoise.contrib.postgres.fields import TSVectorField
from tortoise.contrib.postgres.search import SearchQuery, SearchRank, SearchVector

class Article(models.Model):
    title = fields.CharField(max_length=200)
    body = fields.TextField()
    search = TSVectorField(
        source_fields=("title", "body"),
        config="english",
        weights=("A", "B"),
        stored=True,
    )

query = SearchQuery("postgres", search_type="websearch", config="english")
vector = SearchVector("title", "body", config="english")
rank = SearchRank(vector, query, normalization=32)
results = (
    await Article.annotate(rank=rank)
    .filter(search__search=query)
    .order_by("-rank")
)
from tortoise.contrib.postgres.search import SearchHeadline

results = await Article.annotate(
    snippet=SearchHeadline("body", query, start_sel="<b>", stop_sel="</b>")
)
class tortoise.contrib.postgres.search.SearchVector(*expressions, config=None, weight=None)[source]
class tortoise.contrib.postgres.search.SearchQuery(value, config=None, search_type='plain', invert=False)[source]
class tortoise.contrib.postgres.search.SearchRank(vector, query, weights=None, normalization=None, cover_density=False)[source]
class tortoise.contrib.postgres.search.SearchHeadline(expression, query, config=None, start_sel=None, stop_sel=None, max_words=None, min_words=None, short_word=None, highlight_all=None, max_fragments=None, fragment_delimiter=None)[source]
class tortoise.contrib.postgres.search.Lexeme(value, invert=False, prefix=False, weight=None)[source]
class tortoise.contrib.postgres.search.SearchCriterion(field, expr, vectorize=True)[source]