我有一个包含文本字段的表格,我需要高效的全文搜索。我发现了一些技术,我想通过基于文本字段创建额外的ts_vector字段来扩展模式更好,或者我可以保存我的模式并以这种方式创建索引:
CREATE INDEX pgweb_idx ON pgweb USING GIN (to_tsvector('english', title || ' ' || body));
效率意义上有什么不同吗?
答案 0 :(得分:2)
这两种策略都有效。如果您只有索引,则需要确保查询使用where
子句中的完全相同表达式作为索引中的表达式,否则将不使用索引。例如。 where ts_vector('english', title) ....
不会使用该索引。
带有ts_vector()的计算列将需要自动更新触发器,因为Postgres尚未(仍)具有持久计算列。所以索引"只有"解决方案可能会更快,因为它消除了触发器的开销。