Создание GIST индексам для сравнения картинок (intarray)

Поиск
Список
Период
Сортировка
От leopard_ne@inbox.ru
Тема Создание GIST индексам для сравнения картинок (intarray)
Дата
Msg-id 4D4E8082.6090601@inbox.ru
обсуждение исходный текст
Ответы Re: Создание GIST индексам для сравнения картинок (intarray)  (Oleg Bartunov <oleg@sai.msu.su>)
Список pgsql-ru-general
Добрый день. Прошу совета у сообщества.
Есть простой метод сравнения картинок -
http://leopard.in.ua/2010/12/09/bystroe-sravnenie-izobrazhenij-s-pomoshhyu-rubyphp-i-postgresql/

В таблицу записывается в поле типа integer[] масив с числами (пусть поле
будет "diff_array" в таблице "some_table"). Далее происходит такой метод
поиска похожих картинок (пусть есть массив картинки "{1,3,4,5,...}"
размером 225, как в статье)

Select some_table.*, round((icount(some_table.diff_array::int[] &
'{1,3,4,5,...}'::int[])::numeric / (225)::numeric) * 100, 2) as
simillar_percentes FROM some_table WHERE
round((icount(some_table.diff_array::int[] &
'{1,3,4,5,...}'::int[])::numeric / (225)::numeric) * 100, 2) >= 60 AND
id != img_id ORDER BY round((icount(some_table.diff_array::int[] &
'{1,3,4,5,...}'::int[])::numeric / (225)::numeric) * 100, 2) DESC LIMIT 10

Проблемный кусок, который используется 3 раза тут в запросе:

round((icount(some_table.diff_array::int[] &
'{1,3,4,5,...}'::int[])::numeric / (225)::numeric) * 100, 2)

Хотелось бы как то по такому условию создать индекс, поскольку скорость
падает (индекс gist__intbig_ops добавлял, скорость все равно не
увеличивается).
Для простоты вычисления размера массива (чтобы не задать 225 = 15*15
матрица), можно сделать так функцию:

round((icount(some_table.diff_array::int[] &
'{1,3,4,5,...}'::int[])::numeric /
((icount(some_table.diff_array::int[]) + icount('{1,3,4,5,...}'::int[]))
/ 2)::numeric) * 100, 2)

Документацию
http://www.sai.msu.su/~megera/postgres/talks/gist_tutorial.html
<http://www.sai.msu.su/%7Emegera/postgres/talks/gist_tutorial.html> я
прочитал, но не работаю на C, и поэтому, возникло еще больше вопросов,
как все таки мне можно создать индекс на подобное условие. Буду
благодарен за любые советы или помощь.

В списке pgsql-ru-general по дате отправления:

Предыдущее
От: Mihail Nasedkin
Дата:
Сообщение: Re: [pgsql-ru-general] Re: Агрегация массивов
Следующее
От: Oleg Bartunov
Дата:
Сообщение: Re: Создание GIST индексам для сравнения картинок (intarray)