Создание GIST индексам для сравнения картинок (intarray)
От | leopard_ne@inbox.ru |
---|---|
Тема | Создание GIST индексам для сравнения картинок (intarray) |
Дата | |
Msg-id | 4D4E8082.6090601@inbox.ru обсуждение исходный текст |
Ответы |
Re: Создание GIST индексам для сравнения картинок (intarray)
|
Список | 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 по дате отправления: