如果你是 Apple 开发者,则可以将 Core Spotlight 框架添加到你的 App,并让它在内部为 App 的内容编制索引,以便 App 用户自动获得内容。
Foundation 框架中还有其他 Spotlight API,可用于从应用内对 Spotlight 数据执行本地搜索。
你还需要将 Core Services.framework 添加到你的 Xcode 项目中,因为它是文件元数据 API 所在的位置。
还有一些 iCloud Spotlight 功能,我们不会在这里介绍。
设置要编制索引的卷
在 macOS 上,您可以指示您希望 Spotlight 为哪些卷编制索引,哪些宗卷不编制索引。默认情况下,如果您不从 Spotlight 中排除卷,则系统会为这些卷编制索引。
如果从 Spotlight 索引中排除卷,则其内容将不会显示在 Spotlight 搜索中。
如果 Mac 的驱动器上有多个宗卷,或者连接了外置驱动器,则可以在每个宗卷上启用或停用 Spotlight(和 Siri)。
为此,请先从 Finder 菜单栏的 Apple 菜单中选择“系统设置”,在 macOS 中打开“系统设置”。
在左侧的“系统设置”中,向下滚动并单击“Siri 和 Spotlight”。在“Siri 与聚焦”面板中,您可以打开和关闭 Siri、设定键盘快捷键、设定语言以及 Siri 处理历史记录的方式。
下面是 Spotlight 部分。您可以在此处设置希望 Spotlight 索引的文档类型。
如果您在此部分中关闭了特定类型的文档或数据,则 Spotlight 将在索引期间忽略这些类型的所有文档或数据。
如果您一直滚动到窗格底部,您会看到一个标有“Spotlight Privacy”的按钮。单击它以打开“隐私”表。
“隐私”表包含 Spotlight 当前从索引中排除的所有存储卷的列表,在大多数情况下,默认情况下,这些存储卷要么没有卷,要么只有启动磁盘。
要向“隐私”表单添加或删除卷,您可以将它们拖入或拖出,也可以单击列表下方的 + 或 – 按钮。
将卷添加到列表后,Spotlight 将停止为其编制索引。
如果您对“隐私”排除列表感到满意,请单击“完成”以关闭工作表。关闭系统设置。
文件元数据
当 corespotlightd 为卷的数据编制索引时,它会搜索文件的内容,但也会搜索元数据并为其编制索引。元数据可以定义为与文件关联的信息数据,但不包含在文件本身中。
元数据包括(但不限于)文件创建和上次修改日期、大小、版本、种类、名称和 Finder 注释等内容,这些内容显示在“显示简介”窗口中。
Spotlight 使用 Apple 核心服务框架中的文件元数据 API 来查找和读取元数据。
文件元数据 API 中有四种主要数据类型:
- MDSchema
- MDItem
- MDLabel域名
- MDQuerySortOptionFlags
我们不会详细介绍数据类型的所有细节,但存储对文件系统项及其元数据的引用的主要类型是类型。MDItem
使用 An 和 Core Services API,您可以在本地文件系统中检索、排序和存储项目的元数据。MDItem
还有一个稍早的 Apple 文档,标题为“文件元数据搜索编程指南”,其中记录了如何使用 API 对文件元数据进行 Spotlight 搜索。
聚光灯进口商
如果您在 Mac 的启动磁盘上打开 /Library/Spotlight 文件夹,您可能会注意到一个或多个扩展名为 .mdimporter 的文件。这些是 Spotlight 元数据导入器插件。
例如,Apple 的 Pages 和原始 iBooks Author 应用程序具有 .mdimporter 插件。Microsoft的一些365应用程序也是如此。其他应用程序也提供它们。
您可以在 Apple 的 Xcode 中编写自定义的 .mdimporter 插件,将它们放在 /Library 文件夹中,Spotlight 将使用它们从您的应用程序支持的文件中导入元数据。
.mdimporter 插件本质上是代码和信息的捆绑包,它们告诉 Spotlight 可以导入哪些类型的元数据,以及如何访问这些数据。使用自定义 .mdimporter,您可以允许应用存储其他元数据,并将其提供给 Spotlight 以进行索引。
Apple 还有一份(稍旧)的开发人员文档,名为 Spotlight Importer Programming Guide,它向您展示了如何编写 .mdimporter。
Spotlight 元数据实用程序
Apple 和第三方还提供了多种命令行 (CLI) 工具,您可以在 macOS 的终端应用程序中使用这些工具来访问设备上存储的文件系统对象中的 Spotlight 元数据。
Spotlight 将其索引元数据存储在每个装载的磁盘卷上的本地数据库中。Spotlight 元数据数据库称为存储。
每个存储都包含每个文件系统对象上的索引元数据,以及一些使 Spotlight 搜索速度更快的其他数据。通过在单独的数据库中存储和更新文件元数据,Spotlight 可以更快地搜索和检索数据,因为它不必每次都遍历文件系统层次结构。
在 APFS 卷上,Spotlight 还会使用一些内部卷元数据与存储元数据相结合,以实现更快、更准确的搜索。
有许多可用的 Spotlight CLI 实用程序命令,但您最有可能要使用的四个关键命令是:
- mdutil
- mdimport
- MDLS的
- mdfind
您可以在“终端”中获取有关其中任何一个的使用信息,方法是打开“终端”,然后键入一个空格,然后键入一个空格、实用工具的名称,然后按键盘上的 Return 键。man
例如:
man mdutil
请注意,某些命令需要在命令名称后添加文件系统参数,而有些则不需要。例如,没有,但确实如此。mdutil
mdattributes
要退出终端中的(手动)系统,请按键盘上的键。man
Control-Z
mdutil
该命令是一个简单的实用工具,可帮助管理 Mac 上的 Spotlight 元数据存储。 注意:必须在 Finder 的桌面上装载卷才能处理该卷。mdutil
mdutil
例如,使用您可以打开和关闭特定卷的 Spotlight 存储、禁用对该卷的搜索、抹掉卷的存储、显示卷的 Spotlight 索引状态等。mdutil
您还可以将特定命令应用于每个索引卷上的 Spotlight 存储,并刷新 Spotlight 存储缓存以强制直接使用存储本身。
在“终端”中键入并按下键盘上的 Return 键以完全使用。man mdutil
mdutil
mdimport
mdimport
是一个 Spotlight CLI 实用程序,允许您手动将所有可搜索的元数据从文件系统层次结构导入到 Spotlight 元数据存储中。它使用上面提到的 .mdimporter 插件来导入和搜索数据。
您可以使用打印为文件系统层次结构中的每个索引项存储的所有元数据项 – 与键一起存储的项除外,因为这些项包含文件系统项的实际文本内容。mdimport
kMDItemTextContent
您还可以使用来测试您或您的团队编写的 .mdimporter 插件。mdimport
在“终端”中键入并按下键盘上的 Return 键以完全使用。man mdimport
mdimport
MDLS的
mdls
是一个实用程序,它使用预定义的元数据键(或“标记”)列出磁盘上单个文件的元数据属性。Apple 定义了 Spotlight 使用的大多数元数据键,但如果您编写自己的 .mdimporter,则可以定义自己的键。
在“终端”中键入并按下键盘上的 Return 键以供使用。man mdls
mdls
mdfind
mdfind
是一个灵活而强大的实用程序,它允许您通过搜索特定卷上的 Spotlight 存储来查找文件系统层次结构中与您指定的特定元数据匹配的所有对象。
使用各种选项,您可以在文件系统层次结构中的特定位置开始搜索,指定要匹配的元数据项,以及指定要匹配的特定文件名。mdfind
mdfind
将仅返回与指定搜索条件匹配的文件的结果。
您可以在搜索运行时通过在键盘上键入 Control-C 来取消搜索。mdfind
还有一个标志,允许您指定自然语言字符串,就像您在 Finder 的 Spotlight 中键入它一样。 将解释字符串并相应地调整其搜索。-interpret
mdfind
mdfind
您还可以与其他标准 UNIX 实用程序结合使用,例如执行复杂的搜索并将结果通过管道传输到标准输出(包括文件)。mdfind
grep
在“终端”中键入并按下键盘上的 Return 键以供使用。man mdfind
mdfind
这里没有提到其他几个 Spotlight 实用程序,我们将在以后的文章中介绍。
属性键
Spotlight 和核心服务文件元数据的工作方式是使用唯一的键或字符串将每个元数据项存储在存储中。每个键都会告诉 Spotlight 和 API 你对哪个元数据项感兴趣。
Apple 将元数据键定义为 Core Foundation 字符串类型 – 几乎所有 Apple 相关软件中使用的一种常见 Core Foundation 字符串类型。使用 Core Foundation API,还可以直接从代码操作 CFStrings。CFString
Apple 在上面提到的文件元数据 API 文档中列出了大多数元数据属性键。大多数键以前缀开头(“常量”的缩写 – “metaData”)。kMD
要使用文件元数据 API,您通常使用其函数之一或 Spotlight 函数之一,并指定元数据键以指示要使用的元数据信息。在检索和写入元数据时,可以使用密钥。
例如,在 Swift 中,任何给定文件系统对象的“添加日期”元数据项的元数据 API 密钥定义为:
let kMDItemDateAdded: CFString!
或者在 Objective-C 中:
const CFStringRef kMDItemDateAdded;
(在 Objective-C 中是 CFString 的不透明 Core Foundation 类型)。CFStringRef
如果你是 Apple 开发人员并使用文件元数据 API,你会发现自己经常使用元数据键。
AVMetadataItem
对于音频/视频媒体文件,Apple 在 AVFoundation 框架中提供了一个额外的 API。
这有几个原因,例如,媒体元数据通常必须在运行时异步加载,以防止媒体播放期间出现延迟,而行业媒体标准要求某些元数据。不同地区的一些法律还要求以某些方式将所有者和作者元数据嵌入到媒体文件中。
AVFoundation 中的中心 Apple 元数据项数据类型称为 .AVFoundation 提供了各种 API,用于访问和编写 .AVMetadataItem
AVMetadataItem
还有一组相应的属性(键)用于访问 .AVMetadataItem
AVMetadataItem
每个 AVFoundation 媒体资产都由数据类型 定义。AVAsset
Apple 将每个资产中的轨道定义为 .AVAssetTrack
每个轨道或轨道都可以附加一个或多个轨道。AVAsset
AVMetadataItem
您可以使用各种 AVFoundation API 在代码中创建对象,这些 API 可以从文件(例如,QuickTime 或 .mp3 文件)甚至从 Apple HLS 实时流加载它们。AVAsset
您还应该查看作为 AVFoundation 协议实现的异步媒体加载 API。AVAsynchronousKeyValueLoading
在代码中拥有 or 对象后,您可以随意操作其元数据属性并将它们写回其源代码。AVAsset
AVAssetTrack
有关 AVFoundation 资产和轨道的完整信息,请参阅开发者页面Documentation/AVFoundation/Media assets。
有关所有 AVFoundation 元数据键的完整列表,请参阅开发人员页面 Documentation/AVFoundation/Media assets/AVMetadataKey。
AVFoundation 是一个复杂的框架,其 API 有数百个密钥。
Spotlight 元数据乍一看似乎是一个复杂的话题,但它的 API 使用起来相当简单。经过一些练习,CLI 实用程序也简单易懂。
使用这些工具,您可以毫不费力地在所有索引卷中自定义和搜索 Spotlight 数据。
未经允许不得转载:表盘吧 » 如何在 macOS 中使用 Spotlight 的元数据文件实用程序