Retry setting + tweaked prefix toggle
This commit is contained in:
@@ -112,13 +112,14 @@ export class SearchEngine {
|
|||||||
*/
|
*/
|
||||||
public async search(
|
public async search(
|
||||||
query: Query,
|
query: Query,
|
||||||
options = { fuzzy: 0.1 }
|
options = { fuzzy: 0.1, prefix: false }
|
||||||
): Promise<SearchResult[]> {
|
): Promise<SearchResult[]> {
|
||||||
if (!query.segmentsToStr()) return []
|
if (!query.segmentsToStr()) return []
|
||||||
|
|
||||||
let results = this.minisearch.search(query.segmentsToStr(), {
|
let results = this.minisearch.search(query.segmentsToStr(), {
|
||||||
prefix: false,
|
prefix: term => {
|
||||||
// fuzzy: term => (term.length > 4 ? 0.2 : false),
|
return options.prefix || term.length > 4
|
||||||
|
},
|
||||||
fuzzy: options.fuzzy,
|
fuzzy: options.fuzzy,
|
||||||
combineWith: 'AND',
|
combineWith: 'AND',
|
||||||
boost: {
|
boost: {
|
||||||
@@ -207,7 +208,9 @@ export class SearchEngine {
|
|||||||
// Get the raw results
|
// Get the raw results
|
||||||
let results = await this.search(query)
|
let results = await this.search(query)
|
||||||
if (results.length == 0) {
|
if (results.length == 0) {
|
||||||
results = await this.search(query, { fuzzy: 0.2 })
|
if (settings.retryWhenZeroResult) {
|
||||||
|
results = await this.search(query, { fuzzy: 0.2, prefix: true })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!results.length) return []
|
if (!results.length) return []
|
||||||
|
|
||||||
|
|||||||
115
src/settings.ts
115
src/settings.ts
@@ -26,8 +26,6 @@ export interface OmnisearchSettings extends WeightingSettings {
|
|||||||
PDFIndexing: boolean
|
PDFIndexing: boolean
|
||||||
/** Max number of spawned processes for background tasks, such as extracting text from PDFs */
|
/** Max number of spawned processes for background tasks, such as extracting text from PDFs */
|
||||||
backgroundProcesses: number
|
backgroundProcesses: number
|
||||||
/** Write cache files on disk (unrelated to PDFs) */
|
|
||||||
// persistCache: boolean
|
|
||||||
/** Display Omnisearch popup notices over Obsidian */
|
/** Display Omnisearch popup notices over Obsidian */
|
||||||
showIndexingNotices: boolean
|
showIndexingNotices: boolean
|
||||||
/** Activate the small 🔍 button on Obsidian's ribbon */
|
/** Activate the small 🔍 button on Obsidian's ribbon */
|
||||||
@@ -46,6 +44,8 @@ export interface OmnisearchSettings extends WeightingSettings {
|
|||||||
CtrlNP: boolean
|
CtrlNP: boolean
|
||||||
/** Key for the welcome message when Obsidian is updated. A message is only shown once. */
|
/** Key for the welcome message when Obsidian is updated. A message is only shown once. */
|
||||||
welcomeMessage: string
|
welcomeMessage: string
|
||||||
|
/** If a query returns 0 result, try again with more relax conditions */
|
||||||
|
retryWhenZeroResult: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -71,7 +71,7 @@ export class SettingsTab extends PluginSettingTab {
|
|||||||
containerEl.empty()
|
containerEl.empty()
|
||||||
|
|
||||||
// Settings main title
|
// Settings main title
|
||||||
containerEl.createEl('h2', { text: 'Omnisearch settings' })
|
containerEl.createEl('h2', { text: 'Omnisearch' })
|
||||||
|
|
||||||
// Sponsor link - Thank you!
|
// Sponsor link - Thank you!
|
||||||
const divSponsor = containerEl.createDiv()
|
const divSponsor = containerEl.createDiv()
|
||||||
@@ -101,7 +101,8 @@ export class SettingsTab extends PluginSettingTab {
|
|||||||
const diacriticsDesc = new DocumentFragment()
|
const diacriticsDesc = new DocumentFragment()
|
||||||
diacriticsDesc.createSpan({}, span => {
|
diacriticsDesc.createSpan({}, span => {
|
||||||
span.innerHTML = `Normalize diacritics in search terms. Words like "brûlée" or "žluťoučký" will be indexed as "brulee" and "zlutoucky".<br/>
|
span.innerHTML = `Normalize diacritics in search terms. Words like "brûlée" or "žluťoučký" will be indexed as "brulee" and "zlutoucky".<br/>
|
||||||
<strong style="color: var(--text-accent)">Needs a restart to fully take effect.</strong>`
|
<strong style="color: var(--text-accent)">You probably shouldn't disable this. Needs a restart to fully take effect.</strong>
|
||||||
|
`
|
||||||
})
|
})
|
||||||
new Setting(containerEl)
|
new Setting(containerEl)
|
||||||
.setName('Ignore diacritics')
|
.setName('Ignore diacritics')
|
||||||
@@ -117,7 +118,7 @@ export class SettingsTab extends PluginSettingTab {
|
|||||||
const indexedFileTypesDesc = new DocumentFragment()
|
const indexedFileTypesDesc = new DocumentFragment()
|
||||||
indexedFileTypesDesc.createSpan({}, span => {
|
indexedFileTypesDesc.createSpan({}, span => {
|
||||||
span.innerHTML = `In addition to standard <code>md</code> files, Omnisearch can also index other plain text files.<br/>
|
span.innerHTML = `In addition to standard <code>md</code> files, Omnisearch can also index other plain text files.<br/>
|
||||||
Add extensions separated by a space. Example: <code>txt org</code>.<br />
|
Add extensions separated by a space, without the dot. Example: "<code>txt org</code>".<br />
|
||||||
<strong style="color: var(--text-accent)">Needs a restart to fully take effect.</strong>`
|
<strong style="color: var(--text-accent)">Needs a restart to fully take effect.</strong>`
|
||||||
})
|
})
|
||||||
new Setting(containerEl)
|
new Setting(containerEl)
|
||||||
@@ -133,43 +134,18 @@ export class SettingsTab extends PluginSettingTab {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
// // Background processes
|
// Ignore diacritics
|
||||||
// new Setting(containerEl)
|
new Setting(containerEl)
|
||||||
// .setName(
|
.setName('Retry queries that return zero result')
|
||||||
// `Background processes (default: ${DEFAULT_SETTINGS.backgroundProcesses})`
|
.setDesc(
|
||||||
// )
|
`When a query returns zero result, Omnisearch will try again (but harder). Enabling this may incur some freezes.`
|
||||||
// .setDesc('The maximum number of processes for background work, like PDF indexing. This value should not be higher than your number of CPU cores.')
|
)
|
||||||
// .addSlider(cb => {
|
.addToggle(toggle =>
|
||||||
// cb.setLimits(1, 16, 1)
|
toggle.setValue(settings.retryWhenZeroResult).onChange(async v => {
|
||||||
// .setValue(settings.backgroundProcesses)
|
settings.retryWhenZeroResult = v
|
||||||
// .setDynamicTooltip()
|
await saveSettings(this.plugin)
|
||||||
// .onChange(v => {
|
})
|
||||||
// settings.backgroundProcesses = v
|
)
|
||||||
// saveSettings(this.plugin)
|
|
||||||
// })
|
|
||||||
// })
|
|
||||||
|
|
||||||
// // Store index
|
|
||||||
// const serializedIndexDesc = new DocumentFragment()
|
|
||||||
// serializedIndexDesc.createSpan({}, span => {
|
|
||||||
// span.innerHTML = `This will speedup startup times after the initial indexing. Do not activate it unless indexing is too slow on your device:
|
|
||||||
// <ul>
|
|
||||||
// <li>PDF indexing is not affected by this setting</li>
|
|
||||||
// <li>⚠️ The index can become corrupted - if you notice any issue, disable and re-enable this option to clear the cache.</li>
|
|
||||||
// <li>⚠️ Cache files in <code>.obsidian/plugins/omnisearch/*.data</code> must not be synchronized between your devices.</li>
|
|
||||||
// </ul>
|
|
||||||
// <strong style="color: var(--text-accent)">Needs a restart to fully take effect.</strong>
|
|
||||||
// `
|
|
||||||
// })
|
|
||||||
// new Setting(containerEl)
|
|
||||||
// .setName('Persist cache on disk')
|
|
||||||
// .setDesc(serializedIndexDesc)
|
|
||||||
// .addToggle(toggle =>
|
|
||||||
// toggle.setValue(settings.persistCache).onChange(async v => {
|
|
||||||
// settings.persistCache = v
|
|
||||||
// await saveSettings(this.plugin)
|
|
||||||
// })
|
|
||||||
// )
|
|
||||||
|
|
||||||
// PDF Indexing
|
// PDF Indexing
|
||||||
const indexPDFsDesc = new DocumentFragment()
|
const indexPDFsDesc = new DocumentFragment()
|
||||||
@@ -201,9 +177,7 @@ export class SettingsTab extends PluginSettingTab {
|
|||||||
// Show Ribbon Icon
|
// Show Ribbon Icon
|
||||||
new Setting(containerEl)
|
new Setting(containerEl)
|
||||||
.setName('Show ribbon button')
|
.setName('Show ribbon button')
|
||||||
.setDesc(
|
.setDesc('Add a button on the sidebar to open the Vault search modal.')
|
||||||
'Add a button on the sidebar to open the Vault search modal.'
|
|
||||||
)
|
|
||||||
.addToggle(toggle =>
|
.addToggle(toggle =>
|
||||||
toggle.setValue(settings.ribbonIcon).onChange(async v => {
|
toggle.setValue(settings.ribbonIcon).onChange(async v => {
|
||||||
settings.ribbonIcon = v
|
settings.ribbonIcon = v
|
||||||
@@ -231,9 +205,7 @@ export class SettingsTab extends PluginSettingTab {
|
|||||||
// Show context excerpt
|
// Show context excerpt
|
||||||
new Setting(containerEl)
|
new Setting(containerEl)
|
||||||
.setName('Show previous query results')
|
.setName('Show previous query results')
|
||||||
.setDesc(
|
.setDesc('Re-executes the previous query when opening Omnisearch')
|
||||||
'Re-executes the previous query when opening Omnisearch'
|
|
||||||
)
|
|
||||||
.addToggle(toggle =>
|
.addToggle(toggle =>
|
||||||
toggle.setValue(settings.showPreviousQueryResults).onChange(async v => {
|
toggle.setValue(settings.showPreviousQueryResults).onChange(async v => {
|
||||||
settings.showPreviousQueryResults = v
|
settings.showPreviousQueryResults = v
|
||||||
@@ -311,27 +283,29 @@ export class SettingsTab extends PluginSettingTab {
|
|||||||
|
|
||||||
new Setting(containerEl).setName('Shortcuts').setHeading()
|
new Setting(containerEl).setName('Shortcuts').setHeading()
|
||||||
|
|
||||||
new Setting(containerEl)
|
const ctrljk = new DocumentFragment()
|
||||||
.setName(
|
ctrljk.createSpan({}, span => {
|
||||||
'Use [Ctrl/Cmd]+j/k to navigate up/down in the results, if Vim mode is enabled'
|
span.innerHTML =
|
||||||
)
|
'Use <code>[Ctrl/Cmd]+j/k</code> to navigate up/down in the results, if Vim mode is enabled'
|
||||||
.addToggle(toggle =>
|
})
|
||||||
toggle.setValue(settings.CtrlJK).onChange(async v => {
|
new Setting(containerEl).setName(ctrljk).addToggle(toggle =>
|
||||||
settings.CtrlJK = v
|
toggle.setValue(settings.CtrlJK).onChange(async v => {
|
||||||
await saveSettings(this.plugin)
|
settings.CtrlJK = v
|
||||||
})
|
await saveSettings(this.plugin)
|
||||||
)
|
})
|
||||||
|
)
|
||||||
|
|
||||||
new Setting(containerEl)
|
const ctrlnp = new DocumentFragment()
|
||||||
.setName(
|
ctrlnp.createSpan({}, span => {
|
||||||
'Use [Ctrl/Cmd]+n/p to navigate up/down in the results, if Vim mode is enabled'
|
span.innerHTML =
|
||||||
)
|
'Use <code>[Ctrl/Cmd]+j/k</code> to navigate up/down in the results, if Vim mode is enabled'
|
||||||
.addToggle(toggle =>
|
})
|
||||||
toggle.setValue(settings.CtrlNP).onChange(async v => {
|
new Setting(containerEl).setName(ctrlnp).addToggle(toggle =>
|
||||||
settings.CtrlNP = v
|
toggle.setValue(settings.CtrlNP).onChange(async v => {
|
||||||
await saveSettings(this.plugin)
|
settings.CtrlNP = v
|
||||||
})
|
await saveSettings(this.plugin)
|
||||||
)
|
})
|
||||||
|
)
|
||||||
|
|
||||||
// #endregion Shortcuts
|
// #endregion Shortcuts
|
||||||
}
|
}
|
||||||
@@ -368,14 +342,15 @@ export const DEFAULT_SETTINGS: OmnisearchSettings = {
|
|||||||
showExcerpt: true,
|
showExcerpt: true,
|
||||||
showCreateButton: false,
|
showCreateButton: false,
|
||||||
showPreviousQueryResults: true,
|
showPreviousQueryResults: true,
|
||||||
|
retryWhenZeroResult: false,
|
||||||
|
|
||||||
weightBasename: 2,
|
weightBasename: 2,
|
||||||
weightH1: 1.5,
|
weightH1: 1.5,
|
||||||
weightH2: 1.3,
|
weightH2: 1.3,
|
||||||
weightH3: 1.1,
|
weightH3: 1.1,
|
||||||
|
|
||||||
CtrlJK: false,
|
CtrlJK: true,
|
||||||
CtrlNP: false,
|
CtrlNP: true,
|
||||||
|
|
||||||
// persistCache: false,
|
// persistCache: false,
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user