我正在尝试简化此查询,因为它将由 PHP 动态生成,我想减少处理开销(实际查询会更长,但结构将相同!)。
SELECT title, type_name, ts_rank_cd(ARRAY[0.1,0.2,0.4,1.0],
setweight(to_tsvector(coalesce(title,'')), 'A')
||
setweight(to_tsvector(coalesce(type_name,'')), 'B')
,
to_tsquery('search & query'))
FROM TestView WHERE
setweight(to_tsvector(coalesce(title,'')), 'D')
||
setweight(to_tsvector(coalesce(type_name,'')), 'B')
@@
to_tsquery('search & query');
我希望通过定义类似于别名的东西来减少指定 tsquery 和 tsvector 两次的需要,这样就不必指定两次。像这样的东西(失败了,我不确定它是否接近正确!)
SELECT title, type_name, ts_rank_cd(ARRAY[0.1,0.2,0.4,1.0],
searchvector
,
searchquery
FROM TestView WHERE
setweight(to_tsvector(coalesce(title,'')), 'D')
||
setweight(to_tsvector(coalesce(type_name,'')), 'B') AS searchvector
@@
to_tsquery('search & query') AS searchquery;
这可能吗,还是我只是坚持生成它两次。
对于上下文,“TestView”是从多个表生成的 View 。
非常感谢任何帮助!
最佳答案
SELECT title,
type_name,
ts_rank_cd(ARRAY[0.1,0.2,0.4,1.0],weight,query)
FROM (
SELECT title,
type_name,
setweight(to_tsvector(coalesce(title,'')), 'A')
||setweight(to_tsvector(coalesce(type_name,'')), 'B') as weight,
to_tsquery('search & query') as query
FROM TestView
) t
WHERE weight @@ query
关于postgresql - 使用别名简化 PostgreSQL 全文搜索 tsvector 和 tsquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6623454/