【问题标题】:Simplifying PostgreSQL Full Text Search tsvector and tsquery with aliases使用别名简化 PostgreSQL 全文搜索 tsvector 和 tsquery
【发布时间】:2011-07-08 10:53:41
【问题描述】:

我正在尝试简化此查询,因为它将由 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”是从多个表生成的视图。

非常感谢任何帮助!

【问题讨论】:

    标签: postgresql full-text-search


    【解决方案1】:
    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
    

    【讨论】:

    • 谢谢,但仍然失败...错误:“as”第 7 行或附近的语法错误:...tweight(to_tsvector(coalesce(type_name,'')), 'B') as重量,
    • 我想我误解了对 ts_rank_cd() 的调用。请尝试新的查询。但无论如何,这应该让你知道如何处理这个问题。
    • 不幸的是仍然失败...使用您的新编辑错误是错误:函数 ts_rank_cd(numeric[]) 不存在,我认为这是由于第 5 行的错误括号,删除它会抛出与上述相同的错误。 ts_rank_cd 参数是秩数组、tsvector、tsquery。谢谢你的帮助。非常感谢。
    猜你喜欢
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    相关资源
    最近更新 更多