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