diff --git a/src/plugins/built-in/globalSearch/src/components/SearchBar.svelte b/src/plugins/built-in/globalSearch/src/components/SearchBar.svelte
index 98d18ab8..9b1c62f0 100644
--- a/src/plugins/built-in/globalSearch/src/components/SearchBar.svelte
+++ b/src/plugins/built-in/globalSearch/src/components/SearchBar.svelte
@@ -18,11 +18,9 @@
const {
transparencyEffects,
- showRecentFirst,
searchHotkey: initialSearchHotkey
} = $props<{
transparencyEffects: boolean,
- showRecentFirst: boolean,
searchHotkey: string
}>();
@@ -170,10 +168,7 @@
combinedResults = await doSearch(
term,
commandsFuse,
- dynamicContentFuse,
commandIdToItemMap,
- dynamicIdToItemMap,
- showRecentFirst
);
} else {
combinedResults = [];
diff --git a/src/plugins/built-in/globalSearch/src/components/items/ForumItem.svelte b/src/plugins/built-in/globalSearch/src/components/items/ForumItem.svelte
index 6a43833e..ed0283f2 100644
--- a/src/plugins/built-in/globalSearch/src/components/items/ForumItem.svelte
+++ b/src/plugins/built-in/globalSearch/src/components/items/ForumItem.svelte
@@ -19,7 +19,7 @@
>
{item.metadata?.icon || '\uebe7'}
-
+
diff --git a/src/plugins/built-in/globalSearch/src/indexing/actions.ts b/src/plugins/built-in/globalSearch/src/indexing/actions.ts
index 9d43071a..ddf28387 100644
--- a/src/plugins/built-in/globalSearch/src/indexing/actions.ts
+++ b/src/plugins/built-in/globalSearch/src/indexing/actions.ts
@@ -80,4 +80,8 @@ export const actionMap: Record> = {
subjectcourse: ((item: IndexItem) => {
window.location.href = `/#?page=/courses/${item.metadata.programme}:${item.metadata.subjectId}`;
}) as ActionHandler,
+
+ forum: ((item: IndexItem) => {
+ window.location.href = `/#?page=/forums/${item.metadata.forumId}`;
+ }) as ActionHandler,
};
diff --git a/src/plugins/built-in/globalSearch/src/indexing/jobs/forums.ts b/src/plugins/built-in/globalSearch/src/indexing/jobs/forums.ts
index 708eaa62..24541831 100644
--- a/src/plugins/built-in/globalSearch/src/indexing/jobs/forums.ts
+++ b/src/plugins/built-in/globalSearch/src/indexing/jobs/forums.ts
@@ -51,6 +51,7 @@ export const forumsJob: Job = {
forumId: forum.id,
owner: forum.owner,
title: forum.title,
+ closed: forum.closed,
},
actionId: "forum",
renderComponentId: "forum",
@@ -60,9 +61,9 @@ export const forumsJob: Job = {
return items;
},
- /** Keep only forums from the last 2 years. */
+ /** Keep only forums from the last year. */
purge: (items) => {
- const twoYearsAgo = Date.now() - 2 * 365 * 24 * 60 * 60 * 1000;
- return items.filter((i) => i.dateAdded >= twoYearsAgo);
+ const oneYearAgo = Date.now() - 365 * 24 * 60 * 60 * 1000;
+ return items.filter((i) => i.dateAdded >= oneYearAgo);
},
};
\ No newline at end of file
diff --git a/src/plugins/built-in/globalSearch/src/indexing/jobs/subjects.ts b/src/plugins/built-in/globalSearch/src/indexing/jobs/subjects.ts
index f419c3d6..5f41272f 100755
--- a/src/plugins/built-in/globalSearch/src/indexing/jobs/subjects.ts
+++ b/src/plugins/built-in/globalSearch/src/indexing/jobs/subjects.ts
@@ -27,7 +27,7 @@ export const subjectsJob: Job = {
let score = 0;
if (item.metadata.isActive) {
- score += 1; // Boost for active subjects
+ score += 0.01; // Boost for active subjects
} else {
score -= 50; // Penalty for inactive subjects
}
diff --git a/src/plugins/built-in/globalSearch/src/search/searchUtils.ts b/src/plugins/built-in/globalSearch/src/search/searchUtils.ts
index 3041829e..6982e286 100644
--- a/src/plugins/built-in/globalSearch/src/search/searchUtils.ts
+++ b/src/plugins/built-in/globalSearch/src/search/searchUtils.ts
@@ -130,10 +130,7 @@ export function searchDynamicItems(
export async function performSearch(
query: string,
commandsFuse: Fuse,
- dynamicContentFuse: Fuse,
commandIdToItemMap: Map,
- dynamicIdToItemMap: Map,
- showRecentFirst: boolean,
): Promise {
// Get all results first
const commandResults = searchCommands(
@@ -141,18 +138,11 @@ export async function performSearch(
query,
commandIdToItemMap,
);
- const dynamicResults = searchDynamicItems(
- dynamicContentFuse,
- query,
- dynamicIdToItemMap,
- 10,
- showRecentFirst,
- );
// Get vector results in parallel
let vectorResults: VectorSearchResult[] = [];
try {
- vectorResults = await searchVectors(query, 10);
+ vectorResults = await searchVectors(query);
} catch (e) {}
// Create a map to store our final results, using ID as key to avoid duplicates
@@ -164,35 +154,6 @@ export async function performSearch(
// Process dynamic results and vector results together
const seenIds = new Set();
- // Add dynamic results first
- dynamicResults.forEach((r) => {
- seenIds.add(r.id);
-
- if (r.type === "dynamic") {
- const dynamicItem = r.item as IndexItem;
- const job = jobs[dynamicItem.category];
- if (job && typeof job.boostCriteria === 'function') {
- const boost = job.boostCriteria(dynamicItem, query);
- if (boost) {
- r.score += boost; // Add the boost to the score
- }
- }
- }
-
- const vectorMatch = vectorResults.find((v) => v.object.id === r.id);
- if (vectorMatch) {
- // If we found it in both searches, combine the scores
- resultMap.set(r.id, {
- ...r,
- score: r.score + vectorMatch.similarity * 0.6, // Boost exact matches
- });
- } else {
- // If only in Fuse results, keep as is
- resultMap.set(r.id, r);
- }
- });
-
- // Now add any vector results we haven't seen yet
vectorResults.forEach((v) => {
const id = v.object.id;
diff --git a/src/plugins/built-in/globalSearch/src/search/vector/vectorSearch.ts b/src/plugins/built-in/globalSearch/src/search/vector/vectorSearch.ts
index a67fe405..e081ccaf 100644
--- a/src/plugins/built-in/globalSearch/src/search/vector/vectorSearch.ts
+++ b/src/plugins/built-in/globalSearch/src/search/vector/vectorSearch.ts
@@ -20,7 +20,7 @@ export interface VectorSearchResult extends SearchResult {
export async function searchVectors(
query: string,
- topK: number = 10,
+ topK: number = 20,
): Promise {
if (!vectorIndex) await initVectorSearch();
@@ -32,7 +32,11 @@ export async function searchVectors(
dedupeEntries: true,
});
- return results as VectorSearchResult[];
+ // filter results with a similarity below 0.81
+ const filteredResults = results.filter((r) => r.similarity > 0.81);
+ console.log("Vector search results", filteredResults);
+
+ return filteredResults as VectorSearchResult[];
}
export async function refreshVectorCache() {