UNPKG

fofstudio-bbsdata

Version:

fofstudio

46 lines (45 loc) 1.98 kB
const fs = require('fs'); const path = require('path'); const { Index } = require('flexsearch'); const dataFilePath = path.join(__dirname, 'text.json'); // 假设 data.json 与 main.js 在同一目录 const data = fs.readFileSync(dataFilePath, 'utf8'); let forumData = JSON.parse(data)["数据"]; const searchIndex = new Index({ tokenize: "forward", // 分词方式: "forward", "reverse", "strict", "full" resolution: 9, // 分辨率,影响索引大小和搜索精度 (1-9, 9最精确) context: true // 启用上下文搜索 (支持短语搜索) }); forumData.forEach((post, index) => { const searchableContent = `${post.帖子名称} ${post.简易描述} ${post.帖子编号 + ""}`; searchIndex.add(index, searchableContent); }); function searchForum(query, limit = 5) { if (!query || typeof query !== 'string' || query.trim() === '') { return { query: query, results: [], took: 0, error: '查询关键词不能为空' }; } const startTime = Date.now(); try { const matchedIndices = searchIndex.search(query.trim()).flat(); const searchResults = matchedIndices .map(idx => forumData[idx]) // 映射回原始对象 .slice(0, limit); // 限制返回结果数量 const took = Date.now() - startTime; return { query: query.trim(), results: searchResults, count: searchResults.length, took: took // 毫秒 }; } catch (error) { console.error('搜索过程中发生错误:', error); return { query: query, results: [], took: 0, error: '搜索执行失败' }; } } const result3 = searchForum('MCP服务'); console.log('搜索关键词: "JavaScript 异步"'); console.log('耗时:', result3.took, 'ms'); console.log('找到结果:', result3.count, '个'); result3.results.forEach((post, i) => { console.log(post); }); console.log('---\n');