gpt4 book ai didi

postgresql - 从 Postgres 9.1 中的 tsvector 列上的 GIN 索引检索键

转载 作者:行者123 更新时间:2023-11-29 11:48:34 26 4
gpt4 key购买 nike

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

编辑:我已经 re-posted this on the pgsql-general mailing list .

最佳答案

我假设您已经创建了一个表达式索引 as per the documentation ,比如:

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并使用相同的表达式索引。

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

关于postgresql - 从 Postgres 9.1 中的 tsvector 列上的 GIN 索引检索键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12961459/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com