3

我有一组文档,我想在 Postgres 9.1 中对其进行全文搜索,因此将它们添加为 tsvector 的内容,然后在此列上创建 GIN 索引似乎很简单。我对 GIN 索引的理解是,使用的键是(取决于使用的文本搜索配置)原始单词列表或原始文档集合中的标准化词位。但是,对于我们开发的其他功能,我真的很想从 GIN 索引中获取该键列表,以放入不同表中的另一列以供使用。这可能吗?

编辑:我已经在 pgsql-general mailing list 上重新发布了这个

4

1 回答 1

2

我假设您已根据文档创建了表达式索引,例如:

CREATE INDEX pgweb_idx ON pgweb USING gin(to_tsvector('english', body));

如果是这样,据我所知,您不能直接从索引中提取值,如:

SELECT to_tsvector('english', body) FROM pgweb;

即使强制(仅用于测试)使用set enable_seqscan = off. 这可能在 PostgreSQL 9.2 中使用仅索引扫描;我还没有升级我的机器,所以我不能说。

不过,您可以使用索引来加速其他查询,JOIN方法是使用索引数据对表进行 ing 并使用相同的表达式索引。

如果您打算将其tsvector用于其他用途,我建议您更改方法。向表中添加一个新的类型列tsvector。使用BEFORE INSERT OR UPDATE OR DELETE ... FOR EACH ROW触发器自动使tsvector列与被索引的列保持同步。然后在新的 tsvector 列上创建 GIN 索引。这样您就可以直接查询该列,而不是仅将其用作表达式索引。如果您进一步阅读我已经链接到上面的“创建索引”部分,您将看到有关如何执行此操作以及如何使用触发器自动更新 tsvector 列的说明。

于 2012-10-18T23:11:13.470 回答