postgres:在字符串中搜索多个单词

时间:2019-07-09 14:35:59

标签: postgresql

我正在为公司的后台系统实施一种基本的搜索形式。我想在搜索查询中找到包含所有单词的所有产品名称。

所以,如果我有这两种产品:

  • 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';

但是我最好还是不要使用字符串插值,因为它在当前环境中会变得有些混乱。

还有另一种更优雅的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以将值转换为数组,然后将"contains"运算符@>与要查找的单词配合使用:

SELECT product_name 
FROM products 
WHERE regexp_split_to_array(lower(name), '\s+') @> array['deodorant', 'cucumber'];

在线示例:https://rextester.com/GNL7374