Как реализовать поиск цвета с помощью сфинкса? - PullRequest
1 голос
/ 23 сентября 2010

Поиск фотографий по доминирующим цветам с помощью mysql довольно прост.Предполагая, что значения r, g, b большинства доминирующих цветов фотографии уже сохранены в базе данных, это может быть достигнуто, например, с помощью чего-то вроде:

SELECT * FROM colors
WHERE    ABS(dominant_r - :r) < :threshold
AND      ABS(dominant_g - :g) < :threshold
AND      ABS(dominant_b - :b) < :threshold

Интересно, возможно ли это как-нибудьсохранить цвета в sphinx и выполнить запрос с помощью поисковой системы sphinx?

спасибо!

1 Ответ

1 голос
/ 25 декабря 2010

Я выполнил поиск цветов со сфинксом.Это там http://code.google.com/p/hppg/. Как это работает?Очень просто, для каждого цвета я храню его доминирующие цвета в базе данных.Таблица базы данных, которая используется для индексации сфинксов, имеет столбец с именем «colors», ее содержимое заполняется следующим образом:

/**
     * This part was changed based on formula 
     * 
     * It fits here better than algorithm
     * 
     * http://en.wikipedia.org/wiki/Tag_cloud
     * 15400 is number of maximum matches based on indexed thumbnail size 120x130 px.
     * */

   $max = 15400;
   $min = 25;
   $rmax = 50;
   $rmin = 1;

   $colorIndex = array();
   foreach ($colorsMaximumImage as $color)
   {
       $colorIndexString = trim(str_repeat(' pld'.$color['pallete_id'],round((($rmin*($color['count']-25))/($max-$min))*100)));
       if ($colorIndexString != '')
       $colorIndex[] = $colorIndexString;
   }

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

...