/ / Neo4j Ordine spaziale per distanza - neo4j, ordine, spaziale

Neo4j Ordine spaziale per distanza - neo4j, ordine, spaziale

Attualmente sto usando Spatial per le mie domande come segue:

START b=node:LocationIndex("withinDistance:[70.67,12.998,6.0]")
RETURN b
ORDER BY b.score

B è un'entità che ha un punteggio e mi piacerebbeordine per questo punteggio, ma ho trovato un caso in cui tutte le entità con punteggio 0 non erano ordinate per distanza. So che Spatial ordina automaticamente per distanza, ma una volta forzato l'ordine da un altro campo, perdo questo ordine.

C'è un modo per forzare questo ordine come un campo del secondo ordine come:

START b=node:LocationIndex("withinDistance:[70.67,12.998,6.0]")
RETURN b
ORDER BY b.score, ?distance?

risposte:

2 per risposta № 1

Sfortunatamente nell'attuale plug-in spaziale, non vi è alcun supporto cifrato, quindi la funzione distanza (o il risultato della distanza) non può essere raggiunta da ORDER BY.

Come hai già notato, the WithinDistancela funzione nell'indice stesso restituirà i risultati ordinati per distanza. Se non si aggiunge un ORDINE aggiuntivo BY nella query cifrata, l'ordine di distanza deve essere mantenuto. Tuttavia, quando si aggiunge l'ordine aggiuntivo BY, l'ordine originale viene perso. Sarebbe un'interessante richiesta di funzionalità agli sviluppatori di Cypher di mantenere l'ordine originale per gli elementi che sono comparativamente identici in ORDER BY.

C'è anche un piano separato per sviluppare lo spaziofunzioni all'interno di Cypher stesso e questo risolverà il problema nel modo desiderato. Ma non ci sono ancora informazioni su un programma di sviluppo o di rilascio per questo.

Un'ulteriore opzione che potrebbe aiutarti in aun lasso di tempo più breve ed è indipendente dai piani di sviluppo neo4j stessi, è quello di aggiungere un ordine per estensione alla query dell'indice spaziale. In questo momento stai specificando la query dell'indice come "withinDistance: [70.67,12.998,6.0]", ma potresti modificare il codice Spatial Plugin per supportare il passaggio di parametri aggiuntivi a questa query e potrebbero essere un ordine per parametro. Allora avresti il ​​controllo completo dell'ordine.