这可能是一个非常简单的问题,所以提前道歉,但我对数据库的使用非常陌生。
我想让Postgres在多个连接表之间运行全文搜索。想象一个模型用户,有相关的模型UserProfile和UserInfo。搜索将只针对用户,但将包括来自UserProfile和UserInfo的信息。
我打算用杜松子酒索引来搜索。不过,我还不清楚是否需要在用户表中使用单独的tsvector列来保存跨表聚合的tsvector,以及设置触发器以使其保持最新。或者,如果可以创建一个不带tsvector列的索引,该索引将在任何相关表中的任何相关字段发生更改时保持自身的最新状态。此外,关于创建所有这些命令的语法的任何提示也将非常受欢迎。
最佳答案
最好的答案可能是在每个表中都有一个单独的tsvector列(当然,还有一个索引)。如果将数据聚合到一个共享的tsvector,那么每当每个共享的tsvector更新时,都会在这个共享的tsvector上创建很多更新。
每个表需要一个索引。然后当您查询它时,显然您需要多个WHERE子句,每个字段一个。PostgreSQL随后会自动找出要使用哪种索引组合来提供最快的结果-可能是使用位图扫描。它会使您的查询更复杂一些(因为您需要多个列匹配子句),但这样做只能保持查询所需情况下的某些字段的灵活性。
不能创建一个跟踪多个表的索引。为此,需要在每个表上使用单独的tsvector列和触发器来更新它。