Postgres从Select中的List中查找和返回关键字

时间:2015-12-08 17:38:32

标签: postgresql search full-text-search keyword-search array-agg

我有一个简单的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?或者可能'在'中。但我无法弄清楚如何将它连接在一起。

非常感谢, 史蒂夫

1 个答案:

答案 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)

这种解决方案在语义方面更差,因此香蕉和香蕉将是不同的关键词。