基于PostgreSQL 8.4+的repoze.catalog文本索引
项目描述
repoze.pgtextindex是一个用于repoze.catalog的索引插件,它提供基于PostgreSQL 8.4及更高版本的强大文本索引功能的文本搜索引擎。它旨在取代任何基于zope.index的文本搜索索引。安装通常不需要对已使用repoze.catalog的代码进行任何或少量更改。
repoze.pgtextindex相对于zope.index.text的优点包括
性能。对于大型数据集,repoze.pgtextindex 的速度可以比 zope.index 快几个数量级,主要是因为 repoze.pgtextindex 没有像 zope.index 那样反序列化对象的额外开销。
较低的内存消耗。使用 zope.index 的用户通过在内存中保持大量未序列化对象的大缓存来处理反序列化的开销。更糟糕的是,每个线程都保留自己的对象缓存副本。另一方面,PostgreSQL 不需要在内存中维护复杂的结构。PostgreSQL 进程的大小通常是恒定且合理的。
维护。PostgreSQL 的文本索引功能有很好的文档记录,并且得到了大量的积极维护,而 zope.index 多年来并没有得到很多开发者的关注。
repoze.pgtextindex 不会导致 PostgreSQL 参与每个目录查询和更新。只有使用或更改文本索引的操作才会击中 PostgreSQL。
使用
repoze.pgtextindex 的使用方法与 repoze.catalog 中的任何其他索引一样。
from repoze.pgtextindex import PGTextIndex index = PGTextIndex( discriminator, dsn, table='pgtextindex', ts_config='english', drop_and_create=False, maxlen=1048575)
构造函数的参数如下
- discriminator
此索引的 repoze.catalog 判别器。有关判别器的更多信息,请参阅repoze.catalog 文档。此参数是必需的。
- dsn
连接到 PostgreSQL 的连接字符串。此参数是必需的。
- table
用于索引的表。默认是 'pgtextindex'。
- ts_config
用于索引的 PostgreSQL 文本搜索配置。默认是 'english',这是 PostgreSQL 内置的默认配置。有关文本搜索配置的更多信息,请参阅PostgreSQL 全文搜索文档。
- drop_and_create
如果为 True,则将删除(如果存在)并(重新)创建使用的表和索引。默认是 False。
- maxlen
每个文档要索引的最大字符数。默认是 1048575(2**20 - 1),这是 to_tsvector 函数允许的最大值。减小此值可以提高查询速度,因为 ts_rank_cd 函数在查询时检索和解压缩整个 TOAST 元组。
1.4 (2015-06-20)
WeightedQueries 现在可以作为查询结果缓存使用,这使得在仅击中文本索引一次的情况下多次搜索目录成为可能。
当查询生成大量结果时,pgtextindex 现在将禁用该查询的昂贵文本排名。max_ranked 属性控制禁用排名的阈值。默认 max_ranked 值为 6000。
通过使用 BTree 代替 Bucket 以及使用 cursor.fetchall() 代替 iter(cursor) 来提高速度。
1.3 (2014-09-03)
将 'marker' 列更改为数组,并将 'IWeightedQuery' 的 'marker' 属性更改为接受单个标记字符串或标记字符串序列。由于数据库模式已更改,因此需要为使用旧版本代码创建的任何索引运行 'PGTextIndex.upgrade()'。 (LP #1353483)
1.2 (2012-10-09)
通过复制查询参数而不是连接查询来提高约 10% 的查询速度。
添加了 maxlen 选项,允许可配置的文档大小限制。
1.1 (2012-09-06)
干净地处理并发索引更新。
1.0 (2012-09-01)
在 IntegrityError 上重试,以避免无意义的错误。
使用 perfmetrics 包添加了指标。
0.5 (2012-04-27)
切换到读取提交隔离级别并删除了显式锁定。显式锁定正在降低写入性能,并且可能干扰自动清理。此更改提高了暂时不一致的概率,但由于此包本身就没有提供 ACID 兼容性,因此开发者已经需要准备暂时不一致的情况。
0.4 (2011-11-18)
将文本截断至每份文档1MB,以保持在PostgreSQL强加的(愚蠢的)限制之下。
0.3 (2011-06-30)
修复了当查询字符串包含反斜杠字符时出现的PostgreSQL编程错误。(LP #798725)
添加了标记内容的能力,这些标记可以在查询时用作判别器。(LP #792334)
支持搜索包含撇号的单词。(LP #801265)
0.2 (2011-06-15)
重新设计了评分方法:添加了每份文档的评分系数。评分系数可以提升已知可信文档的评分。
添加了IWeightedText接口。判别器函数可以返回一个IWeightedText实例来控制权重和系数。
添加了IWeightedQuery接口。文本索引查询可以传递一个IWeightedQuery实例来控制权重值。
允许持久化对象被索引,因为通常的反对意见(意外的ZODB引用)不适用。
默认不删除和创建表,使PGTextIndex更容易在ZODB之外使用。
向索引添加了“get_contextual_summaries”和“get_contextual_summary”方法。
兼容repoze.catalog 0.8.0。
0.1 (2011-01-20)
初始版本。
项目详情
repoze.pgtextindex-1.4.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7b12c923197ed211a0d70b3153e7ff37cd0c3633fafb23edfcf58494d4b187c7 |
|
MD5 | 9135c89fa26a31126263b6ffaf0ee863 |
|
BLAKE2b-256 | 44898975cf4ee466aeca5a29c3ada5591d8c1b3071d26315d97e7efa8de30ec5 |