2013-05-31 39 views
1

我有一個Postgres數據庫包含照片,我想讓人們通過顏色搜索它們。我已經爲每張照片定義了多種顏色(1-5),並且我使用的是LAB colours(感知色彩空間,定義爲三維:明度加兩個色彩維度)。用於LAB顏色的Postgres空間索引?

我的問題是:在Postgres中做這件事的最好方法是什麼?它基本上是一個三維搜索,所以我應該使用空間索引?

我的要求是:

  • 運行通過顏色的邊框搜索(找到照片與Y色的距離X之內的顏色)。
  • 按照距離顏色X的距離排列結果(返回顏色最接近Y的顏色的照片)
  • r-tree-like表現。

我已經使用Python中的rtree索引構建了一個概念驗證,並且它工作得很好。我只是不確定如何使用Postgres表複製它。

+0

...或者多維數組可能更合適? – Richard

+0

你有沒有嘗試**使用PostgreSQL的rtree功能?但請注意,Postgres rtree確實是事務性的。內存中的只讀索引可能會更快,所以如果您不需要交易,您可能會爲不需要的東西付出高昂的代價。 –

+0

直觀上你想要存儲和查詢3d點。但是內置的幾何類型是2d ......也就是說,考慮到Lab色彩空間中的色彩成分實際上是(a,b)部分 - 您可能能夠避開這個限制 - 一個2d點。 –

回答

0

我看到了幾個選項。 PostGIS具有多維幾何類型,可以準確提供您正在查找的內容。例如,您可以在三維點上執行包圍盒。這將是最簡單的。

PostGIS是一個Geospacial插件,但它也可以用於其他許多事情。即使沒有GIS,你所看到的也是空間,這可能是這項工作的最佳工具。 PostGIS會處理所有索引需求,包括距離搜索等。

如果這是不可接受的,你可以寫你自己的類型。您可能也想爲他們編寫GiST運算符,並且那裏有相當大的學習曲線。