这可能是一个非常简单的问题,所以提前道歉,但我对数据库的使用还很陌生。
我想让 Postgres 在多个连接的表中运行全文搜索。想象一下类似模型 User 的东西,以及相关模型 UserProfile 和 UserInfo。搜索将仅针对用户,但会包括来自 UserProfile 和 UserInfo 的信息。
我计划使用 Gin 索引进行搜索。但是,我不清楚我是否需要在 User 表中有一个单独的 tsvector 列来保存来自各个表的聚合 tsvectors,并设置触发器以使其保持最新。或者,如果可以创建一个没有 tsvector 列的索引,只要任何相关表中的任何相关字段发生变化,它就会使自己保持最新。此外,对于创建所有这些命令的语法的任何提示,我们也将不胜感激。
最佳答案
您最好的答案可能是在每个表中有一个单独的 tsvector 列(当然有一个索引)。如果您将数据聚合到一个共享的 tsvector,那么每当单个数据更新时,就会在该共享的 tsvector 上创建大量更新。
每个表都需要一个索引。然后当你查询它时,显然你需要多个 WHERE 子句,每个字段一个。然后 PostgreSQL 将自动找出使用哪种索引组合来为您提供最快的结果——可能使用位图扫描。这会使您的查询编写起来稍微复杂一些(因为您需要多个列匹配子句),但这保持了在您需要的情况下仅查询某些字段的灵 active 。
您不能创建一个索引来跟踪多个表。为此,您需要单独的 tsvector 列和每个表上的触发器来更新它。
关于postgresql - 跨多个相关表的 Postgres 全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2225937/