fofstudio-bbsdata
Version:
fofstudio
46 lines (45 loc) • 1.98 kB
JavaScript
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');