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¶
Search¶
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]¶