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”。
- 它也可以是一个简单的字段列表,默认情况下会选择排名。如果字段为空,则索引将应用于所有字段CharField和TextField。
要搜索,请使用管理器的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数据库上安装此扩展,使此扩展对所有新创建的数据库自动可用。