Files
obsidian-tannersearch/README.md
2022-06-25 13:54:25 +02:00

4.2 KiB

Omnisearch for Obsidian

Sponsor me

GitHub release (latest by date including pre-releases) GitHub release (latest by date including pre-releases) Active Development

Omnisearch is a search engine that "just works". It always instantly shows you the most relevant results, thanks to its smart weighting algorithm.

Under the hood, it uses the excellent MiniSearch library.

Features

  • Automatic document scoring using the BM25 algorithm
    • The relevance of a document against a query depends on the number of times the query terms appear in the document, its filename, and its headings
  • Keyboard first: you never have to use your mouse
  • Instant & highlighted search results
  • Resistance to typos
  • In-file search to quickly skim multiple results in a single note
  • Search filters: expressions in quotes and exclusions
  • Respects Obsidian's "Excluded Files" list (results are downranked, not hidden)

Installation

You can check the CHANGELOG for more information on the different versions.

Usage

Omnisearch can be used within 2 different contexts:

Omnisearch's core feature, accessible with the Command Palette "Omnisearch: Vault search". This modal searches through your vault and returns the most relevant notes. That's all you need to find a note.

If you want to list all the search matches of a single note, you can do so by using alt+enter to open the In-File Search.

Also accessible through the Command Palette "Omnisearch: In-file search". This modal searches through the active note's content and lists the matching results. Just press enter to automatically scroll to the right place.

Public API

A simple API object is available to interact with Omnisearch. If you're using this package, it's accessible through pluginApi('omnisearch'). Otherwise, you can access it with app.plugins.plugins.omnisearch.api.

At the time of writing, the API is a work-in-progress feature, but should be stable enough to use.

This API is an experimental feature, the ResultNote interface will likely change. The search function returns at most 50 results

{
  search: (query: string) => Promise<ResultNote[]>
}

type ResultNoteApi = {
  score: number
  path: string
  basename: string
  foundWords: string[]
  matches: SearchMatch[]
}

type SearchMatch = {
  match: string
  offset: number
}

DataviewJS example:

```dataviewjs
const results = await app.plugins.plugins.omnisearch.api.search('your query')
const arr = dv.array(results).sort(r => r.score, 'desc')
dv.table(['File', 'Score'], arr.map(o => [dv.fileLink(o.path), Math.round(o.score)]))
```

Customization

There are several CSS classes you can use to customize the appearance of Omnisearch.

.omnisearch-modal
.omnisearch-result
.omnisearch-result__title
.omnisearch-result__counter
.omnisearch-result__body
.omnisearch-highlight

For example, if you'd like the usual yellow highlight on search matches, you can add this code inside a CSS snippet file:

.omnisearch-highlight {
    color: var(--text-normal);
    background-color: var(--text-highlight-bg);
}

LICENSE

Omnisearch is licensed under GPL-3.