Пространственный индекс Postgres для цветов LAB?

У меня есть база данных Postgres, содержащая фотографии, и я хочу позволить людям искать их по цвету. У меня уже есть несколько цветов (1-5), определенных для каждой фотографии, и я использую цвета LAB (воспринимаемое цветовое пространство, определенное в трех измерениях: легкость плюс два измерения цвета).

Мой вопрос: каков наилучший способ сделать это в Postgres? По сути, это трехмерный поиск, поэтому я должен использовать пространственный индекс?

Мои требования:

  • запустите поиск ограничивающего прямоугольника по цвету (найдите фотографии с цветами на расстоянии X от цвета Y).
  • ранжировать результаты по расстоянию от цвета X (сначала вернуть фотографии с цветами, ближайшими к цвету Y)
  • r-древовидное представление.

Я создал доказательство концепции с использованием индекса rtree в Python, и он работает довольно хорошо. Я просто не уверен, как воспроизвести его с помощью таблиц Postgres.

1 ответ

Я вижу пару вариантов. PostGIS имеет многомерные типы геометрии, которые могут дать именно то, что вы ищете. Например, вы можете сделать ограничивающие рамки над трехмерными точками. Это было бы проще всего.

PostGIS - это дополнение Geospacial, но его можно использовать и для множества других вещей. То, на что вы обращаете внимание, является пространственным, даже если не ГИС, и это может быть лучшим инструментом для работы. PostGIS будет обрабатывать все ваши потребности в индексации, включая дистанционный поиск и тому подобное.

Если это не приемлемо, вы можете написать свои собственные типы. Возможно, вы захотите написать и операторы GiST для них, и там есть довольно большая кривая обучения.

Другие вопросы по тегам