在 django-filters 的 FilterSet 中使用全文搜索的最佳方式?

The best way to use full-text search in django-filters' FilterSet?

我的应用使用 rest-frameworkdjango-filter。我使用此 FilterSet 来提供 date:

文章 (ModelViewSet) 的过滤列表
from django_filters import rest_framework as filters

class ArticleFilter(filters.FilterSet):
    start_date = filters.DateTimeFilter(field_name='pub_date', lookup_expr='gte')
    end_date = filters.DateTimeFilter(field_name='pub_date', lookup_expr='lte') 

    class Meta:
        model = Article
        fields = ['pub_date']

我想在我的应用程序中添加搜索框,所以我需要另一个过滤器,它将在我的 Article 模型中使用全文搜索。我要搜索的字段是 titledescription。我决定添加带有 method 参数的 search 字段,如下所示:

from django_filters import rest_framework as filters
from django.contrib.postgres.search import SearchVector

class ArticleFilter(filters.FilterSet):
    start_date = filters.DateTimeFilter(field_name='pub_date', lookup_expr='gte')
    end_date = filters.DateTimeFilter(field_name='pub_date', lookup_expr='lte')
    search = filters.CharFilter(method='filter_search')

    def filter_search(self, queryset, name, value):
        return queryset.annotate(search=SearchVector('title', 'description')).filter(search=value)

    class Meta:
        model = Article
        fields = ['pub_date']

它有效,但我不确定它是否是使用全文搜索过滤的最佳方式。我是不是遗漏了什么或者这种方法可以吗?

这对于在小型数据库中没有太多文本可供查看的简单文本搜索来说是可以的。

当你进入更大的领域时,你需要为此优化你的数据库,或者转向专用的搜索引擎,如 Solr 或 ElasticSearch。 Postgres 有一个 section on full text searching, as does mysql.