Полнотекстовый поиск стандартными средствами Postgres
Туториал по полнотекстовому поиску в Django с Postgres
Для того чтобы организовать полнотекстовый поиск на сайте можно воспользоваться стандартными средствами Postgtrs
from django.contrib.postgres.search import (SearchVector, SearchQuery, SearchHeadline)
# ...
def get_queryset(self):
query = self.request.GET.get("q")
search_query = SearchQuery(query, config='russian')
search_vector = SearchVector("name", "quote", config='russian')
search_headline = SearchHeadline("quote", search_query, highlight_all=True, config='russian')
result = Quote.objects.annotate(
search_rus=search_vector,
headline=search_headline
).filter(search_rus=search_query)
return result
# ...
Для ускорения процесса поиска можно не аннотировать каждый раз вектор для поиска, а генерировать значение этого вектора при изменении записи в специальное поле (например можно создать сигнал на изменение модели), и уже в последствии искать по этому полю.