AICon 上海站|90%日程已就绪,解锁Al未来! 了解详情
写点什么

Django 1.10 提供了 PostgreSQL 中的全文检索功能

  • 2016-08-11
  • 本文字数:1524 字

    阅读完需:约 5 分钟

Django 1.10 版本已经发布,该版本所给出的新特性包括:对 PostgreSQL 数据库的全文检索、Unicode 用户名的官方支持和新型的中间件。

作为 Django 软件基金会的动态语言,该 Django 的重大发布包括了在 django.contrib.postgres.search 模块中对数据库函数调用的功能,这方便了使用 PostgreSQL 的全文检索引擎。

Django 团队给出了例子代码,实现对数据库中某一行数据进行简单搜索。代码如下所示:

复制代码
>>> Entry.objects.filter(body_text__search='Cheese')
[<Entry: Cheese on Toast recipes>, <Entry: Pizza Recipes>]

“代码从数据库的 body_text 域调用一次 _to_tsvector_ 函数,并为检索词‘Cheese’调用一次 _plainto_tsquery_ 函数。这两次函数调用均使用缺省的数据库检索配置。检索结果通过对查询与向量的匹配而得到。为使用该检索查找功能,环境设置 INSTALLED_APPS 中必须包括’django.contrib.postgres’。”

在 Django 文档中,可以查阅到使用 SearchVector SearchQuery SearchRank 类的例子,详细内容参见这里

Django 1.10 版本的新特性还包括引入了一种新型的中间件,该中间件所解决的问题是,“在 DEP 0005 改进建议中提出的旧式中间件中缺乏严格意义上的请求和响应层的问题”。

作为一种“钩入 Django 请求及响应处理的架构”,Django 的新型中间件提供了 django.utils.deprecation.MiddlewareMixin 模块,用于创建与 MIDDLEWARE 和 MIDDLEWARE_CLASSES 兼容的中间件类。

按 Django 文档所述,“该混合类型模块提供了 ___init__()_ 方法,接受 _get_response_ 作为可选参数,并将该参数保存在 _self.get_response_ 中”。对此方法详解如下:

__call__() 方法:

  1. 调用 self.process_request(request) (如果已定义了);
  2. 调用 self.get_response(request),从后续的中间件和视图中获取响应;
  3. 调用 self.process_response(request, response) (如果已定义了);
  4. 返回响应。

在网络上关于 Django 最新发布的新闻得到了很多的肯定,但也一些评论提出了对 Channels 项目的需求。

在 HackerNew 网站对“Django 1.10 发布了”的讨论中,用户 Tom Forbes 是这样评论的:“Channels 项目真是可耻呀,我发现新版本中并没有包含这个项目”。而用户 ubernostrum 是这样回复的:“Channel 项目将会取得成功的。它只是尚未准备好在1.10 版本中发布。希望它会在1.11 版本中准备好,并将在Django 中启用。”

用户 passiveincomelg 给出了不太确定的说法:“我对Channel 的态度有些矛盾。一方面,使用它所能做的事情是很酷的,它的设计十分聪明地避免了重写所有Django 程序为异步的。另一方面,为实现这个Go 和Erlang 所轻易实现的功能,还有要去完成多少的恶作剧,这真是令人抓狂。”

Django 1.10 版还包括一些不向后兼容的改进。而也有一些特性在达到其弃用周期后,也已经被弃用

这些被弃用的特性包括:在LOGIN_URL 和LOGIN_REDIRECT_URL 中设置使用可带点的Python 路径;django.core.context_processors、django.db.models.sql.aggregates 和django.contrib.gis.db.models.sql.aggregates 等模块;为使用SQLCompiler 的quote_name_unless_alias 方法而支持用别名方式直接调用SQLCompiler;以及其它一些私有API。

作为一种用Python 编写的自由开源Web 应用框架,Django 以三句版BSD 协议发布,它欢迎来自InfoQ 社区的贡献。

任何寻求改进和对Django 有所贡献的人,可以访问 docs.djangoproject.com/en/dev/internals/contributing/ .

查看英文原文: Django 1.10 Brings Full Text Search for PostgreSQL


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-08-11 19:002258
用户头像

发布了 227 篇内容, 共 78.7 次阅读, 收获喜欢 28 次。

关注

评论

发布
暂无评论
发现更多内容

跟我读论文丨Multi-Model Text Recognition Network

华为云开发者联盟

人工智能 文字识别 语言模型 视觉特征

为Python打包创建一个世外桃源,解决打包太大且启动慢的问题

迷彩

pyinstaller 7月月更 Python打包

“万物互联,使能千行百业”,2022 开放原子全球开源峰会 OpenAtom OpenHarmony 分论坛即将开幕

kk-OSC

开源 开放原子全球开源峰会

学习java开发技术有用吗?

小谷哥

8个方法管理 GitHub 用户权限

SEAL安全

git GitHub 安全 软件安全 软件供应链安全

李宏毅《机器学习》丨5. Tips for neural network design(神经网络设计技巧)

AXYZdong

机器学习 7月月更

java程序员培训班怎么选?

小谷哥

传统企业的办公模式正在发生着变化,为什么企业需要数字化办公?

BeeWorks

这样优化Spring Boot,启动速度快到飞起!

艾小仙

Java 微服务 springboot Eureka 微服务治理

学习大数据技术之前做好这些准备

小谷哥

极客星球丨字节跳动一站式数据治理解决方案及平台架构

MobTech袤博科技

架构 运维 数据治理 全链路

学好Web前端开发能找到好工作吗

小谷哥

Review 后台管理系统实战:请求参数的 2 种封装风格

掘金安东尼

前端 编程范式 7月月更

经验分享|企业该怎样利用SaaS进行企业知识管理

Baklib

N分钟学会分位值的计算方式

眼镜盒子

指标

智能运维场景解析:如何通过异常检测发现业务系统状态异常

云智慧AIOps社区

人工智能 机器学习 异常检测 智能运维 状态管理

算法题每日一练---第4天:图像模糊问题

知心宝贝

算法 前端 后端 7月月更

如何快速开发一个简单实用的MES系统?

优秀

MES系统

鼓励企业知识共享的好处,你知道多少?

Geek_da0866

无套路、无陷阱、无广告 | 这个免费的即时通讯软件确定不用吗?

BeeWorks

大数据培训机构如何选择

小谷哥

【干货】知识共享的障碍及解决方法

Geek_da0866

行业洞察|如何更好地建设数据中台?IT和业务要“齐步走”

BeeWorks

活动报名:如何零基础快速上手开源的 Tapdata Live Data Platform?

tapdata

开源 开源社区 Tapdata 实时数据

接口文档进化图鉴,有些古早接口文档工具,你可能都没用过

Liam

Postman 接口文档 API swagger API文档

DistSQL 深度解析:打造动态化的分布式数据库

SphereEx

数据库 开源社区 ShardingSphere SphereEx #开源

阿里云技术专家郝晨栋:云上可观测能力——问题的发现与定位实践

阿里云弹性计算

DevOps 运维 可观测性

知识分享|分享一些提升企业文档管理水平的方法

Baklib

API策略因何成为企业数字化转型的制胜法宝?

BeeWorks

京东云分布式链路追踪在金融场景的最佳实践

京东科技开发者

数据库 分布式 京东云 云计算,

图的基本定义和概念(二)

乔乔

7月月更

Django 1.10提供了PostgreSQL中的全文检索功能_Python_James Chesters_InfoQ精选文章