2013-11-22 101 views
0

我是neo4j中的新成員,並試圖瞭解如何優化路由查詢。停止路徑處理

我正在使用OSM db。

我試圖從一點到另一點的距離進行計算。

START a=node(760119) 
MATCH path=(a)-[:NEXT|NODE*1..30]-(c) 
WHERE HAS(c.node_osm_id) AND c.node_osm_id=283103898 
RETURN DISTINCT reduce( 
    distance = 0, n in filter(
     x in path where has(x.length) 
    ) | distance + n.length 
) AS distance order by distance 

我的查詢返回一組距離。

319.5609607071325 
320.0901127819706 
321.64043860878735 
332.13372820085 
334.21320610250484 

如何重寫查詢,如果距離比最短距離長,則停止查找新路徑。

在此先感謝。

+0

neo的版本? –

+0

version is2.0.0-m06 –

回答

0

Cypher不支持成本評估的最短路徑(截至2.0-RC1)。如果您需要使用更高效的最短路徑算法,則需要實施非託管擴展。

但是,我確實看到了可以提高性能的地方......您是否嘗試將C添加爲起點查詢?

+0

像dijkstra這樣的嵌入式算法怎麼樣?它可用於REST API。是否有可能使用兩種不同類型的關係(在我的情況下爲NODE和NEXT),並且只有其中一個具有權重? –

+0

是的,dijkstra是你會用的。我想你最終可能需要一個自定義的非託管擴展 - 沒有看到在REST API中指定兩種關係類型的方法。 –