1
我正在尋找一種方法來搜索特定表達式 - 然後是它的一部分 - 在所有文檔(及其相關聯的值)中。最終的順序應爲:PostgreSQL 9.1:在標題中查找確切表達式
- 完整表達(在標題或內容):使用ILIKE和「%表達%」
- 其中一個字的(在標題或內容):使用tsquery上的tsvector索引的列
我有兩個表:
- 文檔(ID [整數],標題[字符改變],title_search [的tsvector])
- 值(ID [整數],內容[字符改變],content_search [的tsvector],id_document [整數])
這裏的要求,我現在在做什麼:
(SELECT id, title, content, title_search, content_search, ts_rank_cd(title_search, query) AS rank
FROM to_tsquery('lorem&ipsum|(lorem|ipsum)') query, documents
LEFT JOIN "values" ON id_document=id
WHERE (title ILIKE(unaccent('%lorem ipsum%')) OR content ILIKE(unaccent('%lorem ipsum%'))))
UNION (SELECT id, title, content, title_search, content_search, ts_rank_cd(title_search, query) AS rank
FROM to_tsquery('lorem&ipsum|(lorem|ipsum)') query, documents
LEFT JOIN "values" ON id_document=id
WHERE query @@ title_search)
UNION (SELECT id, title, content, title_search, content_search, ts_rank_cd(title_search, query) AS rank
FROM to_tsquery('lorem&ipsum|(lorem|ipsum)') query, documents
LEFT JOIN "values" ON id_document=id
WHERE query @@ content_search)
ORDER BY rank DESC, title ASC
通過這樣做,我可以使用這個表達式和/或它的一部分獲取所有文檔,但是我不能讓這些文檔正確對準。這是因爲我依賴的是tsvector字段上的ts_rank而不能用於定義精確表達式。
所以我的問題是如何讓我的工作如我所期望的那樣?我使用全文搜索錯了嗎?
謝謝。