| layout | default |
|---|---|
| title | 搜索 |
🔍 搜索
💡 请输入搜索关键词
'; document.getElementById('search-stats').innerHTML = ''; return; } if (searchData.length === 0) { document.getElementById('search-results').innerHTML = '⏳ 搜索索引加载中,请稍候...
'; return; } document.getElementById('search-results').innerHTML = '🔍 搜索中...
'; // 分词 const queryTokens = tokenize(query); console.log('搜索关键词:', queryTokens); // 计算每个文档的得分 const results = searchData.map(doc => ({ ...doc, score: calculateScore(doc, queryTokens) })).filter(doc => doc.score > 0); // 按得分排序 results.sort((a, b) => b.score - a.score); // 显示结果 if (results.length === 0) { document.getElementById('search-stats').innerHTML = '😕 没有找到匹配的内容'; document.getElementById('search-results').innerHTML = ` `; return; } // 显示统计信息 document.getElementById('search-stats').innerHTML = `✨ 找到 ${results.length} 个相关结果`; // 显示结果(最多50个) let html = ''; results.slice(0, 50).forEach((result, index) => { const title = highlightKeywords(result.title || '无标题', queryTokens); const excerpt = highlightKeywords( (result.excerpt || '').substring(0, 200) + ((result.excerpt || '').length > 200 ? '...' : ''), queryTokens ); // 分类标签 let categoryBadge = ''; if (result.category) { const categoryMap = { 'docs': '📚 文档', 'appendix': '📖 附录', 'examples': '💡 示例', 'guide': '🎯 指南', 'root': '🏠 首页' }; const categoryName = categoryMap[result.category] || result.category; categoryBadge = `${categoryName}`; } html += ` `; }); if (results.length > 50) { html += `显示前 50 个结果,共 ${results.length} 个
`; } document.getElementById('search-results').innerHTML = html; } // 加载搜索数据 async function loadSearchData() { if (isLoading) return; isLoading = true; const searchFiles = [ '/search-index-expanded.json', '/search-index.json', '/search.json' ]; for (const file of searchFiles) { try { console.log(`🔍 尝试加载: ${file}`); const response = await fetch(file); if (!response.ok) { throw new Error(`HTTP ${response.status}`); } const data = await response.json(); if (!data || data.length === 0) { throw new Error('搜索数据为空'); } searchData = data; console.log(`✅ 成功加载搜索索引: ${file}`, `共 ${data.length} 个文档`); isLoading = false; return; } catch (error) { console.error(`❌ 加载失败 (${file}):`, error); continue; } } // 所有文件都加载失败 console.error('❌ 所有搜索索引文件都加载失败'); document.getElementById('search-results').innerHTML = ` `; isLoading = false; } // 初始化 document.addEventListener('DOMContentLoaded', function() { // 加载搜索数据 loadSearchData(); // 绑定搜索事件 const searchInput = document.getElementById('search-input'); const searchButton = document.getElementById('search-button'); searchButton.addEventListener('click', function() { performSearch(searchInput.value); }); searchInput.addEventListener('keypress', function(e) { if (e.key === 'Enter') { performSearch(searchInput.value); } }); // 实时搜索(输入时自动搜索,带防抖) let searchTimeout; searchInput.addEventListener('input', function() { clearTimeout(searchTimeout); const query = this.value; if (query.length === 0) { document.getElementById('search-results').innerHTML = '💡 请输入搜索关键词
'; document.getElementById('search-stats').innerHTML = ''; return; } if (query.length >= 2) { searchTimeout = setTimeout(() => performSearch(query), 300); } }); // 检查URL参数 const urlParams = new URLSearchParams(window.location.search); const queryParam = urlParams.get('q'); if (queryParam) { searchInput.value = queryParam; performSearch(queryParam); } }); })(); </script>