postgresql - 跨多个相关表的 Postgres 全文搜索

标签 postgresql full-text-search multiple-tables tsvector

这可能是一个非常简单的问题,所以提前道歉,但我对数据库的使用还很陌生。

我想让 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/

相关文章:

sql-server - 是否可以将全文搜索 (FTS) 与 LINQ 结合使用?

sql - 我应该使用平面表还是规范化数据库?

.net - 多个oracle查询问题

sql - 将列值转换为根据行计算出现次数的列

python - 在 Python 中使用 Postgres 的 COPY FROM 文件查询而不写入临时文件

mysql - 这个MYSQL可以优化吗?

mysql - 当数据可用时从 view1、view2 中选择(JOIN?)

sql - 是否可以在 Golang 的帮助下创建具有动态名称的 PostgreSQL 数据库?

PostgreSQL:从 MAX(the_column)+1 处开始一个序列

sqlite - 使用 Sqlite 设计基于标签的数据表的最佳方法是什么?