Remove unused search index
This commit is contained in:
@@ -1,93 +0,0 @@
|
||||
// ═══════════════════════════════════════════════════════════════════════════
|
||||
// MiniSearch Index Manager
|
||||
// 全文搜索索引管理
|
||||
// ═══════════════════════════════════════════════════════════════════════════
|
||||
|
||||
import MiniSearch from '../../../libs/minisearch.mjs';
|
||||
|
||||
// 索引缓存:chatId -> { index, updatedAt }
|
||||
const indexCache = new Map();
|
||||
|
||||
/**
|
||||
* 获取或创建搜索索引
|
||||
* @param {string} chatId
|
||||
* @param {Array} events - L2 事件
|
||||
* @param {number} storeUpdatedAt - store.updatedAt 时间戳
|
||||
* @returns {MiniSearch}
|
||||
*/
|
||||
export function getSearchIndex(chatId, events, storeUpdatedAt) {
|
||||
const cached = indexCache.get(chatId);
|
||||
|
||||
// 缓存有效
|
||||
if (cached && cached.updatedAt >= storeUpdatedAt) {
|
||||
return cached.index;
|
||||
}
|
||||
|
||||
// 重建索引
|
||||
const index = new MiniSearch({
|
||||
fields: ['title', 'summary', 'participants'],
|
||||
storeFields: ['id'],
|
||||
searchOptions: {
|
||||
boost: { title: 2, participants: 1.5, summary: 1 },
|
||||
fuzzy: 0.2,
|
||||
prefix: true,
|
||||
},
|
||||
});
|
||||
|
||||
// 索引事件
|
||||
const docs = events.map(e => ({
|
||||
id: e.id,
|
||||
title: e.title || '',
|
||||
summary: e.summary || '',
|
||||
participants: (e.participants || []).join(' '),
|
||||
}));
|
||||
|
||||
index.addAll(docs);
|
||||
|
||||
// 缓存
|
||||
indexCache.set(chatId, { index, updatedAt: storeUpdatedAt });
|
||||
|
||||
// 限制缓存数量
|
||||
if (indexCache.size > 5) {
|
||||
const firstKey = indexCache.keys().next().value;
|
||||
indexCache.delete(firstKey);
|
||||
}
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
/**
|
||||
* 关键词搜索
|
||||
* @returns {Map<string, number>} - eventId -> 归一化分数
|
||||
*/
|
||||
export function searchByKeywords(index, queryText, limit = 20) {
|
||||
if (!queryText?.trim()) return new Map();
|
||||
|
||||
const results = index.search(queryText, { limit });
|
||||
|
||||
if (results.length === 0) return new Map();
|
||||
|
||||
// 归一化分数到 0-1
|
||||
const maxScore = results[0].score;
|
||||
const scores = new Map();
|
||||
|
||||
for (const r of results) {
|
||||
scores.set(r.id, r.score / maxScore);
|
||||
}
|
||||
|
||||
return scores;
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除指定聊天的索引缓存
|
||||
*/
|
||||
export function invalidateIndex(chatId) {
|
||||
indexCache.delete(chatId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除所有索引缓存
|
||||
*/
|
||||
export function clearAllIndexes() {
|
||||
indexCache.clear();
|
||||
}
|
||||
Reference in New Issue
Block a user