postgresql - 使用别名简化 PostgreSQL 全文搜索 tsvector 和 tsquery

标签 postgresql full-text-search

我正在尝试简化此查询,因为它将由 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/

相关文章:

linux - 如何在 bash 脚本执行期间更改用户并继续使用新用户运行命令?

Mysql 全文搜索

elasticsearch - Elasticsearch 全文搜索

elasticsearch - 通配符查询 Elasticsearch 不适用于多词值

sql - 如何使用匹配值使用 CSV 文件中的数据更新 Postgres 中的列

postgresql - psql 似乎因长查询而超时

spring - 有没有办法模拟从 spring 到本地主机上的 postgres 数据库的往返时间?

c# - Npgsql 中是否有任何等效的 SQLBulkCopy

mysql - FROM 子句中的全文搜索和子查询

mysql - 如何跨多个表实现 MySQL 全文搜索?