为什么Django Rest Framework只支持MYSQL后端的全文搜索,当有像Postgres这样的更强大的数据库时,我读到这个并且感到惊讶:/
http://www.django-rest-framework.org/api-guide/filtering
" @'全文检索。 (目前只支持Django的MySQL后端。)"
知道背后的具体原因吗?
答案 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.