我正在開發巴西葡萄牙語的簡單文章網站。搜索功能基於全文搜索,但不會返回預期結果。無法從postgre全文檢索中獲得正確的結果
我在postgresql上做了這個。下面是簡化表:
Artigos
-id
-title -- article title
-intro -- article introduction
-content -- article body
-publishdate -- date of launch
-artigosts -- this will work as our fts index.
創建表後,我跑:
UPDATE artigos SET artigosts =
setweight(to_tsvector('pg_catalog.portuguese', coalesce(title,'')), 'A') ||
setweight(to_tsvector('pg_catalog.portuguese', coalesce(intro,'')), 'B') ||
setweight(to_tsvector('pg_catalog.portuguese', coalesce(content,'')), 'C');
CREATE INDEX artigosts_idx ON artigos USING gist (artigosts);
CREATE TRIGGER artigosts_tg
BEFORE INSERT OR UPDATE ON artigos
FOR EACH ROW EXECUTE PROCEDURE
tsvector_update_trigger('artigosts', 'pg_catalog.portuguese', 'title', 'intro', 'content');
是的,我打算在搜索中使用簡單weightning。做了一個索引加速,一個觸發器,所以我可以插入和更新,而不用擔心重新制作索引等等。
那麼,根據我的理解,這一切都很好。但結果不是。一個簡單的例子。
比方說,我有「... banco de dados ...沒有banco ...」作爲一個文章內容。當我這樣做時:
SELECT title, intro, content FROM artigos WHERE plainto_tsquery('banco de dados') @@ artigosts;
它返回一個空集。我檢查了ts_vector列,看到謂詞'banc'和'dad'。但我仍然不明白爲什麼它不返回包含提到的文章的行。
有人可以提出這個問題的燈光?
正在玩服務器上可用的不同配置。我認爲這是可用的字典和單詞停止的問題。有誰知道如何將上面的字符(如áéóôú)映射到矢量? – Dave 2010-10-14 18:46:23