我想为以下查询添加全文搜索,该查询也有连接:
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,它也会对该订单号执行部分匹配吗?
正如另一条评论中提到的,创建一个触发器,用连接表中的数据填充 ts 列可能是最好的解决方案。我在此 sql-fiddle 中创建了一个小示例:https://www.db-fiddle.com/f/cvYHnv6RNgvZNsSfqEtkjf/10(为了简单起见,ts_data 列保留为文本)
将其扩展为包含制造商表中的数据应该很容易。