我有一个简单的postgres表,其中包含一个注释(文本)列。 在视图中,我需要在注释字段中搜索单词列表,然后返回以逗号分隔的单词列表(以及一堆普通列)。
定义的关键字列表包含大约20个单词。即苹果,香蕉,梨,桃,李。
理想的结果将是:
id | comments | keywords
-----------------------------------------------------
1 | I like bananas! | bananas
2 | I like apples. | apples
3 | I don't like fruit |
4 | I like apples and bananas! | apples,bananas
我认为我需要做一个子查询和array_agg?或者可能'在'中。但我无法弄清楚如何将它连接在一起。
非常感谢, 史蒂夫
答案 0 :(得分:0)
另一种更简单的方法(但速度较慢):
创建dict表:
create table keywords (nm text);
insert into keywords (nm)
values ('apples'), ('bananas');
对您的文本执行以下脚本以提取关键字
select string_agg(regexp_replace(foo, '[^a-zA-Z\-]*', '', 'ig'), ',') s
from regexp_split_to_table('I like apples and bananas!', E'\\s+') foo
where regexp_replace(foo, '[^a-zA-Z\-]*', '', 'ig') in (select nm from keywords)
这种解决方案在语义方面更差,因此香蕉和香蕉将是不同的关键词。