搜尋是一個[[核心外掛程式|核心外掛]],能夠透過搜尋詞和運算子來縮小範圍,幫助你在 Obsidian 保管庫中尋找資料。
預設情況下,你可以在左側邊欄找到搜尋 ![[lucide-search.svg#icon]]。你也可以按下 `Ctrl+Shift+F`(Windows/Linux)或 `Command+Shift+F`(macOS)來開啟搜尋。
- **搜尋選取文字**:如果你在編輯器中選取文字,然後用快捷鍵開啟搜尋,搜尋會顯示所選文字的搜尋結果。
- **搜尋最近的搜尋詞**:以空白搜尋詞開啟搜尋,即可列出最近的搜尋詞。點擊任一項即可再次使用該搜尋詞。
> [!info] 已排除的檔案
> 符合你[[設定#已排除的檔案|已排除的檔案]]模式的檔案不會出現在搜尋結果中。
## 搜尋詞
搜尋詞是你在搜尋欄位中輸入的單字或片語。學會如何有效撰寫搜尋詞,即使在大型保管庫中也能快速找到你需要的內容。Obsidian 僅搜尋筆記和白板的內容。
> [!tip]- 搜尋路徑和檔案名稱
> 預設情況下,你只能搜尋筆記和白板的路徑和檔案名稱。若要搜尋保管庫中任何檔案的路徑或檔案名稱,請使用 `path` 或 `file` 運算子。
搜尋詞中的每個單字會在每個檔案中獨立比對。若要搜尋完全符合的片語,請用引號將其包圍,例如 `"star wars"`。若要在完全符合的片語中搜尋帶引號的文字,你可以在引號前加上反斜線(`\`)來_跳脫_引號,例如 `"they said \"hello\" to each other"`。
你可以控制是否回傳包含搜尋詞中_全部_單字或_任一_單字的檔案:
- `meeting work` 回傳同時包含 `meeting` 和 `work` 的檔案。
- `meeting OR work` 回傳包含 `meeting` 或 `work` 的檔案。
你甚至可以在同一個搜尋詞中組合這兩種方式。
- `meeting work OR meetup personal` 回傳關於工作會議和個人聚會的檔案。
你可以使用括號來控制每個表達式的優先順序。
- `meeting (work OR meetup) personal` 回傳包含 `meeting`、`personal`,以及 `work` 或 `meetup` 其中之一的檔案。
若要從搜尋結果中排除或否定某個單字,請在其前面加上連字號(`-`):
- `meeting -work` 回傳包含 `meeting` 但不包含 `work` 的檔案。
你可以排除多個表達式:
- `meeting -work -meetup` 回傳包含 `meeting` 但不包含 `work` 或 `meetup` 的檔案。
你可以使用括號排除表達式的組合:
- `meeting -(work meetup)` 回傳包含 `meeting` 但不同時包含 `work` _和_ `meetup` 的檔案。
若要使用小於(`<`)和大於(`>`)運算子篩選結果,請用方括號(`[]`)或引號(`""`)包圍:
- `meeting [duration:<5]` 回傳存在 meeting 且 duration 小於 5 的檔案。
- `meeting [duration:>5]` 回傳存在 meeting 且 duration 大於 5 的檔案。
> [!tip]- 解釋搜尋詞
> 如果你需要排除複雜搜尋詞的問題,可以在搜尋中點擊**解釋搜尋詞**來取得搜尋詞的說明。
## 搜尋運算子
搜尋運算子能讓搜尋詞更精確,進一步篩選結果。
部分運算子甚至允許你在括號內加入巢狀搜尋詞,例如:`task:(call OR email)`。
| 搜尋運算子 | 說明 |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `file:` | 在檔案名稱中尋找文字。比對保管庫中的任何檔案。<p/>範例:`file:.jpg` 或 `file:202209`。 |
| `path:` | 在檔案路徑中尋找文字。比對保管庫中的任何檔案。<p/>範例:`path:"Daily notes/2022-07"`。 |
| `content:` | 在檔案內容中尋找文字。<p/>範例:`content:"happy cat"`。 |
| `match-case:` | 區分大小寫比對。<p/>範例:`match-case:HappyCat`。 |
| `ignore-case:` | 不區分大小寫比對。<p/>範例:`ignore-case:ikea`。 |
| `tag:` | 在檔案中尋找標籤。<p/>範例:`tag:#work`。<p/>請注意搜尋 `tag:#work` 不會回傳 `#myjob/work` 的結果。<br /><br />**注意**:由於 `tag:` 會忽略程式碼區塊和非 Markdown 內容中的比對結果,因此通常比一般全文搜尋 `#work` 更快且更準確。 |
| `line:` | 尋找至少包含一行符合 `x` 的檔案。<p/>範例:`line:(mix flour)`。<p/><br>**注意**:使用 `-line` 會否定搜尋,表示會尋找沒有任何一行符合 `x` 的檔案。 |
| `block:` | 在同一區塊中尋找比對結果。<p/>範例:`block:(dog cat)`。<p/>**注意**:由於 `block:` 需要搜尋解析每個檔案中的 Markdown 內容,可能會導致搜尋詞花費更長的時間完成。 |
| `section:` | 在同一區段(兩個標題之間的文字)中尋找比對結果。<p/>範例:`section:(dog cat)`。 |
| `task:` | 在[[基本格式語法#待辦清單\|待辦項目]]中逐區塊尋找比對結果。<p/>範例:`task:call`。 |
| `task-todo:` | 在*未完成*的[[基本格式語法#待辦清單\|待辦項目]]中逐區塊尋找比對結果。<p/>範例:`task-todo:call`。 |
| `task-done:` | 在*已完成*的[[基本格式語法#待辦清單\|待辦項目]]中逐區塊尋找比對結果。<p/>範例:`task-done:call`。 |
## 搜尋屬性
你可以在搜尋詞中使用儲存於[[屬性]]中的資料。
使用方括號包圍屬性名稱 `[property]` 來回傳具有該屬性的檔案:
- `[aliases]` 回傳包含 `aliases` 屬性的檔案
使用方括號和冒號 `[property:value]` 來回傳具有該屬性和值的檔案:
- `[aliases:Name]` 回傳 `aliases` 屬性值為 `Name` 的檔案
使用 `null` 作為值來尋找沒有值的屬性:
- `[aliases:null]` 回傳 `aliases` 屬性存在但沒有值的檔案
> [!info]+ 空值
> `null` 運算子在屬性為空(例如 `aliases: `)時有效,但在屬性包含空引號(`""`)或空方括號(`[]`)時無效。
屬性和值都允許子查詢,例如使用括號分組、`OR` 運算子、雙引號進行完全比對,以及正則表達式。
- `[status:Draft OR Published]` 回傳 `status` 屬性值為 `Draft` 或 `Published` 的檔案
## 變更大小寫敏感度
預設情況下,搜尋詞不區分大小寫。如果你想搜尋與搜尋詞完全相同的大小寫,請在搜尋列中選取**區分大小寫** ![[obsidian-icon-upper-lowercase.svg#icon]]。
此設定可以切換。如果**區分大小寫**圖示被反白,表示你目前正在進行區分大小寫的搜尋。
## 變更結果排序方式
1. 輸入[[#搜尋詞|搜尋詞]]。
2. 在搜尋欄位下方,選取右側的下拉選單。
3. 選取你想要的排序方式。預設為「按檔案名升冪排列 (A-Z)」。
可用的選項如下:
- 按檔案名升冪排列 (A-Z)
- 按檔案名降冪排列 (Z-A)
- 按編輯時間排序(從新到舊)
- 按編輯時間排序(從舊到新)
- 按建檔時間排序(從新到舊)
- 按建檔時間排序(從舊到新)
## 複製搜尋結果
1. 輸入[[#搜尋詞|搜尋詞]]。
2. 在搜尋欄位下方,選取結果數量旁的三點圖示。
3. 選取**複製搜尋結果**。
## 使用正則表達式
正則表達式是一組描述文字模式的字元。若要在搜尋詞中使用正則表達式,請用正斜線(`/`)包圍表達式。
- `/\d{4}-\d{2}-\d{2}/` 比對 ISO 8601 日期,例如 2022-01-01。
你甚至可以將正則表達式與搜尋運算子組合使用:
- `path:/\d{4}-\d{2}-\d{2}/` 回傳檔案路徑中包含日期的檔案。
如需更多關於撰寫正則表達式的資訊,請參考 FreeCodeCamp 的 [Practical Regex guide](https://www.freecodecamp.org/news/practical-regex-guide-with-real-life-examples/) 或 Mozilla 的 [Regular expressions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)。
> [!info]+ JavaScript 風格的正則表達式
> 正則表達式有不同的風格,彼此可能看起來不同。Obsidian 使用 JavaScript 風格的正則表達式。
## 設定搜尋設定
若要設定搜尋,請選取搜尋列右側的**搜尋設定** ![[lucide-sliders-horizontal.svg#icon]] 來查看切換選項。
| 設定 | 說明 |
|-------------------------|-----------------------------------------------------------------------------|
| **解釋搜尋詞** | 分解搜尋詞並以純文字說明。 |
| **摺疊搜尋結果** | 切換是否顯示搜尋內容的上下文。 |
| **顯示更多內容** | 展開搜尋結果以顯示比對結果周圍更多的文字。 |
## 在筆記中嵌入搜尋結果
若要在筆記中嵌入搜尋結果,請新增一個 `query` 程式碼區塊:
````
```query
embed OR search
```
````
[[Obsidian Publish 介紹|Obsidian Publish]] 不支援嵌入的[[Publish 限制#搜尋|搜尋結果]]。若要查看即時渲染的範例,請在你的保管庫中使用上述程式碼區塊。
![[search-query-rendered.png]]