1

很难找到关于这个ts_vector东西的信息,但是为了加快地址搜索的速度,地址列上的简单索引并不能真正给出令人满意的结果。

为了规避这个限制,我尝试使用ts_vector以下查询:

alter table mytable add tsv ts_vector;

update mytable set tsv = to_tsvector(address);

我对这个ts_vector列非常不熟悉,但是如果我创建一个 btree 索引(或任何其他索引)而不是查询地址列来查询列,它会加快速度ts_vector吗?

4

2 回答 2

2

是的,但它必须是 GIN 索引:

CREATE INDEX ON mytable USING gin (tsv);

您不需要添加额外的列,您还可以执行以下操作:

CREATE INDEX ON mytable USING gin (to_tsvector('english', address));

这样的索引可以与@@运算符一起使用。

于 2018-10-30T15:05:00.357 回答
0

postgreSQL 文档似乎表明使用单独的 tsvector 列确实更快:

与表达式索引相比,分离列方法的一个优点是无需在查询中显式指定文本搜索配置即可使用索引。如上例所示,查询可以依赖于 default_text_search_config。另一个优点是搜索会更快,因为不需要重做 to_tsvector 调用来验证索引匹配。然而,表达式索引方法设置起来更简单,并且它需要更少的磁盘空间,因为 tsvector 表示没有显式存储。

来源:https ://www.postgresql.org/docs/current/textsearch-tables.html

于 2021-12-10T23:54:05.400 回答