2013-05-18 62 views
0

我正在考慮如何解決以下任務。通過地理和int函數進行智能排序

我們正在開發一個服務(網站),它有一些對象。每個對象都有地理區域(lat和long)。大約有200-300個城市可以連接物體。對象數量爲數千和數萬。

另外每個對象都有創建日期。

我們需要通過距離和新鮮度的功能來排序搜索對象。

E.g.我們有兩個關閉的城市A和B.來自城市A的用戶授權,他應該看到來自城市A的對象,然後在接下來的一些頁面上看到來自城市B的對象(因爲來自A的對象更近)。 但是,如果有一個來自A的物體像一年前一樣添加,並且B中的物體是今天添加的,那麼B的物體應該顯示爲甲的一個。

因此,對於來自城市A的peoeple,我們可以創建相關索引的特殊字段,如= 100 *距離+ age_in_days 然後按此字段排序,我們將根據需要獲取數據。

問題是這樣的相關索引不適用於來自其他地方的所有其他人。

在我的例子中,我使用了線性函數,但它只是一個例子,我們需要擬合正確的函數。

該網站將在我們的服務器上運行,所以我們可以使用幾乎任何數據庫或任何其它軟件(我應該使用MongoDB的)

+0

簡單地按照自發布後的平等和時間的乘積進行排序的分數值是否更有意義。 – christopher

+0

一個城市中的所有物體是否具有相同的地理位置或更精確的物體的地理位置? –

+0

«簡單地按照自發布後的平等和時間的積分排序得出的分數值是否更有意義?» - 否 在一個城市中的所有對象都具有相同的地理位置或者是對象的地理位置精確? - 是的,一個城市中的所有物體都具有絕對相同的座標(實際上是城市的座標) –

回答

0

我有以下想法

  1. Recacl相關天天指數與對象保持它就像

    { 
        fields : ..., 
        relindex : { 
         cityA : 100, 
         cityB : 120 
        } 
    } 
    

    如果用戶通過屬於cityA然後排序relindex.cityA

缺點:

  • 所有對象的反覆更新,但我不認爲這是一個唬得問題
  • 巨大蒙戈指數。如果我們有大約300個城市,每個對象將有300個索引字段
  • 難以添加新城市。

  1. 採用3D空間索引:(緯度,經度,新鮮度)。但我不知道如果有任何數據庫支持集羣三維地理(ε2)

  1. 緊湊近處的物體,並只搜索集羣但不是整個基地。但我不知道它沒關係。
0

我認爲有四種可能的解決方案:

1)使用3D指數 - 緯度,經度,時間。

2)距離更重要 - 使用一些地理索引並選擇最近的物體。如果物體太舊,則丟棄它並增加允許的距離。有足夠的物體後停下來。

3)時間更重要 - 按時間索引並丟棄過多的對象。 4)近似距離 - 選擇一些重要點(城市的中心或物體簇的中心),並計算這些重要點前面的距離。查詢將首先找到最近的重要點,然後使用索引來查找數據。 或者,您可以從您的對象創建羣集,然後計算查詢中的距離。這裏的重點是羣集數量有限。

相關問題