PostgreSQL全文搜索与django orm的集成。
项目描述
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管理器。
如何使用它
要使用它,您需要添加一个新字段。显然,这不是强制的,因为它可以在调用 search 时指定您想要搜索的字段。请注意,您应该为要使用的字段放置相应的索引。
from djorm_pgfulltext.models import SearchManager
from djorm_pgfulltext.fields import VectorField
from django.db import models
class Page(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 default
search_field = 'search_index', # this is default
auto_update_search_field = True
)
管理器自动将 update_search_field 方法注入到模型实例。另外,为了避免覆盖保存方法,您可以传递参数 auto_update_search_field = True,这样在调用 save 方法时,索引字段将自动更新。
使用示例
配置参数是可选的,默认为‘pg_catalog.english’。
字段参数是可选的。如果是一个元组的列表,您可以指定每个字段的排名,如果它是 None,则默认为‘D’。
它也可以是一个简单的字段列表,排名将默认选择。如果字段为空,则索引应用于所有字段 CharField 和 TextField。
要搜索,请使用管理器的 search 方法。当前实现默认使用无重音扩展来忽略重音。此外,搜索不区分大小写。
>>> Page.objects.search("documentation & about")
[<Page: Page: Home page>]
>>> Page.objects.search("about | documentation | django | home", raw=True)
[<Page: Page: Home page>, <Page: Page: About>, <Page: Page: Navigation>]
默认情况下,FTS扩展使用 plainto_tsquery 而不是 to_tosquery,因此使用 raw 参数。
一般注意事项
您必须确保已安装扩展 unaccent
CREATE EXTENSION unaccent;
ALTER FUNCTION unaccent(text) IMMUTABLE;
您可以在 template1 数据库上安装此扩展,以便该扩展自动对所有新创建的数据库可用。
变更日志
0.9
修复 django 1.6 兼容性(事务管理)。
项目详情
djorm-ext-pgfulltext-0.10.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 12d074563c8a8a043c139ef12fbbb3bf28467e5c8d9f7e8831841dfe14c88e24 |
|
MD5 | 489d80a6d4278697728602707822cbe9 |
|
BLAKE2b-256 | daaa0fbf154a70812558fa9ad81e46d851211756cc983cc378c9fdb445f602c0 |