按距离排序 Facebook Places 结果

Posted

技术标签:

【中文标题】按距离排序 Facebook Places 结果【英文标题】:Order Facebook Places results by distance 【发布时间】:2011-12-31 06:39:18 【问题描述】:

有谁知道如何根据搜索位置的距离来排序 Facebook 位置?请注意,我不想在我的客户端应用程序中订购结果。我希望 Facebook 服务器为我提供有序的结果以方便分页。我总是想将后续查询中的位置附加到数组的末尾。

这似乎不可能使用图形 API 查询,例如:

https://graph.facebook.com/search?q=coffee&type=place&center=37.76,-122.427&distance=1000&.... 因为没有办法告诉 Facebook 对结果进行排序。最近的地方可能是返回结果列表中的最后一个。

我一直在尝试使用FQL 复制上述查询,但问题在于 Facebook 位置表中的名称和描述字段不可索引。 FQL 如:

SELECT 
  page_id, name, display_subtext, description, 
  distance(latitude, longitude, "37.76", "-122.427"), checkin_count 
FROM place 
WHERE ((distance(latitude, longitude, "37.76", "-122.427") < 25000) 
  AND (strpos(lower(name), "coffee") >= 0 
  OR strpos(lower(description), "coffee") >= 0))
ORDER BY distance(latitude, longitude, "37.76", "-122.427") ASC 
LIMIT 20 OFFSET 0

问题在于字段namedescription 在位置表中不可索引。这意味着并非所有结果都由 FQL 返回,有很多缺失的结果。

【问题讨论】:

【参考方案1】:

似乎可以使用此 FQL。 contains 函数似乎与q= Graph API 参数的工作方式相同。这是您使用contains的示例

SELECT page_id, name, description, latitude, longitude, checkin_count, distance(latitude, longitude, "37.76", "-122.427")
FROM place
WHERE distance(latitude, longitude, "37.76", "-122.427") < 1000
AND CONTAINS("coffee")
ORDER BY distance(latitude, longitude, "37.76", "-122.427")
LIMIT 20

【讨论】:

以上是关于按距离排序 Facebook Places 结果的主要内容,如果未能解决你的问题,请参考以下文章

在 Google Places 自动完成 iOS api 中包含距离

如何按距离从数据库中排序 php 结果

按计算距离对 MySQL 结果排序(距离未存储在 DB 中)

在 ONGR ElasticsearchDSL 中按距离对结果进行排序

如何从按距离排序的 JPA 实体中获取结果?

Elasticsearch 地理距离排序不完全/错误的顺序