2011-11-17 30 views
14

Có ai biết cách đặt hàng địa điểm Facebook theo khoảng cách từ vị trí tìm kiếm không? Lưu ý rằng tôi không muốn đặt hàng kết quả trong ứng dụng khách của mình. Tôi muốn máy chủ Facebook cung cấp cho tôi các kết quả có trật tự để tạo điều kiện thuận lợi cho việc phân trang. Tôi luôn muốn nối các địa điểm từ các truy vấn tiếp theo đến cuối mảng của mình.Địa điểm Facebook: kết quả đặt hàng theo khoảng cách

này dường như không thể thực hiện bằng cách sử dụng truy vấn graph API như:

https://graph.facebook.com/search?q=coffee&type=place&center=37.76,-122.427&distance=1000& .... vì không có cách nào để biết Facebook để đặt hàng các kết quả. Địa điểm gần nhất có thể nằm trong danh sách các kết quả trả về.

Tôi đã cố gắng sao chép truy vấn trên bằng cách sử dụng FQL nhưng có vấn đề ở chỗ tên trường & mô tả trong bảng địa điểm Facebook không thể lập chỉ mục được. FQL như:

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 

Vấn đề với điều này là các lĩnh vực namedescription không lập chỉ mục trong bảng vị trí. Điều này có nghĩa rằng không phải tất cả các kết quả đều được trả về bởi FQL, có rất nhiều kết quả còn thiếu.

Có ai biết cách làm việc này không?

Trả lời

12

Dường như có thể sử dụng FQL này. Hàm contains dường như hoạt động giống với tham số API đồ thị q=. Dưới đây là ví dụ của bạn bằng cách sử dụng 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 
Các vấn đề liên quan