Небольшие хитрости при работе со Spotlight


Новая технология поиска Spotlight, нашедшая свое применение в Mac OS X 10.4, действительно значительно повышает эффективность поиска документов на Маке. Однако кажущаяся простота иногда бывает обманчива, что мы сейчас и увидим.

Возьмем цифровые фотографии. Когда вы делаете снимок, он содержит не только графическое изображение, но и достаточно большой объем дополнительной информации. Точный ее состав зависит от того, при помощи какой камеры вы ведете съемку, но большинство их включают в себя такие элементы, как фокусное расстояние, диафрагма, выдержка и т.д. При переносе снимков с камеры на жесткий диск Spotlight автоматически индексирует все эти данные, позволяя осуществлять позднее поиск по ним.

Итак, допустим вы хотите при помощи Spotlight найти все снимки с большой выдержкой - около трети секунды или около того. (Нормальная выдержка составляет около 1/60 секунды). Переключаемся в Finder, нажимаем Command-F для вывода стандартного окна поиска, нажимаем на "плюс" для добавления нового критерия поиска. Теперь из выпадающего меню Kind выбираем Other, после чего указываем Exposure Time (Время выдержки) из длинного списка опций. Из следующего выпадающего меню выбираем "Greater than" ("Больше чем") и вводим наше значение в .333. После всего этого наше поле запроса будет выглядеть вот так:



Все сделали правильно? Да. Запускаем поиск и... Сюрприз! Найдены все снимки, в метаданных которых указано время выдержки. Почему? Потому что Spotlight не любит такие не-целые числа, как .33. Подобное число, перед выполнением поиска, конвертируется в ноль, после чего Spotlight разыскивает все снимки, выдержка которых, соответственно, больше нуля. А это и есть все снимки.

Это происходит не только тогда, когда значение менее единицы, но каждый раз, когда число не целое. Дальше - больше. Spotlight не просто округляет числа, но попросту отбрасывает десятичные доли. И указав 2.99, 2.5 или 2.0001, на выходе вы всегда будете иметь 2.

Как избежать и бороться с этой проблемой? Использовать "прямой запрос" (Raw Query). Иными словами, вы должны составить свой запрос на родном языке Spotlight. Каждый раз, когда вы ищете что-то, Spotlight переводит ваш запрос на свой язык и уже с ним работает. Поэтому когда вы ищете файлы, например, при помощи строки Exposure Time Greater Than 2, Spotlight конвертирует этот запрос в математическую функцию, которая выглядит примерно так:

kMDItemExposureTimeSeconds > 2

Здесь kMD... указывает на название поля, содержащего значение времени выдержки.

Для составления прямого запроса, который решит нашу проблему с целыми числами, снова вызовем окно поиска (Command-F) и из выпадающего меню Kind выберем Other. Теперь указываем на Raw Query и кликаем ОК:



(Заметьте, я выбрал опцию Add to Favorites с тем, чтобы в следующий раз запрос Raw Query можно было гораздо проще найти - он будет вынесен в меню Kind).

Теперь в текстовом поле запроса укажем следующий критерий:

kMDItemExposureTimeSeconds > 0.333

Теперь результаты поиска будут несколько отличаться от тех, которые были ранее:



Как вы можете видеть на нижнем окне, теперь найдено лишь 15 снимков, у которых время выдержки более трети секунды, а не все восемь с лишним тысячи.

Итак, мы нашли решение проблемы, но как я узнал об этом страшном термине (kMDItemExposureTimeSeconds) Spotlight, который используется вместо "Exposure Time"? Это хороший вопрос, ответ на который позволит вам выполнять прямой запрос при любом поиске, а не только при обходе проблемы с целыми числами. Самый простой способ узнать о том, по каким метаданным вы можете осуществлять поиск, это открыть Terminal и перейти в папку, сожержащую снимки.

Например, для перехода в вашу папку Pictures наберите следующую команду и нажмите Return:

cd ~/Pictures

Теперь нам необходима фотография для того, чтобы взглянуть на метаданные, содержащиеся в ней. Обычно, для просмотра содержимого папки используется команда ls. Для просмотра же метаданных, приписанных к файлу, используется похожая команда mdls "photo.jpg", где photo.jpg это название фотографии, которую мы проверяем.

После нажатия клавиши Return вы увидите длинный список элементов, начинающихся с букв kMDItem.... Это и есть поля метаданных, которые вы можете использовать в прямом запросе. Вот лишь некоторые из них:
  • kMDItemAperture - параметры диафрагмы.
  • kMDItemExposureTimeSeconds - время выдержки.
  • kMDItemFocalLength - фокусное расстояние.

И не забывайте, вы можете использовать кнопку Save для сохранения запроса и его использования в будущем, а это может сэкономить немало времени.

И, конечно же, остается надеяться, что в скорых обновлениях системы Apple устранит досадные ошибки в обработке Spotlight не-целых чисел, дабы избежать подобных "танцев с бубном" в будущем.
Источник: Rob Griffiths