fix(search): ts_stat 改单参(text),避免 'a' mask 静默 0 行

zhparser 不标 A 权重(也不标 B/C/D),传 'a' mask 给 ts_stat(text, weights) 会过滤掉所有词
但不报错,静默 0 行。改成 ts_stat(text) 单参(等价 mask='abcd',聚合所有权重)。

修:
- 0010 迁移里 refresh_search_keywords() 改用单参 ts_stat
- 0010 迁移 downgrade 部分同步修
- 0009 迁移 refresh_search_keywords() 同步修
- services/search.py _fallback_keywords 改用 chinese_zh + 单参 ts_stat
This commit is contained in:
mavis
2026-06-15 19:19:19 +08:00
parent e85a27f69d
commit db4fd8699b
3 changed files with 31 additions and 40 deletions

View File

@@ -218,23 +218,19 @@ def upgrade() -> None:
FROM generate_series(1, length(word)) AS n
)
FROM ts_stat(
'simple',
(
SELECT to_tsvector(
'simple',
coalesce(title_zh, '') || ' ' ||
coalesce(body_zh_text, '') || ' ' ||
coalesce(commentary, '') || ' ' ||
coalesce(commentary_meituan, '')
)
FROM articles
WHERE title_zh IS NOT NULL
OR body_zh_text IS NOT NULL
OR commentary IS NOT NULL
OR commentary_meituan IS NOT NULL
$$SELECT to_tsvector('simple',
coalesce(title_zh, '') || ' ' ||
coalesce(body_zh_text, '') || ' ' ||
coalesce(commentary, '') || ' ' ||
coalesce(commentary_meituan, '')
)
)
WHERE length(word) >= 2; -- 过滤单字噪音(中文标点/单字停用词)
FROM articles
WHERE title_zh IS NOT NULL
OR body_zh_text IS NOT NULL
OR commentary IS NOT NULL
OR commentary_meituan IS NOT NULL$$
) AS s
WHERE length(s.word) >= 2; -- 过滤单字噪音(中文标点/单字停用词)
END;
$$ LANGUAGE plpgsql;