postgres全文搜索有JOINS的查询,有哪些技术可以解决这类查询?

问题描述 投票:0回答:1

我想为以下查询添加全文搜索,该查询也有连接:

select p.id, p.sku, p.name, ..., l.name, m.name
from products p
    join locations l on l.id = p.id
    join manufactures m on m.id = p.id
where ...   

我正在创建一个列,它将包含我需要索引的列的串联:

ALTER TABLE products
ADD COLUMN products_ts tsvector
GENERATED ALWAYS AS (to_tsvector('english', coalesce(col1, '') || ' ' coalesce(col2, '') )) STORED;

我在上面的列上创建了一个GIN索引:

CREATE INDEX idx_products_search_ts ON products USING GIN(products_ts);

我有一个表格,需要在 15 列中搜索,这些列可以是文本或数字(如订单号)。

john doe
11223344

我的查询需要连接到位置和制造商表,我希望人们能够搜索 基于产品属性以及位置名称或制造商名称。

有哪些技术/策略可以以某种方式对 JOIN 表中的全文索引列?

上述索引可以处理文本搜索和数字搜索吗? 例如有人搜索订单#100039393,它也会对该订单号执行部分匹配吗?

postgresql full-text-search
1个回答
0
投票

正如另一条评论中提到的,创建一个触发器,用连接表中的数据填充 ts 列可能是最好的解决方案。我在此 sql-fiddle 中创建了一个小示例:https://www.db-fiddle.com/f/cvYHnv6RNgvZNsSfqEtkjf/10(为了简单起见,ts_data 列保留为文本)

将其扩展为包含制造商表中的数据应该很容易。

© www.soinside.com 2019 - 2024. All rights reserved.