2017-07-26 192 views
0

我開發了一個電報機器人,它可以匹配2個用戶使用相同的語言,當他們都在尋找一個具有postgres查詢的合作伙伴時。 我想添加可選的能力來匹配用戶也取決於位置(最接近的用戶)。 因爲這是一個選項,我想我會保持列默認情況下,如果用戶發送他的位置我添加它。 我打算用postigs來實現這個。 我有兩個問題:postgis在地理和幾何之間的精度和性能方面的差異

  1. 是它更好地使用地理或幾何?因爲人們可以來自世界各地,我在這些情況下閱讀最好是使用地理,但無論如何,我不需要任何精確的數據,只是要知道誰是最親密的用戶和他們之間的距離(大約也只是當它們匹配時被指示爲附加信息)。我希望查詢能夠快速運行(我的意思是不到1秒)。我正在考慮使用KNN在列上創建索引,並使用< - >命令。這是一個不錯的選擇嗎?你會爲此做什麼?幾何或地理?我的想法很好嗎?

  2. 因爲,正如我所說的,該字段也可以是NULL,用戶不希望提供位置,我想優先考慮在排序的位置指定的用戶,如果沒有與一個指定的位置,我從NULL值的用戶中隨機抽取一個。這可能與查詢?

我的機器人是用Python編寫的,如果它可以提供幫助。

非常感謝你

回答

0

據1點我想,這篇文章將會回答你的問題的最佳

http://postgis.net/docs/manual-1.5/ch04.html#PostGIS_Geography

關於速度 - 只要你的GEOM /的GeOG列創建要點指數使用st_Dwithin(geom1,geom2,100)並按st_distance(geom1,geom2)排序結果,它將會足夠快,直到您擁有數千萬用戶。

點2:是的,它是例如只是工會 選擇,st_distance(u1.geom,u2.geom)DIST從 (選擇U2從用戶U1 ,用戶U2 其中u1.id = 1 和u1.id從用戶 <> u2.id 和st_dwithin(u1.geom,u2.geom,5000) UNION 選擇*,空DIST 其中id <> 1 和的geom爲null LIMIT 1) a order by dist

我想念其他標準謊言性別,年齡等,但當然在兩個選擇使用它

相關問題