Spotlight是苹果在Tiger(10.4)中引入的一项快速搜索技术。在Leopard中,Spotlight已经无缝地整合进了Finder。
从iOS 3.0开始,Spotlight被移植到了iOS。
在OS X中,用户单击系统菜单栏右侧的放大镜图标就可以使用Spotlight。在iOS中,用户用手指滑向主屏幕画面左侧就可以打开类似的窗口。
mds
Spotlight背后的核心力量是一个索引服务器mds,mds在 MetaData
框架中,而这个框架是 CoreServices.framework
的一部分。
mds 文件路径:
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Support/mds
mds是一个没有GUI的后台服务程序。
每当有任何文件操作(创建、修改和删除)发生时,内核都会通知这个后台服务程序。这个通知机制称为 fsevents
。
当mds收到通知时,mds会通过工作进程 mdworker
将各种元数据信息导入数据库。
mdworker进程可以加载一个具体的Spotlight Importer(Spotlight导入器)从文件中提取元数据信息。
系统提供的导入器位于/System/Library/Spotlight
目录;
用户提供的导入器位于/Library/Spotlight
目录。
和QuickLook类似,这些导入器都是实现了固定API的插件(在Xcode中选择MetaData Importer项目模板时可以创建出API框架)。
命令行访问 Spotlight
在命令行可以通过以下命令访问Spotlight:
- mdutil:管理元数据数据库
- mdfind:发出spotlight查询
- mdimport:配置和测试spotlight插件
- mdls:列出文件的元数据属性
- mdcheckschema:验证元数据的布局(译者注:这个工具在10.8中移除了)
- mddiagnose:Lion引入的新功能,这个工具能对spotlight子系统(mds和mdworker)以及系统上的附加数据进行完整的诊断。
另外一个文档稀少的特性是通过在一些路径创建特定的文件控制Spotlight(即mds)的行为。
例如,在一个目录中创建一个.metadata_never_index
隐藏文件可以防止这个目录被索引(最初是为可移动媒体设计的)。
Spotlight 插件
让 Mac 上的 Spotlight 更强大:Flashlight 拓展插件
https://sspai.com/post/27734Spotlight 插件 SpotlightFinder(开源)
https://github.com/jcavar/SpotlightFinder