2011-11-17 30 views
14

Qualcuno sa come ordinare i luoghi di Facebook in base alla distanza da un luogo di ricerca? Si noti che non voglio ordinare risultati nella mia app cliente. Voglio che il server di Facebook fornisca risultati ordinati per facilitare l'impaginazione. Voglio sempre aggiungere i posti dalle query successive alla fine del mio array.Luoghi Facebook: ordina i risultati per distanza

questo non sembra possibile utilizzando la query grafico API come ad esempio:

https://graph.facebook.com/search?q=coffee&type=place&center=37.76,-122.427&distance=1000& .... perché non c'è modo di dire Facebook per ordinare i risultati. Il luogo più vicino potrebbe essere l'ultimo nella lista dei risultati restituiti.

Ho cercato di replicare la query precedente utilizzando FQL ma ho riscontrato un problema in quanto i campi di descrizione del nome & nella tabella di luogo di Facebook non sono indicizzabili. FQL come ad esempio:

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 

problema di questo è che i campi name e description non sono indicizzabili nella tabella posto. Ciò significa che non tutti i risultati vengono restituiti dall'FQL, ci sono molti risultati mancanti.

Qualcuno sa un modo per farlo?

risposta

12

Sembra che sia possibile utilizzare questo FQL. La funzione contains sembra funzionare come il parametro API grafico q=. Ecco il tuo esempio utilizzando 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 
Problemi correlati