Files
onion-dmp/scripts/fix-tag-coverage.js
2026-04-08 14:52:09 +08:00

85 lines
2.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 修复标签覆盖率统计
* 更新所有标签的coverage和coverage_rate字段
*/
const { getDb } = require('../db/init');
function updateTagStats(dbSuffix = 'onion') {
const db = getDb(dbSuffix);
try {
// 获取总用户数
const totalUsersRow = db.prepare('SELECT COUNT(*) as n FROM users').get();
const totalUsers = totalUsersRow.n;
if (totalUsers === 0) {
console.error('❌ 没有用户数据');
return;
}
console.log(`\n🔄 更新标签覆盖率统计(总用户数: ${totalUsers}`);
// 获取所有标签
const tags = db.prepare('SELECT id FROM tags').all();
let updated = 0;
const stmt = db.prepare(`
UPDATE tags SET coverage = ?, coverage_rate = ? WHERE id = ?
`);
for (const tag of tags) {
// 计算该标签的覆盖用户数
const coverageRow = db.prepare(`
SELECT COUNT(DISTINCT user_id) as cnt FROM user_tags WHERE tag_id = ?
`).get(tag.id);
const coverage = coverageRow.cnt || 0;
const coverage_rate = totalUsers > 0 ? +(coverage / totalUsers * 100).toFixed(2) : 0;
stmt.run(coverage, coverage_rate, tag.id);
updated++;
if (updated % 50 === 0) {
console.log(` ✓ 已更新 ${updated} 个标签...`);
}
}
console.log(`\n✅ 更新完成: ${updated} 个标签\n`);
// 显示样本
console.log('📊 样本数据前5个标签:');
const samples = db.prepare(`
SELECT id, name, coverage, coverage_rate FROM tags LIMIT 5
`).all();
for (const sample of samples) {
console.log(`${sample.name}: ${sample.coverage} users (${sample.coverage_rate}%)`);
}
// 显示统计
console.log('\n📊 整体统计:');
const stats = db.prepare(`
SELECT
MIN(coverage) as min_coverage,
MAX(coverage) as max_coverage,
ROUND(AVG(coverage), 2) as avg_coverage,
COUNT(*) as total_tags
FROM tags
`).get();
console.log(` • 总标签数: ${stats.total_tags}`);
console.log(` • 覆盖范围: ${stats.min_coverage} - ${stats.max_coverage} 用户`);
console.log(` • 平均覆盖: ${stats.avg_coverage} 用户`);
db.close();
} catch (e) {
console.error('❌ 错误:', e.message);
db.close();
process.exit(1);
}
}
// 执行更新
updateTagStats();