Django Rest Framework上的全文搜索仅支持MYSQL?

Ami*_*t P 6 api django django-rest-framework

为什么Django Rest Framework只支持MYSQL后端的全文搜索,当有更强大的数据库像Postgres时,我读了这个并且感到惊讶:/

http://www.django-rest-framework.org/api-guide/filtering

"@'全文搜索.(目前只支持Django的MySQL后端.)"

知道这背后的具体原因吗?

Rem*_*eed 8

自@stalk回答后,情况发生了变化.从Django 1.10开始,Django Rest Framework也可以支持PostgreSQL.

并且由于django.contrib.postgres提供了与MySQL 相同的__search接口,您可以使用与MySQL相同的设置将API连接到Postgres:

事实上,听起来Django对MySQL的全文搜索支持已被弃用或至少在改变,根据@stalk原始答案中关于Django文档链接的弃用说明.该说明链接到以下说明,其中还包含用于替换它的示例代码:

不推荐使用仅支持MySQL且功能极为有限的搜索查找.将其替换为自定义查找...

我道歉,我没有足够的声誉发布额外的直接链接.


sta*_*alk 3

这是因为 django-rest-framework 使用 django 的__search.

从django-rest-framework master 中当前最新的提交来看:

def construct_search(self, field_name):
    if field_name.startswith('^'):
        return "%s__istartswith" % field_name[1:]
    elif field_name.startswith('='):
        return "%s__iexact" % field_name[1:]
    elif field_name.startswith('@'):
        return "%s__search" % field_name[1:]
    else:
        return "%s__icontains" % field_name
Run Code Online (Sandbox Code Playgroud)

django 文档讲述了__search(布尔全文搜索):

Note this is only available in MySQL and requires direct manipulation of the database 
to add the full-text index. By default Django uses BOOLEAN MODE for full text searches.
See the MySQL documentation for additional details.
Run Code Online (Sandbox Code Playgroud)