PostgreSQL全文搜索与Django ORM集成。

djorm-ext-pgfulltext的Python项目详细描述


django orm扩展包的pgfulltext模块(在一个统一包中构建的第三方插件集合)。

  • 现在与python2和python3兼容,代码基础相同。
  • 准备好Django 1.3、1.4、1.5和1.6

简介

全文搜索(或仅文本搜索)提供了识别满足查询的自然语言文档的功能,并可以根据与查询的相关性对其进行排序。最常见的搜索类型是查找包含给定查询项的所有文档,并按与查询相似的顺序返回这些文档。查询和相似性的概念非常灵活,依赖于特定的应用。最简单的搜索将查询视为一组词,将相似性视为文档中查询词的频率。(来自PostgreSQL文档。

课程

djorm_pgfulltext.fields.vectorfield
将转换后的文本存储为特殊格式的tsvector索引字段。
djorm_pgfulltext.models.searchmanager
django管理器,包含用于搜索和重新生成索引的帮助方法。

如何使用

要使用它,您需要添加一个新字段。显然,这不是必需的,因为它可以指定在调用搜索时要搜索的字段。请记住,您应该为要使用的字段设置相应的索引。

fromdjorm_pgfulltext.modelsimportSearchManagerfromdjorm_pgfulltext.fieldsimportVectorFieldfromdjango.dbimportmodelsclassPage(models.Model):name=models.CharField(max_length=200)description=models.TextField()search_index=VectorField()objects=SearchManager(fields=('name','description'),config='pg_catalog.english',# this is defaultsearch_field='search_index',# this is defaultauto_update_search_field=True)

管理器自动将update_search_field方法注入模型实例。 另外,不重写save方法,您可以传递参数auto_update_search_field = True,因此 索引字段通过调用save方法自动更新。

用法示例:

  • config参数是可选的,默认为“pg_catalog.english”。
  • fields参数是可选的。如果是元组列表,则可以指定每个字段的排名,如果不是,则默认为“d”。
  • 它也可以是一个简单的字段列表,默认情况下会选择排名。如果字段为空,则索引将应用于所有字段CharFieldTextField

要搜索,请使用管理器的search方法。默认情况下,当前实现使用uncent扩展忽略重音。而且,搜索不区分大小写。

>>>Page.objects.search("documentation & about")[<Page:Page:Homepage>]>>>Page.objects.search("about | documentation | django | home",raw=True)[<Page:Page:Homepage>,<Page:Page:About>,<Page:Page:Navigation>]

默认情况下,fts扩展使用plainto-tsquery而不是to-tosquery,因此使用原始参数。

一般说明:

您必须确保已安装分机uncent

CREATEEXTENSIONunaccent;ALTERFUNCTIONunaccent(text)IMMUTABLE;

您可以在template1数据库上安装此扩展,使此扩展对所有新创建的数据库自动可用。

更改日志

0.9

  • 修复django 1.6兼容性(事务管理)。
Bitdeli badge

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Clojure关键字在内存中的大小是多少?   Java中有固定长度的通用数组对象吗?   PostgreSQL:通过Java更新我的用户表   错误:使用java解析xml   java Json显示列表中对象的名称   java比较JodaTime时区   与JAVA中的API和包的区别?   java的int值在for循环中不改变   谷歌应用引擎中的java RSA   迁移到spring 5后出现java非法字符错误   java Websphere管理控制台不工作   JavaGSON如何始终在json中包含毫秒?   带有空格和双引号的windows Java ProcessBuilder命令参数失败   java错误:重复的zip条目[43.jar:org/apache/http/annotation/NotThreadSafe.class]