concat两个postgresql tsvector字段,从单独的表开始,进入单个postgresql视图,以启用加入的全文搜索

Dav*_*son 7 sql postgresql full-text-search concatenation tsvector

我有一个postgresql视图,它包含3个表的组合:

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;
Run Code Online (Sandbox Code Playgroud)

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

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

我正在寻找将两个tsvector字段从单独的表连接到一个视图中的示例代码,并且还评论这是在postgresql中是一个好的还是坏的做法.

Fir*_*gon 1

我想知道同样的事情。我认为我们不应该像这样组合来自多个表的 tsvector。最好的解决办法是:

  1. 在每个表(用户、评估者、连接器)中创建一个新的 tsv 列
  2. 使用您要搜索的所有文本更新每个表中的新 tsv 列。例如,在用户表中,您将更新连接first_name和last_name列的所有记录的tsv列。
  3. 在新的 tsv 列上创建索引,这比在各个列上建立索引要快
  4. 像往常一样运行查询,并让 Postgres 来“思考”要使用哪些索引。它可能会也可能不会在涉及多个表的查询中使用所有索引。
  5. 使用 ANALYZE 和 EXPLAIN 命令来查看 Postgres 如何利用新索引进行特定查询,这将使您深入了解进一步加快速度。

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