搜索是一个[[核心插件|核心插件]],帮助你通过搜索词和运算符在 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]] 不支持嵌入的[[发布功能限制#搜索|搜索结果]]。要查看实时渲染示例,请在你的仓库中使用上面的代码块。
![[search-query-rendered.png]]