gpt4 book ai didi

postgresql - 包含 tsvector 字段的可能原因?

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

我(重新)对 tsvector 字段感到困惑。将文本连接到一个 tsvector 字段,然后进行索引的示例非常很常见。如果您查找 PG 12 生成的列,您会发现示例显示 tsvector 字段填充 quickly .

既然这个字段的唯一目的就是支持索引,为什么不用表达式建索引,跳过vector列呢?我以前顺便问过这个问题(找不到),记得听到回复“该专栏毫无意义”。这对我来说很有意义。最近,我一直在关注这篇文章的一些评论:

Fine Tuning Full Text Search with PostgreSQL 12

顺便说一句,这篇文章非常好。有这样的评论:

One reason to materialize tsvector is not to evaluate expression at recheck, which could be quite expensive itself.

Check ‘Recheck Cond’ in explain analyze, the condition could be really checked, hence the condition (to_tsvector) will be calculated.

\d t1
Table “public.t1”
Column | Type | Collation | Nullable | Default
--–----+---------+----------–+----------+---
id | integer | | |
t | text | | |
Indexes:
"t1_to_tsvector_idx" gin (to_tsvector('english'::regconfig, t))

explain analyze select * from t1 where to_tsvector(‘english’, t) @@ to_tsquery(‘english’,’foo’);
QUERY PLAN

Bitmap Heap Scan on t1 (cost=8.05..19.02 rows=6 width=36) (actual time=0.019..0.019 rows=0 loops=1)
Recheck Cond: (to_tsvector(‘english’::regconfig, t) @@ ”’foo”’::tsquery)
-> Bitmap Index Scan on t1_to_tsvector_idx (cost=0.00..8.05 rows=6 width=0) (actual time=0.017..0.017 rows=0 loops=1)
Index Cond: (to_tsvector(‘english’::regconfig, t) @@ ”’foo”’::tsquery)
Planning Time: 0.076 ms
Execution Time: 0.051 ms
(6 rows)

我很困惑。是否有将向量存储在行中的好案例?我对 Postgres 的这一部分不够流利,无法构建令人满意的测试。我仍在研究 Postgres 中的 FTS 和模糊比较选项,但需要在下个季度构建一些实质性的东西,这就是为什么我渴望提前获得正确的细节。现在 3500 万行,增长迅速。

最佳答案

当您问及包含 tsvector 字段的可能原因时,我认为如果您必须从其他表的列中放入 tsvector 文本,这是肯定的。

如果你有一个博客文章表,你想对标题、内容和相关标签名称执行全文搜索,但标签是一个单独的表,你不能,不幸的是,在索引中使用生成的列或函数,但您必须更新您的 tsvector(使用触发器或类似工具),然后才能更新列上的索引。

我希望我给了你一个使用 tsvecor 字段的合理理由。

关于postgresql - 包含 tsvector 字段的可能原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58665794/

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