我们想使用PostgreSQL来存储文档。由于其中一些可能高达2 GB,我们必须使用lob-Datatype,其中大对象存储在单独的表(pg_largeobject
)中,由OID引用,根据{{3 }}
对我们来说,搜索这些文档(.pdf
,.doc
,...)非常重要。可以搜索docs on large objects表和列,但是也可以搜索pg_largeobject
表中的大对象吗?
如果没有,我们必须使用Oracle。
答案 0 :(得分:3)
这里至少有两个问题。
答案 1 :(得分:1)
在PostgreSQL中,全文搜索主要基于一个非常重要的函数to_tsvector()
。
此函数将文本文档转换为tsvector
数据类型。通常,tsvector
物理尺寸约为原始文本的1%。
所有其他文本搜索方法都基于在计算或物理tsvector
值之上创建索引。考虑到这一点,您可以在任何地方(甚至在客户端上)计算必要的tsvector
值,并将其保存在专门创建的列中以用于索引目的。换句话说,您实际上不必将原始文本存储在数据库中 - tsvector
就是您需要告诉哪个文档包含您要搜索的文本(但它不会告诉您单个文档中的位置) 。
这有什么好处的,索引文档可以是任何东西 - 甚至Word,Excel,PDF等等,只要你能获得该文档的文本内容并计算要存储和索引的必要tsvector
。
重新计算tsvector
的一个小缺点(特别是在客户端)是每次更改原始文档时都必须重新计算它。