我正在使用PostgreSQL的全文搜索功能在客户端网站上实现搜索功能。我正在使用ts_headline
函数来获取搜索词出现的上下文,但客户对选择显示的单词不满意。特别是,标题似乎始终以搜索词开头,而客户希望它能提前开始说几句话。
有没有办法让PostgreSQL配置这种行为,或修改ts_headline调用以获得所需的结果?
编辑:首先不包括一些示例SQL的道歉。
SELECT
ts_headline('english', "text", plainto_tsquery('"endpoints"'))
FROM "Page"
WHERE to_tsvector("text") @@ plainto_tsquery('"endpoints"')
ORDER BY ts_rank(to_tsvector("text"), plainto_tsquery('"endpoints"'))
答案 0 :(得分:3)
使用MaxFragments选项,您可能会获得更好的结果。同样,您可以使用MinWords和MaxWords,例如
SELECT
ts_headline('english', "text", plainto_tsquery('"endpoints"'), 'MaxFragments=0, MinWords=5, MaxWords=9')
FROM "Page"
WHERE
to_tsvector("text") @@ plainto_tsquery('"endpoints"')
ORDER BY
ts_rank(to_tsvector("text"), plainto_tsquery('"endpoints"'))
您可能需要进行实验。
在http://www.postgresql.org/docs/current/interactive/textsearch-controls.html
中查看MinWords
,MaxWords
和MaxFragments