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 JPanel不会对键绑定做出反应   当时间大于零时,不得在UI线程上调用java Await   JTextArea的java线程安全。追加   Java用户输入的字和行计数器   java以spreedsheat格式将数据保存到文件中   java构造函数的意义是什么?   java findViewById返回null,尽管组件的ID存在   java如何向按钮添加图像   java如何中断ExecutorService的线程   java如何将属性(例如枚举)绑定到不同类型的组件属性(例如每个枚举的映像)?   随机森林分类器的java实现   html使用java连接到一个站点并发布,HTTP状态代码200   从类访问属性时发生java编译错误   Java自动填充ArrayList,搜索更好的选项