FTS搜索术语作为PostgreSQL中的单独列

时间:2017-03-27 08:32:38

标签: postgresql full-text-search highlighting

我在Postgres FTS查询中有很长的搜索关键字列表。该查询遍历数百个文档并选择包含搜索关键字的文档。在结果中,我需要一个列,显示哪个搜索关键字与文档匹配,以便它可以用于进一步分组文档。直接来自ts_headline中文本的突出显示的匹配不允许这样做,因为突出显示的术语有许多不同的形式,结果是不规则的。

使用此类查询

to_tsquery(‘english’, ‘Donald | Mickey | Goofy’)

我想得到这样的结果:

text:                             keyword:
Donald Duck’s house lorem ipsum   Donald
Mickey Mouse lorem impsum         Mickey 
Lorem ipsum goofiness             Goofy 

1 个答案:

答案 0 :(得分:0)

select doc, string_agg(term, ', ')
from
    (values
        ('Donald Duck''s house lorem ipsum'),
        ('Mickey Mouse lorem impsum'),
        ('Lorem ipsum goofiness'),
        ('Donald, Mickey, lorem impsum and Goofy')
    ) v(doc)
    cross join
    (values ('Donald'),('Mickey'),('Goofy')) s (term)
where to_tsvector(doc) @@ to_tsquery(term)
group by doc
;
                  doc                   |      string_agg       
----------------------------------------+-----------------------
 Donald Duck's house lorem ipsum        | Donald
 Donald, Mickey, lorem impsum and Goofy | Donald, Mickey, Goofy
 Lorem ipsum goofiness                  | Goofy
 Mickey Mouse lorem impsum              | Mickey