我有一个包含3个表的组合的postgresql View :

create view search_view as
select u.first_name, u.last_name, a.notes, a.summary, a.search_index
from user as u, assessor as a, connector as c
where a.connector_id = c.id and c.user_id = u.id;

但是,我需要将3个表中的2个的tsvector字段连接到 View 中的单个tsvector字段中,该 View 可跨4个字段提供全文搜索:2个来自一个表,2个来自另一个表。

我已经阅读了说明可以使用concat运算符组合两个tsvector字段的文档,但是我不确定这在语法上看起来是什么样,以及该实现是否存在潜在问题。

我正在寻找示例代码,这些代码将来自单独表的两个tsvector字段合并为一个 View ,并且还说明了这在Postgresql领域中是好是坏。

最佳答案

我想知道同样的事情。我不认为我们应该像这样从多个表中组合tsvector。最好的解决方案是:

  • 在每个表(用户,评估者,连接器)中创建一个新的tsv列
  • 使用要搜索的所有文本更新每个表中的新tsv列。例如,在用户表中,您将更新所有将first_name和last_name列连接在一起的记录的tsv列。
  • 在新的tsv列上创建索引,这比在单个列上建立索引
  • 更快
  • 照常运行查询,让Postgres对要使用的索引进行“思考”。它可能会或可能不会在涉及多个表的查询中使用所有索引。
  • 使用ANALYZE和EXPLAIN命令查看Postgres如何将新索引用于特定查询,这将使您深入了解如何进一步加快处理速度。

  • 至少这是我的方法。我已经进行了大量的阅读,发现人们并没有将多个表中的数据合并到tsvector中。实际上,我认为这是不可能的,创建tsvector时只能使用当前表的列。

    关于sql - 将源自不同表的两个postgresql tsvector字段连接到单个postgresql View 中,以启用合并的全文本搜索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22639883/

    10-11 06:57