Files
skill-repo/skills/obsidian-vault-kb/references/search-strategy.md
T
Henner M. Kruse c774df7ad7 Initial commit
2026-08-04 00:18:16 +02:00

89 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Search Strategy for the Obsidian Vault (manual fallback)
The three wrapper scripts (`scripts/vault_index.sh`, `scripts/vault_search.sh`,
`scripts/vault_backlinks.sh`) cover the common cases and are the only
commands whitelisted by `/setup`. Use the raw commands below only when the
scripts genuinely don't cover what's needed (e.g. a one-off query shape they
don't support). These are **not** whitelisted, so each one will prompt the
user for confirmation — that's intentional, since they aren't confined to
the configured vault the way the scripts are.
## 1. Get an overview of the structure
```bash
# Folder structure (= topical categories per the user's own convention)
find <vault> -type d -not -path '*/.obsidian*' -not -path '*/.git*' | sort
# Do "index"/"MOC" (Map of Content) files exist? These often bundle links
# on a topic and are a good entry point.
find <vault> -iname '*index*.md' -o -iname '*moc*.md' -o -iname '*overview*.md'
```
## 2. Full-text search
Prefer `rg` (ripgrep), it's much faster and respects `.gitignore`:
```bash
# Basic search, case-insensitive, with file names and line numbers
rg -i -n "<search-term>" <vault> -g '!.obsidian' -g '!.git'
# Only file names of matches (for a quick overview)
rg -i -l "<search-term>" <vault>
# Combine multiple terms (AND via chained greps)
rg -i -l "term-a" <vault> | xargs rg -i -l "term-b"
```
Fallback without ripgrep:
```bash
grep -ril "<search-term>" <vault> --include='*.md'
```
## 3. Use frontmatter and tags
Obsidian frontmatter is a YAML block at the top of a file between `---`.
Tags can live there (`tags: [topic-a, topic-b]`) or inline in the text
(`#topic-a`).
```bash
# All notes with a specific tag in the frontmatter
rg -l '^tags:.*topic-a' <vault>
# All notes with a specific inline tag
rg -l '#topic-a\b' <vault>
# View the frontmatter of a single file (the first 15 lines are usually enough)
head -n 15 "<path-to-file>.md"
```
If the vault uses a consistent tag scheme (e.g. `status/open`,
`system/hostname`), use it as an additional filter dimension, not just
full text.
## 4. Wikilinks and backlinks
`[[NoteName]]` points to another note. For relationships between
topics/entities, backlinks are often more informative than full-text
search:
```bash
# Which notes link to "note-name"?
rg -n '\[\[note-name(\||\]\])' <vault>
# List all outgoing links of a specific note
rg -o '\[\[[^]]+\]\]' "<path-to-file>.md"
```
For troubleshooting-style questions, it's often worth following 12 link
hops from the topically closest note (e.g. hardware note → linked
network note → linked incident note) instead of only matching full text
in isolation.
## 5. Large vaults
If there are too many matches: first narrow down to the most plausible
subfolder from the structure overview (step 1), then search in detail.
Don't read every matching file in full by default — check grep context
first (`rg -C 3 ...`) and only open whole files when genuinely needed.