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

时间:2014-10-14 09:18:55

标签: django api django-rest-framework

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

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

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

知道背后的具体原因吗?

2 个答案:

答案 0 :(得分:8)

自@stalk回答后,情况发生了变化。 As of Django 1.10,Django Rest Framework也可以支持PostgreSQL。

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

  • django.contrib.postgres添加到您的INSTALLED_APPS
  • 在您的视图中,使用@符号标记全文搜索字段:

    search_fields = ('@title', '@description')
    

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

  

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

我道歉,我没有足够的声誉发布其他直接链接。

答案 1 :(得分:3)

这是因为django-rest-framework使用django' s __search

来自django-rest-framework大师的当前最新提交:

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

django docs讲述__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.