Postgres 在多列中搜索任何单词

问题描述 投票:0回答:1

我有一个包含 10 列的表,我需要对其中 6 列实现部分搜索功能。

例如,如果用户输入“bro”,它应该返回 6 列之一中包含“bro”的所有行(例如“[email protected]”)。

我知道我可以在所有这 6 列上使用 LIKE 来实现此目的,但我想了解这是否是解决此问题的首选方法。

我也知道我可以使用 ts 向量,但是我将搜索的 6 列是具有一个单词值的列,所以我不确定它对于特别是部分搜索而不是全文搜索有多大帮助。

简而言之,我的问题是,在表的多列上进行部分文本搜索的常见且有效的方法是什么?

postgresql search
1个回答
0
投票

您可以使用列串联来解决此问题。用空格分隔它们,因为它们是单个单词,这根本不会影响数据。

然后使用正则表达式模式匹配来查找单词,这里是您可以与“bro”示例一起使用的代码

SELECT *
FROM my_table
WHERE CONCAT_WS(' ', col1, col2, col3, col4, col5, col6) ~ '\mbro';

如果任何列包含“broom”或“thebrobeans”等单词,这将返回该行

要匹配独立单词,您可以使用“\mbro”而不是“\mbro”

© www.soinside.com 2019 - 2024. All rights reserved.