我在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
答案 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