2016-07-06 2327 views
3

我希望能夠找到一個特定的節點通過它的性能方面的原因ID(ID是比索引更有效)Neo4j - 按ID查找節點 - 如何獲取查詢ID?

爲了執行下面的例子:

MATCH (s) 
WHERE ID(s) = 65110 
RETURN s 

我將需要節點的ID(在這種情況下爲65110)

但是如何得到它?由於ID是自動生成的,因此無需查詢該圖即可找到該ID,哪種類型的目的會失敗,因爲我已經擁有該節點。

我錯過了什麼嗎?

+0

如果你不知道你爲什麼想通過ID查找,然後沒有。 +使用索引屬性和標籤+ Mikesname說。 –

+0

我知道我爲什麼想用ID - 查找性能。 – lxngxr

回答

3

TL; DR:使用索引屬性進行查找,除非您絕對需要優化並可以測量差異。

通常,您使用索引查找作爲入口點,即獲取提供邊緣遍歷開始的節點。雖然Neo4j節點ID的指針式性質意味着它們在理論上更快,但索引查找也非常有效,所以除非您確定它會產生可衡量的差異,否則不應以性能爲由對其進行折扣。

您還應該考慮Neo4j節點ID不穩定。如果刪除節點,將來可能會重複使用相同的ID。出於這個原因,他們應該被認爲是內部實現細節,而不是應該依賴於應用程序外部接口的一部分。

也就是說,我有一個應用程序將Neo4j ID存儲在Solr索引中,用於批量查找節點,但該索引被視爲易失性,並且節點還包含索引的應用程序生成的UUID屬性(具有唯一約束)作爲他們的主要「主鍵」。

進一步閱讀和討論:https://github.com/neo4j/neo4j/issues/258