![[Search.png]]
検索は強力で便利な機能ですが混乱を招く可能性があります。単に検索したい単語を入力するだけでもほとんどの場合は機能しますが、このプラグインには、必要なものを正確に見つけるために検索対象を絞り込む多くの機能があります。
## クイックガイド
### 検索を開始する
`Ctrl+Shift+F` または `Cmd+Shift+F` で検索機能を呼び出せます。 「設定」 → 「ホットキー」からホットキーのカスタマイズを行うことも可能です。検索機能が呼び出されると、検索バーに自動的にフォーカスが移動するので、そのままクエリを入力し始めることができます。
### 選択したテキストの検索
テキストを選択した後、上で説明したように検索機能を呼び出すことでそのまま選択したテキストを検索できます。
## 検索履歴
Obsidianは最近使用した検索クエリを記憶しています。
それらのクエリは検索バーが空白のときに表示されます。クエリのいずれかをクリックすることで簡単に再検索が可能になります。
検索履歴をクリアするには、`X` ボタンをクリックしてください。
## 検索設定
検索する際に利用できるいくつかのモード切り替えキーがあります。
- `大文字/小文字を区別` は大文字と小文字の区別するかしないかを切り替えることができます。しかし、上述の `match-case:` と `ignore-case:` 演算子を使った検索をオーバーライドしてしまうことに注意してください。
- `検索ワードを表示` は検索クエリが実際に何をしているかの簡単な説明を表示します。
- `検索結果を折りたたむ` は検索に一致したノート名のみ表示するモードと、一致した行も表示するモードの切り替えを行えます。各ノートのファイル名の隣にある折りたたみ式の三角形アイコンをクリックすることで検索結果の展開と折りたたみがそれぞれできます。
- `前後を表示` は検索に一致した箇所周囲のテキストをより多く表示するように展開します。
- `ソート順の変更` は[[ファイルエクスプローラ]]でのソートと同じように様々な順序によって検索結果をソートします。
## 検索結果のコピー
検索結果をリストとして素早く簡単に取得するには、`検索結果をコピー` ボタンを使用してください。
検索結果のリストにパスを表示させるかどうかや、パスを表示させる場合に使用するリンクスタイル(ウィキリンクまたはマークダウンリンク)とリストの表示方法をカスタマイズできます。
## 検索結果の埋め込み
ノート内に検索結果を埋め込むことが可能です。
例えば、次のように入力した場合:
<pre><code>```query
embed OR search
```</code></pre>
この埋め込み検索のビューを見ることができます(ノート: 2020/01/18時点での[[Obsidian Publish]]では機能しません)。
```query
embed OR search
```
## 検索のシンタックス
### サブクエリの組み合わせ
検索クエリを作成する場合、「検索ワードを表示」をクリックすると検索対象の説明が表示できます。この機能は複雑な検索に利用するクエリを修正するのに大変役立ちます。
- スペースで区切られた複数単語の検索クエリを作成する場合、それらの単語は各ノートで個別に検索されます。例えば、`foo bar` と検索すると、`foo` と `bar` の両方をテキスト中のどこかに含むノートが検索されます。
- `"引用符で囲まれた文字列"` の検索クエリの場合、スペースで区切られた複数の連続する単語、つまり、フレーズを検索できます。`"foo bar"` というように複数単語を引用符で囲んで検索した場合は、それらの単語が隣り合っているノートのみが見つかります。引用符を実際に含む文字列を検索したい場合はバックスラッシュ `\"` を利用することで二重引用符をエスケープできます。また `\\` を使えば引用符と同じようにバックスラッシュをエスケープできます。
- 検索ではブール演算を利用できます。`OR` を使えば単語のいずれかにマッチし、`-` はクエリの否定、スペース文字はブール値の"and"として使用されます。
- 例えば、`foo OR bar` で検索するとそれらの単語のいずれかを含むようなすべてのノートが検索されますが、その場合は同一のノートに両方の単語が含まれる必要はありません。`foo -bar` で検索すると `foo` を含むが、`bar` を含むものは除外されるように検索されます。
- 丸括弧はブール演算のグループ化に利用できます。例えば、`((a OR b) (c OR d))` というようにグループ化してブール演算検索できます。これは複雑な検索によって目的の順序で処理が行われるようにしたい場合に役立ちます。
- 正規表現(Regex)が検索で利用可能です。正規表現を示すにはスラッシュを使用します。例えば、`/[a-z]{3}/` の形で正規表現として検索できます。ObsidianではJavaScriptフレーバーの正規表現を採用しています。JavaScriptフレーバーの正規表現については[こちらのサイト](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)から学ぶことができます。
### 検索演算子
複数の特殊文字が検索に利用できます。`file:("to be" OR -"2B")` のように、いくつかの演算子は丸括弧によりネストされたクエリ作成を認めています。`-` を使用して検索から特定の結果を除外することが可能です(例: `foo -tag:#bar`)。
- `file:(...)` はそれに続くファイル名についてのサブクエリを実行できます。例えば、`file:".jpg"` というような形で検索できます。Zettelkasten-style UIDを利用している場合は、このクエリが狭い時間範囲での検索に役立ちます。`file:202007` では2020年の7月に作成されたファイルを検索できます。
- `path:(...)` はそれに続くファイルパスについてのサブクエリを実行できます。ファイルパスはルートからの絶対パスを入力します。例えば、`path:"Daily Notes/2020-07"` という形で検索できます。
- `content:(...)` はそれに続くファイルコンテンツについてのサブクエリを実行できます。例えば、`content:"happy cat"` という形で検索できます。
- `match-case:(...)` と `ignore-case:(...)` を利用すると、それに続くサブクエリの大文字と小文字を区別する一致ロジックをオーバーライドします。
- `tag:` はファイル内で指定したタグを検索します。例えば、`tag:#仕事` で検索できます。この演算子の利用ではキャッシュされた情報を利用し、マークダウンテキストでないコードブロックとセクション内のテキストを無視するため、`#仕事` というプレーンテキストでのタグ検索よりも高速で正確に検索できます。
- `line:(...)` はファイルベースよりはむしろラインベースでのサブクエリを実行します。例えば、`foo bar` で検索する場合、これによって最初の段落内に `foo` を持ち、最後の段落に `bar` を持つファイルが一致しますが、`line:(foo bar)` という検索は同じ行に `foo` と `bar` がある場合にのみ一致します。
- `block:(...)` はブロックベースのサブクエリを実行します。各ブロックは通常空行によって区切られたマークダウンブロックとして定義されます。これは各ファイルを解析する必要があり、計算コストが高くなります。つまり、他のモードよりも時間のかかる可能性があります。
- `section:(...)` はセクションごとのサブクエリを実行します。各セクションは最初の見出しを含む2つの見出し間のテキストです。
- `task:(...)` は各[[ノートをフォーマットする#タスクリスト|タスク]]に対してのみブロックごとのサブクエリを実行します。すべてのタスクに一致させるには、`task:""` を使用してください。
- `task-todo:(...)` は各*未完了*[[ノートをフォーマットする#タスクリスト|タスク]]に対してのみブロックごとのサブクエリを実行します。すべての未完了タスクに一致させるには、`task-todo:""` を使用してください。
- `task-done:(...)` は各*完了*[[ノートをフォーマットする#タスクリスト|タスク]]に対してのみブロックごとのサブクエリを実行します。すべての完了タスクに一致させるには、`task-done:""` を使用してください。