【发布时间】:2020-11-27 16:25:43
【问题描述】:
我有一个brands 表和一个products 表,其架构如下:
brands (
brandId SERIAL PRIMARY KEY,
name VARCHAR (50) NOT NULL,
slug VARCHAR (50) NOT NULL,
);
products (
productId SERIAL PRIMARY KEY,
title VARCHAR(250) NOT NULL,
product_desc TEXT,
brandId BIGINT REFERENCES brands(brandId)
);
我在这里有一个幼稚的搜索实现,它有点工作,但在搜索方面不是很好。
SELECT productid, products.brandid, products.title FROM brands
JOIN products ON products.brandid = brands.brandid
WHERE LOWER(brands.slug) LIKE LOWER('%_search_query_here%')
OR LOWER(brands.name) LIKE LOWER('%_search_query_here%')
OR LOWER(title) LIKE LOWER('_search_query_here')
OR LOWER(product_desc) LIKE LOWER('_search_query_here');
我尝试在 Postgres 中实现全文搜索,但我不确定如何包含跨多个表的结果搜索,如下所示。我正在尝试获取用户的 searchQuery 并返回产品描述、标题中包含 searcQuery 的任何产品,或者如果 searchQuery 提到特定品牌,然后在这种情况下,返回该品牌的产品。
我试过了,我知道我必须使用 tsvector,但还没有。
CREATE MATERIALIZED VIEW search2
AS
SELECT b.brandid, to_tsvector(concat_ws(' ',p.productid, p.brandid, p.title, p.product_desc)) AS tsv
FROM brands AS b
INNER JOIN products AS p ON p.brandid = b.brandid;
SELECT * FROM search2 WHERE tsv @@ plainto_tsquery('oogle');
我想问是否有关于跨表加入全文搜索查询的建议?
【问题讨论】:
标签: postgresql