搜索

原文:Searching - Anki Manual (ankiweb.net)

Anki 的浏览界面和筛选牌组功能使用了一种通用的方法来搜索特定的卡片/笔记。这个方法也可以用于调整 FSRS 优化的范围。

简单搜索

当你在搜索框中输入一些文本时,Anki 会找到匹配的笔记并显示它们的卡片。Anki 会在笔记的所有字段中搜索, 但不会搜索标签(查看本节后面以了解如何搜索标签)。一些示例:

dog
搜索「dog」- 会匹配类似「doggy」和「underdog」的单词。

dog cat
找到同时包含「dog」和「cat」的笔记,比如「raining cats and dogs」。

dog or cat
找到包含「dog」或者「cat」的笔记。

dog (cat or mouse)
找到包含「dog」和「cat」,或者「dog」和「mouse」的笔记。

-cat
找到不包含「cat」的笔记。

-cat -mouse
找到既不包含「cat」也不包含「mouse」的笔记。

-(cat or mouse)
与上面相同。

"a dog"
找到确切包含字符序列「a dog」的笔记,比如「atta dog」,但不包括「dog a」或「adog」。

-"a dog"
找到不包含确切字符序列「a dog」的笔记。

d_g
找到包含 d<一个字符>g 的笔记,如 dog、dig、dug 等。

d*g
找到包含 d<零个或多个字符>g 的笔记,如 dg、dog、dung 等。

w:dog
搜索单词「dog」而不是字符序列 - 会匹配「dog」但不包括「doggy」或「underdog」。需要 Anki 2.1.24+、AnkiMobile 2.1.61+ 或 AnkiDroid 2.17+。请注意,格式变化可能会被解释为单词边界。例如,搜索 w:exam 会匹配 example,因为 example 中的「exam」部分是粗体格式。

w:dog*
会匹配「dog」和「doggy」,但不包括「underdog」。

w:*dog
会匹配「dog」和「underdog」,但不包括「doggy」。

从以上可以注意到以下几点:

  • 搜索关键词以空格分隔。

  • 当提供多个搜索关键词时,Anki 会查找同时匹配所有关键词的笔记 - 在每个关键词之间插入一个隐式的 「and」。在 Anki 2.1.24+、AnkiMobile 2.0.60+ 和 AnkiDroid 2.17+ 上,你可以显式设置(「dog and cat」与「dog cat」相同),但较旧的 Anki 版本会将「and」视为要搜索的另一个单词。

  • 如果你只需要匹配其中一个关键词,可以使用「or」。

  • 你可以在关键词前加上减号来查找不匹配该关键词的笔记。

  • 你可以通过将搜索关键词放在括号中来对其进行分组,如「dog (cat or mouse)」示例中那样。这在组合 OR 和 AND 搜索时变得很重要 — 在示例中有括号时,它匹配「dog cat」或「dog mouse」,而没有括号时,它会匹配 「dog and cat」或「mouse」。

  • Anki 只能在你配置的排序字段中的格式内搜索。例如,如果你在某个字段中添加 「example」,其中「exa」部分是粗体,那么除非该字段是排序字段,否则在搜索「example」时将不会匹 配。如果单词没有格式化,或者格式化没有在单词中间变化,那么 Anki 将能够在任何字段中找到它。

  • 标准搜索对拉丁字符进行不区分大小写—— a-z 将匹配 A-Z,反之亦然。其他字符如西里尔字母在标准搜索中是 区分大小写的,但可以通过在单词边界或正则表达式上进行搜索来取消区分大小写(w:re:)。

限定到某个字段

你也可以要求 Anki 只有在特定字段包含某些文本时才匹配。与前面的搜索示例不同,字段搜索默认需要精确匹 配。

正面:dog
找到「正面」字段内容精确为「dog」的笔记。内容为「a dog」的字段将不匹配。

"animal front:a dog"
找到「Animal Front」字段内容精确为「a dog」的笔记。双引号是必需的:请参阅本节后面

正面:*dog*
找到「正面」字段包含 dog 的笔记。

正面:
找到「正面」字段为空的笔记。

正面:_*
找到「正面」字段不为空的笔记。

正面:*
找到有「正面」字段的笔记,无论是否为空。

正*:text
在字段前缀为「正」的字段中找到笔记。需要 Anki 2.1.24+、AnkiMobile 2.1.60+ 或 AnkiDroid 2.17+。

标签、牌组、卡片和笔记

tag:animal
找到带有「animal」标签的笔记,或类似「animal::mammal」的子标签。

tag:none
找到没有标签的笔记。

tag:ani*
找到标签前缀为「ani」的笔记。

deck:french
在名为「French」的牌组中或其子牌组如「French::Vocab」中寻找卡片。

deck:french -deck:french::*
找到「French」中的卡片,但不包括其子牌组。

deck:"french vocab"
搜索带有空格的牌组名称。

"deck:french vocab"
与前面相同。

deck:filtered
仅筛选牌组。

-deck:filtered
仅普通牌组。

preset:"Default"
在所有使用「Default」牌组选项预设的牌组中的卡片。需要 Anki 23.10+、AnkiMobile 23.10+ 或 AnkiDroid 2.17+。

card:forward
找到由名为「Forward」的卡片模板创建的卡片。

card:1
按卡片模板编号搜索卡片,例如要查找笔记的第二个填空题,你可以使用 card:2

note:basic
搜索由名为「Basic」的笔记模板创建的卡片。

忽略重音/组合字符

需要 Anki 2.1.24+、AnkiMobile 2.0.60+ 或 AnkiDroid 2.17+。

你可以使用 nc:(nc 代表「no combining」)使 Anki 忽略组合字符。例如:

nc:uber
匹配带有「uber」、"über"、"Über" 等的笔记。

nc:は
匹配「は」、「ば」、「ぱ」。

忽略组合字符的搜索比正常搜索速度慢。

正则表达式

Anki 2.1.24+、AnkiMobile 2.0.60+ 和 AnkiDroid 2.17+ 支持使用「正则表达式」在笔记中搜索,正则表达式是 一种标准而强大的文本搜索方式。

re: 开始搜索以使用正则表达式。为了简化操作,Anki 会将以下内容视为原始输入,因此请 记住那里的规则。

一些示例:

"re:(some|another).*thing"
找到带有「some」或「another」,后跟 0 个或多个字符,再后跟「thing」的笔记。

re:\d{3}
找到笔记中连续三个数字的笔记。

正则表达式也可以限定在特定字段中。请注意,与特定字段中的普通搜索不同,字段中的正则表达式不要求精确匹 配:

正面:re:[a-c]1
匹配出现在「正面」字段中的 a1、B1 或 c1(不区分大小写)。

正面:re:^[a-c]1$
与前一个示例相同,但如果在 a1/b1/c1 之前或之后有任何其他文本,则不匹配。

Anki 2.1.50+ 支持对标签使用正则表达式:

tag:re:^parent$
找到带有确切标签「parent」的笔记,不考虑任何子标签如「parent::child」。

"tag:re:lesson-(1[7-9]|2[0-5])"
找到带有「lesson-17」至「lesson-25」标签的笔记。

有关正则表达式的更多信息,请参见本网站

需要注意的一些事项:

  • 搜索默认不区分大小写;在搜索的开头使用 (?-i) 来开启区分大小写。
  • 某些文本如空格和换行在 HTML 中可能会有不同的表示——你可以在编辑窗口中使用 HTML 编辑器查看底层 HTML 内容。
  • 有关 Anki 正则表达式支持的具体细节,请参 见regex crate 文档

卡片状态

is:due
等待学习的复习中卡片和学习中卡片。

is:new
新卡片。

is:learn
在学习中的卡片。

is:review
复习(包括到期的和未到期的)和遗忘的卡片。

is:suspended
自动或手动暂停的卡片。

is:buried
自动或手动搁置的卡片。

遗忘的卡片属于前面几个类别中的一些,因此可能有必要结合不同的搜索关键词以获得 更准确的结果:

is:learn is:review
遗忘并等待重学的卡片。

-is:learn is:review
不包括遗忘卡片的复习卡片。

is:learn -is:review
第一次在学习中的卡片。

旗标

flag:1
带有红色旗标的卡片。

flag:2
带有橙色旗标的卡片。

flag:3
带有绿色旗标的卡片。

flag:4
带有蓝色旗标的卡片。

flag:5
带有粉色旗标的卡片。

flag:6
带有绿松石色旗标的卡片。

flag:7
带有紫色旗标的卡片。

卡片属性

prop:ivl>=10
间隔为 10 天或更长的卡片。

prop:due=1
明天到期的卡片。

prop:due=-1
昨天到期但尚未回答的卡片。

prop:due>=1
所有未来到期的卡片,包括明天。

prop:due<=-1
所有过期的卡片。

prop:due>-1 prop:due<1
昨天、今天和明天到期的卡片。

prop:reps<10
回答次数少于 10 次的卡片。

prop:lapses>3
遗忘次数超过 3 次的卡片。

prop:ease!=2.5
比默认简易度更容易或更难的卡片。

prop:cdn:d>5
在自定义数据中 d 的值大于 5 的卡片(通常指 FSRS 中的难度,需要 Anki 2.1.64+)。

prop:cds:v=reschedule
在自定义数据中 v 的值等于 reschedule 的卡片(需要 Anki 23.10+)。

以下搜索需要 Anki 23.10+ 并启用 FSRS:

prop:s>21
稳定性超过 21 天的卡片。

prop:d>0.3
难度超过 0.3 的卡片。

prop:r<0.9
可提取性低于 0.9 的卡片。

最近事件

添加

added:1
今天添加的卡片。

added:7
最近 7 天内添加的卡片。

检查是针对卡片创建时间而不是笔记创建时间进行的,因此在时间范围内生成的卡片即使其笔记是很久之前添加的 也会包含在内。

编辑

edited:n
笔记文本在最近 n 天内被添加/编辑的卡片。

这需要 Anki 2.1.28+ 或 AnkiMobile 2.0.64+。

回答

rated:1
今天回答的卡片。

rated:1:2
今天回答为困难(2)的卡片。

rated:7:1
最近 7 天回答为重来(1)的卡片。

rated:31:4
最近 31 天回答为简单(4)的卡片。

Anki 2.1.39+ 支持超过 31 天的评分搜索。

第一次回答

需要 Anki 2.1.45+。

introduced:1
今天第一次回答的卡片。

introduced:365
最近 365 天内第一次回答的卡片。

匹配特殊字符

如果你使用的是早于 Anki 2.1.36 的版本,以下搜索可能不起作用。

如上一节所示,一些字符如 *_" 在搜索中具有特殊含义。如果你需要在搜索中定位这些字符,需告 诉 Anki 不要将它们视为特殊字符。这称为「转义字符」,主要是通过使用双引号和反斜杠实现的。

  • 空格
    要匹配包含空格的内容,请将「整个关键词」用双引号括起来。如果是冒号搜索,你也可以选择只引用 部分:"在冒号之后"

  • And/Or
    要搜索 orand 的单词,用双引号包围它们。例如,dog "and" cat 搜索「dog」、「cat」和「and」 这个词。如果你像前面的例子那样用引号包围整个搜索关键词,则不需要转义 andor

  • ", *_
    在这些字符前加上反斜杠以将它们视为字面上。例如,_ 将匹配任何单个字符,但 \_ 只匹配实际的下划 线。

  • \
    因为反斜杠用于去除其他字符的特殊含义,它本身也被视为特别的。如果你需要搜索实际的反斜杠,请使用 \\ 而不是 \

  • ()
    你可以通过用引号括起整个关键词、使用反斜杠或同时使用这两者来搜索括号。例 如,"(text)"\ (text\ )"\(text\)" 是等价搜索,都搜索「(text)」。

  • -
    - 开头的搜索词通常会反转它:例如,-dog 匹配除了 dog 之外的所有内容。如果你希望包含实际的连 字符,可以使用反斜杠,或将文本包含在引号中。例如,\-free"-free" 将匹配「guilt-free」和 「cruelty-free」。

  • :
    除非冒号前面有另一个未转义的冒号,否则冒号必须使用反斜杠进行转义。例如,w:3:30 在单词边界上搜索 「3:30」,不需要使用反斜杠。然而,如果你不使用冒号搜索,则冒号需要像这样转义:3\:30

  • &<>
    &<> 在 Anki 中搜索时被视为 HTML,因此包含它们的搜索无法按预期工作。但是,你可以通过使 用它们对应的 HTML 实体名称进行搜索(&amp; 表示 &&lt; 表示 <&gt; 表示 >)。例如,搜 索 &amp;text 会在字段中搜索包含 &text 的笔记。

原始输入

由某些关键词(如 re:)前缀的文本将被视为原始输入。也就是说,上面列出的字符在很大程度上失去了它们的 特殊含义。在这样的上下文中,只需要最少的转义以防止歧义:

  • " 必须转义。

  • 空格和未转义的括号需要将搜索词加上引号。

  • 搜索词不能以奇数个反斜杠结尾。

对象 ID

nid:123
笔记 ID 为 123 的笔记

cid:123,456,789
卡片 ID 为 123、456 或 789 的所有卡片

笔记和卡片 ID 可以在浏览器中的卡片信息对话框中找到。这些搜索在进行插件开发或与数据库紧密 工作时也可能会有所帮助。