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