我有一个文档集合,我想在Postgres 9.1中进行一些全文搜索,因此将它们添加为tsSvector的内容,然后创建杜松子酒索引在这一列上似乎很简单。我对杜松子酒索引的理解是,所使用的密钥是(取决于所使用的文本搜索配置)原始单词列表或其从原始文档集合中的标准化Lexemes。但是,对于其他功能,我们非常想从杜松子酒索引中获取该键列表,以在其他表中放入另一列以供使用。这可能吗?
编辑:我已经在PGSQL-将军邮件列表中重新启动了。
我假设您已经根据文档创建了一个表达式索引,例如:
CREATE INDEX pgweb_idx ON pgweb USING gin(to_tsvector('english', body));
如果是这样,据我所知,您不能直接从索引中提取值,为:
SELECT to_tsvector('english', body) FROM pgweb;
即使使用set enable_seqscan = off
强制(仅用于测试),似乎也无法使用该索引。这可能在Gostgresql 9.2中起作用,并进行仅索引扫描;我还没有升级我的机器,所以我不能说。
您可以使用索引通过使用索引数据在表上的JOIN
来加快其他查询,但是使用相同的表达式索引。
如果您打算将tsvector
用于其他方法,我建议您更改您的方法。将tsvector
类型的新列添加到您的表格中。使用BEFORE INSERT OR UPDATE OR DELETE ... FOR EACH ROW
触发器自动将tsvector
列保持最新,并在列索引列。然后在新的TSVector列上创建杜松子酒索引。这样,您可以直接查询列,而不仅仅是将其用作表达式索引。如果您在我已经链接到上面已链接的"创建索引"部分下方阅读,您将看到有关如何执行此操作以及如何使用触发器自动更新TSSVECTOR列的说明。