They just don’t make beer/cars/Spotlight like they used to, do they? When Spotlight first came out in 2005, it was wonderful, and found all sorts of things hidden away in places you’d never have guessed. Since then, as well as expanding to cover web search, it has only gone downhill, and just isn’t as good as it used to be.
That is what many Mac users think, and it is very hard to come up with objective evidence either for or against that opinion.
One thing that you can do is boost the chances of Spotlight’s searches finding the most important hits is to manipulate the metadata which Spotlight uses. Without actually changing a document’s content, you can do this by tagging files with keywords and other metadata which are accessible to Spotlight. The ideal metadata to use – because they are independent of the data format used for any file – is stored in extended attributes, xattrs.
At its most basic, this may just involve adding Finder Comments, which are stored in a xattr of type com.apple.metadata:kMDItemFinderComment and readily accessed using the Finder’s Get Info dialog.
However, Apple provides a range of more specific xattrs intended for this purpose, including gems such as com.apple.metadata:kMDItemKeywords, which would seem a logical place to store keywords.
This article looks at the xattrs most suitable for enhancing a file’s Spotlight metadata, across Sierra and High Sierra. To compile this information, I have looked at the performance of a selection of xattrs with Spotlight searches in both versions of macOS, and how well they are preserved when moving files using iCloud Drive.
I have looked at plain text and PDF documents with and without a single use of a very distinctive word syzygy, as my marker. For text files which don’t include that word, I have added it in a xattr, so that it functions as a keyword which doesn’t appear in the document itself. The xattrs I have used include:
- com.apple.ResourceFork
- com.apple.metadata:_kMDItemUserTags
- com.apple.metadata:kMDItemCopyright
- com.apple.metadata:kMDItemCreator
- com.apple.metadata:kMDItemDescription
- com.apple.metadata:kMDItemFinderComment
- com.apple.metadata:kMDItemHeadline
- com.apple.metadata:kMDItemKeywords
- org.openmetainfo.time:kMDItemCopyright
- org.openmetainfo.time:kMDItemDescription
- org.openmetainfo.time:kMDItemHeadline
- org.openmetainfo.time:kMDItemKeywords
- org.openmetainfo:kMDItemCopyright
- org.openmetainfo:kMDItemDescription
- org.openmetainfo:kMDItemHeadline
- org.openmetainfo:kMDItemKeywords
- co.eclecticlight.test
For the Resource Fork, I added the magic word as hex content in UTF-8 format; for all the others, I added it as a plain string in a property list:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<string>syzygy</string>
</plist>
Spotlight searches consistently found my magic keyword when it was included in any of the com.apple xattrs apart from com.apple.ResourceFork: Spotlight does not, apparently, index any content held in Resource Forks. It also consistently found the magic word when it was included within the content of plain text and PDF documents. Note that this was just a single occurrence among nearly thirty thousand words – 175 KB of text or 184 KB of PDF – which seems pretty good performance to me.
Spotlight search doesn’t appear to index any third party xattrs, such as org.openmetainfo types, or custom types of any kind.
There were, though, two significant problems.
First, as I have noted elsewhere, moving files between Sierra and High Sierra (in either direction) using iCloud Drive strips most xattrs. The xattrs which both worked for Spotlight search and survived iCloud’s censorship were:
- com.apple.metadata:kMDItemCopyright
- com.apple.metadata:kMDItemCreator
- com.apple.metadata:kMDItemDescription
- com.apple.metadata:kMDItemFinderComment
- com.apple.metadata:kMDItemHeadline
- com.apple.metadata:kMDItemKeywords
Stick to those and you shouldn’t go wrong.
Second, Finder Comments are unreliable, and don’t now behave as regular extended attributes. Add a Finder Comment in the Finder, and it appears as a com.apple.metadata:kMDItemFinderComment xattr, which is not stripped by iCloud. But adding a com.apple.metadata:kMDItemFinderComment xattr doesn’t result in its text appearing as a Finder Comment, even when that xattr has been copied in from a file which had that added in the Finder.
This gets even more complex when moving files with Finder Comments between Sierra and High Sierra: the xattr moves fine, but the contents are no longer shown as Finder Comments, and have to be recreated using the Get Info dialog.
I suspect that the xattr is no longer being used to contain the comment, which is actually tucked away in a local Finder database instead. So the com.apple.metadata:kMDItemFinderComment xattr can be used to contain metadata which will be indexed by Spotlight, even though it may not appear in the Finder’s Get Info dialog. That is an unnecessary mess.
The next item on the wanted list is, of course, a convenient GUI app to give easier access to these xattrs. If you can wait just a little while, I might be able to help you with that too.