diff --git a/src/globals.ts b/src/globals.ts index 7e6afce..aeab8ae 100644 --- a/src/globals.ts +++ b/src/globals.ts @@ -64,6 +64,8 @@ export type IndexedDocument = { headings1: string headings2: string headings3: string + headings4: string + colonHeadings: string // TODO: reimplement this doesNotExist?: boolean diff --git a/src/notes-indexer.ts b/src/notes-indexer.ts index 52e90d4..d75a4b8 100644 --- a/src/notes-indexer.ts +++ b/src/notes-indexer.ts @@ -104,6 +104,8 @@ export class NotesIndexer { headings1: '', headings2: '', headings3: '', + headings4: '', + colonHeadings: '', doesNotExist: true, parent, diff --git a/src/repositories/documents-repository.ts b/src/repositories/documents-repository.ts index 87460ea..6871731 100644 --- a/src/repositories/documents-repository.ts +++ b/src/repositories/documents-repository.ts @@ -232,6 +232,7 @@ export class DocumentsRepository { const headings1 = metadata ? extractHeadingsFromCache(metadata, 1) : [] const headings2 = metadata ? extractHeadingsFromCache(metadata, 2) : [] const headings3 = metadata ? extractHeadingsFromCache(metadata, 3) : [] + const headings4 = metadata ? extractHeadingsFromCache(metadata, 4) : [] const akaHeadings: string[] = content .split(/\n\s*\n/)[0] @@ -271,7 +272,9 @@ export class DocumentsRepository { aliases: getAliasesFromMetadata(metadata).join(''), headings1: [...headings1, ...akaHeadings].join(' '), headings2: headings2.join(' '), - headings3: [...headings3, ...colonHeadings].join(' '), + headings3: headings3.join(' '), + headings4: headings4.join(' '), + colonHeadings: colonHeadings.join(' '), } } } diff --git a/src/search/search-engine.ts b/src/search/search-engine.ts index 7328a36..8dcd488 100644 --- a/src/search/search-engine.ts +++ b/src/search/search-engine.ts @@ -180,6 +180,8 @@ export class SearchEngine { headings1: settings.weightH1, headings2: settings.weightH2, headings3: settings.weightH3, + headings4: settings.weightH4, + colonHeadings: settings.weightColonHeadings, tags: settings.weightUnmarkedTags, unmarkedTags: settings.weightUnmarkedTags, }, @@ -601,6 +603,8 @@ export class SearchEngine { 'headings1', 'headings2', 'headings3', + 'headings4', + 'colonHeadings', ], storeFields: ['tags', 'mtime'], logger(_level, _message, code) { diff --git a/src/settings/index.ts b/src/settings/index.ts index 7020765..3fba2ea 100644 --- a/src/settings/index.ts +++ b/src/settings/index.ts @@ -129,6 +129,8 @@ export function getDefaultSettings(app: App): OmnisearchSettings { weightH1: 6, weightH2: 5, weightH3: 4, + weightH4: 3, + weightColonHeadings: 2, weightUnmarkedTags: 2, weightCustomProperties: [] as { name: string; weight: number }[], diff --git a/src/settings/settings-weighting.ts b/src/settings/settings-weighting.ts index f83dae6..80a3d7a 100644 --- a/src/settings/settings-weighting.ts +++ b/src/settings/settings-weighting.ts @@ -51,6 +51,14 @@ export function injectSettingsWeighting( .setName(`Headings level 3 (default: ${defaultSettings.weightH3})`) .addSlider(cb => weightSlider(cb, 'weightH3')) + new Setting(containerEl) + .setName(`Headings level 4 (default: ${defaultSettings.weightH4})`) + .addSlider(cb => weightSlider(cb, 'weightH4')) + + new Setting(containerEl) + .setName(`Colon headings (default: ${defaultSettings.weightColonHeadings})`) + .addSlider(cb => weightSlider(cb, 'weightColonHeadings')) + new Setting(containerEl) .setName(`Tags (default: ${defaultSettings.weightUnmarkedTags})`) .addSlider(cb => weightSlider(cb, 'weightUnmarkedTags')) diff --git a/src/settings/utils.ts b/src/settings/utils.ts index aacf066..ed700fd 100644 --- a/src/settings/utils.ts +++ b/src/settings/utils.ts @@ -18,6 +18,8 @@ export interface WeightingSettings { weightH1: number weightH2: number weightH3: number + weightH4: number + weightColonHeadings: number weightUnmarkedTags: number } export function isPluginDisabled(app: App): boolean { diff --git a/tests/fork-features.test.ts b/tests/fork-features.test.ts index 3cbff1f..3346589 100644 --- a/tests/fork-features.test.ts +++ b/tests/fork-features.test.ts @@ -132,13 +132,16 @@ describe('indexed heading metadata', () => { expect(headings.headings1).toBe('H1 Heading') expect(headings.headings2).toBe('H2 Heading') expect(headings.headings3).toBe('H3 Heading') + expect(headings.headings4).toBe('H4 Heading') const fork = await getDocument('tests/notes/fork-features.md') expect(fork.headings1).toBe('Packing List') - expect(fork.headings3).toBe('Japan trip') + expect(fork.headings3).toBe('') + expect(fork.colonHeadings).toBe('Japan trip') const colon = await getDocument('tests/notes/colon-variants.md') - expect(colon.headings3).toBe('Colon heading') + expect(colon.headings3).toBe('') + expect(colon.colonHeadings).toBe('Colon heading') const aka = await getDocument('tests/notes/aka-variants.md') expect(aka.headings1).toBe('lowercase alias') diff --git a/tools/plugin-search.ts b/tools/plugin-search.ts index 10ee1f8..bbf83c4 100644 --- a/tools/plugin-search.ts +++ b/tools/plugin-search.ts @@ -9,7 +9,7 @@ type Note = { path: string; basename: string; text: string } const defaults: any = { fuzziness: '1', weightBasename: 10, weightDirectory: 7, weightH1: 6, - weightH2: 5, weightH3: 4, weightUnmarkedTags: 2, recencyBoost: '0', + weightH2: 5, weightH3: 4, weightH4: 3, weightColonHeadings: 2, weightUnmarkedTags: 2, recencyBoost: '0', downrankedFoldersFilters: [], hideExcluded: false, weightCustomProperties: [], ignoreDiacritics: true, ignoreArabicDiacritics: false, simpleSearch: false, maxEmbeds: 5, renderLineReturnInExcerpts: true, highlight: true, @@ -36,7 +36,7 @@ function indexDocument(note: Note): IndexedDocument { path: note.path, basename: note.basename, displayTitle: '', mtime: 1, content: note.text, cleanedContent: note.text, aliases: '', tags: [], unmarkedTags: [], headings1: headings1.join(' '), headings2: headings2.join(' '), - headings3: headings3.join(' '), + headings3: headings3.join(' '), headings4: '', colonHeadings: '', } }