我正在考虑解决以下任务的方法。
我们正在开发一个有一些对象的服务(网站)。每个对象都有地理字段(lat和long)。这是大约200-300个城市,可以连接对象。对象的数量是数千和数万。
此外,每个对象都有创建日期。
我们需要通过距离和新鲜度的功能来搜索对象。
E.g。我们有两个关闭的城市A和B.来自城市A的用户授权他应该看到来自城市A的对象,然后在下一页上看到来自城市B的对象(因为来自A的对象更近)。 但是,如果有一个像A一年前添加的对象,以及今天添加的B对象,那么B的对象应该显示为A的一个。
因此,对于来自城市A的peoeple,我们可以创建具有相关索引的特殊字段,例如= 100 *距离+ age_in_days 然后按此字段排序,我们将根据需要获取数据。
问题是这样的相关索引不适用于其他地方的所有其他人。
在我的例子中,我使用了线性函数,但它只是一个例子,我们需要适合正确的函数。
该网站将在我们的服务器上运行,因此我们几乎可以使用任何数据库或任何其他软件(我应该使用mongodb)
答案 0 :(得分:0)
我有以下想法
每天回收相关索引,并将其与
之类的对象保持一致{
fields : ...,
relindex : {
cityA : 100,
cityB : 120
}
}
如果用户属于cityA,则按 relindex.cityA
缺点:
答案 1 :(得分:0)
我认为有四种可能的解决方案:
1)使用3D索引 - lat,lon,time。
2)距离更重要 - 使用一些地理索引并选择最近的对象。如果对象太旧,则丢弃它并增加允许的距离。有足够的物体后停止。
3)时间更重要 - 按时间索引并丢弃太远的对象。
4)近似距离 - 选择一些重要的点(城市中心或物体群的中心)并预先计算这些重要点的距离。查询将首先找到最近的重要点,然后使用索引查找数据。 或者,您可以从对象创建群集,然后计算查询中的距离。这里的要点是集群数量有限。