2016-06-28 41 views
0
我使用BOLT對Neo4j的

,我有一個簡單的查詢,以找到節點之間的長度任意長度Neo4j的BOLT查詢並不總是工作consitently

stmt = MATCH (n:Month {ID: {start} }),(m:Month {ID: {stop}}),p = shortestPath((n)-[r:nextMonth*..100000]-(m)) RETURN LENGTH(p) 
dict = {'start': '201507', 'stop': '201509'} 
result = list(session.run(stmt, dict))[0][0] 

的(啓動和停止)當我使用網頁界面,Cypher查詢給我回2的結果(這是正確的結果)。當我運行python命令時,大部分時間結果都是[](即沒有值)而不是值2。有時它運行良好,有時它不會。它令我感到困惑,它始終沒有給出正確的值,並且我可以手動運行查詢而沒有問題。

這只是一個較大代碼文件的摘錄。我想知道會議是如何建立或關閉的?我使用的會話具有正確的類型:neo4j.v1.session.Session對象,位於0x04CCD7F0

任何想法爲什麼這是或故障排除是受歡迎的。

回答

1

我確實發現了我的問題的根本原因。

我用了兩個會議:

SESSION1在那裏創建節點(聲明沒有如上圖所示) 工作階段是尋找路徑的長度(如上圖所示)

添加最小的延遲(時間創建和路徑查詢之間。睡眠(0.1)解決了這個問題。

我有懷疑,雖然節點的建立尚未完成已執行工作階段。

0

嘗試運行此:

result = session.run(stmt, dict).peek()[0]

所有時,我得到的回報「session.run()」,我使用的方法PEEK(時間)(如果返回的是隻有一行) 。否則,最好在循環中使用結果,因爲這會返回一個幫助執行代碼的集合對象,並且如果結果很大,並且將所有內容轉換爲列表,那麼也許你會用此來破解你的記憶。

+0

問題是在其他地方,但確切的說法確實有用 –