Делать это с помощью регулярных запросов к фильтру и icontains
не рекомендуется, поскольку это довольно быстро становится неэффективным - вы, конечно, не хотите делать это с несколькими большими текстовыми полями.
Однако PostgreSQL поставляется с полнотекстовой поисковой системой , которая предназначена именно для этой цели.Django обеспечивает поддержку для этого .
. Вы можете определить SearchVector
для выполнения полнотекстового поиска сразу по нескольким полям, например:
from django.contrib.postgres.search import SearchVector
MyModel.objects.annotate(
search=SearchVector('field_1') + SearchVector('field_2'),
).filter(search='search_query')
Документация, на которую я ссылался, содержит много дополнительной информации о том, как выполнять ранжирование и т. Д. В результатах поиска.
Другой альтернативой является использование поисковой системы, такой как Elasticsearch - необходимость этого зависит отот того, сколько объектов у вас есть и какую фильтрацию и ранжирование вам нужно выполнить по результатам.