我有一个包含 10 列的表,我需要对其中 6 列实现部分搜索功能。
例如,如果用户输入“bro”,它应该返回 6 列之一中包含“bro”的所有行(例如“[email protected]”)。
我知道我可以在所有这 6 列上使用 LIKE 来实现此目的,但我想了解这是否是解决此问题的首选方法。
我也知道我可以使用 ts 向量,但是我将搜索的 6 列是具有一个单词值的列,所以我不确定它对于特别是部分搜索而不是全文搜索有多大帮助。
简而言之,我的问题是,在表的多列上进行部分文本搜索的常见且有效的方法是什么?
您可以使用列串联来解决此问题。用空格分隔它们,因为它们是单个单词,这根本不会影响数据。
然后使用正则表达式模式匹配来查找单词,这里是您可以与“bro”示例一起使用的代码
SELECT *
FROM my_table
WHERE CONCAT_WS(' ', col1, col2, col3, col4, col5, col6) ~ '\mbro';
如果任何列包含“broom”或“thebrobeans”等单词,这将返回该行
要匹配独立单词,您可以使用“\mbro”而不是“\mbro”