我正在为公司的后台系统实施一种基本的搜索形式。我想在搜索查询中找到包含所有单词的所有产品名称。
所以,如果我有这两种产品:
Deodorant with cucumber flavor
Deoderant with apple flavor
搜索查询:cucumber deoderant
仅应与Deoderant with cucumber flavor
匹配。
我可以使它适用于查询deoderant cucumber
,如下所示:
SELECT product_name FROM products WHERE name ~* regexp_replace('deoderant cucumber', '\s+', '.*', 'g');
,但是当订单不是查询中的名称和产品名称时,此方法不起作用。
我知道可以通过做类似的事情
SELECT product_name FROM products WHERE name ~* 'deoderant' AND name ~* cucumber';
但是我最好还是不要使用字符串插值,因为它在当前环境中会变得有些混乱。
还有另一种更优雅的方法吗?
答案 0 :(得分:1)
您可以将值转换为数组,然后将"contains"运算符@>
与要查找的单词配合使用:
SELECT product_name
FROM products
WHERE regexp_split_to_array(lower(name), '\s+') @> array['deodorant', 'cucumber'];