2
我在兩臺運行Postgres 9.4.4的獨立數據庫服務器上測試了文本搜索查詢。相同tsvector Postgres ts_rank_cd不同的結果?
有問題的行具有相同的數據,我也得到了相同的底層tsvector
兩臺服務器上:
SELECT
user_id,
TO_TSVECTOR('english', REGEXP_REPLACE(first_name, '[^a-zA-Z0-9]', ' ', 'g')) ||
TO_TSVECTOR('english', REGEXP_REPLACE(last_name, '[^a-zA-Z0-9]', ' ', 'g')) ||
TO_TSVECTOR('english', REGEXP_REPLACE(username, '[^a-zA-Z0-9]', ' ', 'g'))
FROM users_v1 where user_id = 123;
-- On server A:
-- user_id | to_tsvector
-- -----------+----------------------
-- 123 | 'georg':1 'hickman':2
-- (1 row)
-- On server B:
-- user_id | to_tsvector
-- -----------+----------------------
-- 123 | 'georg':1 'hickman':2
-- (1 row)
但是我用這個載體來運行一個查詢時,得到不同的等級:
SELECT username,
TS_RANK_CD(
TO_TSVECTOR('english', REGEXP_REPLACE(first_name, '[^a-zA-Z0-9]', ' ', 'g')) ||
TO_TSVECTOR('english', REGEXP_REPLACE(last_name, '[^a-zA-Z0-9]', ' ', 'g')) ||
TO_TSVECTOR('english', REGEXP_REPLACE(username, '[^a-zA-Z0-9]', ' ', 'g'))
, PLAINTO_TSQUERY('george'))
FROM users WHERE user_id = 123;
-- On server A:
-- user_id | ts_rank_cd
-- -----------+----------------------
-- 123 | 0.2
-- (1 row)
-- On server B:
-- user_id | ts_rank_cd
-- -----------+----------------------
-- 123 | 0.0
-- (1 row)
矢量是否是排名函數的唯一輸入,或者是否存在影響ts_rank_cd
行爲的任何服務器設置/其他任何內容?存儲在向量中的所有信息都顯示在控制檯輸出中,還是存在一些我沒有看到的隱藏差異?如果不是可能導致差異的原因?
PLAINTO_TSQUERY('george')'在每個系統上顯示什麼? – jjanes
啊哈,有區別!它在系統上返回'georg',給出0.2的等級,但是在另一個系統上的'george'。謝謝。所以我想這是由不同的文本搜索配置引起的,就像這裏一樣? http://www.postgresql.org/docs/9.4/static/textsearch-configuration.html – actionshrimp