2
我試圖簡化這個查詢,因爲它將由PHP生成動態地生成,我想減少處理開銷(真正的查詢將會更長,但結構將是一樣的!)。簡化PostgreSQL全文搜索使用別名的tsvector和tsquery
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」是從多個表生成的視圖。
任何幫助非常感謝!
謝謝,但還是失敗...錯誤:語法錯誤或接近 「爲」 LINE 7:... tweight(to_tsvector(合併(TYPE_NAME, '')), 'B')的重量, –
我想我誤解了對ts_rank_cd()的調用。請嘗試新的查詢。但無論如何,這應該讓你知道如何處理這個問題。 –
仍然失敗,不幸的是...與您的新編輯錯誤是錯誤:函數ts_rank_cd(數字[])不存在,我認爲是由於第5行錯誤的括號,刪除,拋出上述相同的錯誤。 ts_rank_cd params是rank數組,tsvector,tsquery。謝謝你的幫助。非常感激。 –