2013-03-12 60 views
3

我正在嵌入Java中的NEO4J中工作。 假設有一個名爲NODE_abc的節點,它有幾個屬性。 我想選擇節點,以便我可以使用getProperty()獲取屬性。在Java的NEO4J中按名稱選擇節點

我想選擇NODE_abc作爲myNode,這樣我就可以使用mynode.getProperty()來獲取節點「NODE_abc」的屬性。

節點的名稱「NODE_abc」被存儲在一個變量, 說字符串str =「NODE_abc」

回答

10

我同意關於索引和執行密碼查詢的tstorms。然而,我會指出節點標識符是短暫的。它們在有限的時間窗口內有用,但隨後會被回收。因此,一個節點不一定會在多次執行時擁有相同的標識符(或者一旦垃圾收集器已經運行)。

一般來說,在Neo4J中,如果您需要通過屬性(而不是通過遍歷)來查詢節點,則可以創建一個索引。例如,您可以創建一個名爲「actors」的索引:

IndexManager index = graphDb.index(); 
Index<Node> actors = index.forNodes("actors"); 

如果索引不存在,該命令將創建它。否則,它返回現有的索引。

然而,不同於SQL,在Neo4j的您必須手動將節點添加到索引:

Node reeves = graphDb.createNode(); 
reeves.setProperty("name", "Keanu Reeves"); 
actors.add(reeves, "name", reeves.getProperty("name")); 

然後,您可以查詢索引匹配指定查詢所有節點(指數不保證唯一性):

IndexHits<Node> hits = actors.get("name", "Keanu Reeves"); 
Node reeves = hits.getSingle(); 

來源:http://docs.neo4j.org/chunked/milestone/indexing-create.html

注意的Neo4j指數不實際讀取道具從節點來的erties,你必須明確地告訴它如何索引節點。你可以提供一個任意的信息,在這個信息上沒有存儲在節點上,但我不會推薦它。

+1

您可以輕鬆創建自動索引索引,如下所述:http://docs.neo4j.org/chunked/milestone/auto-indexing.html您只需實例化自動索引器,然後定義要自動添加的屬性 – bendaizer 2013-03-13 13:29:29

+0

謝謝,所以最後我知道的是,不是命名節點,而是設置一個屬性,如「Name:NODE_abc」,然後查詢它。 – Sourav048 2013-03-15 15:53:12

3

不知道你的意思是用一個名爲「node_abc」節點是什麼。節點沒有名稱,但是可以通過node.getId()獲得唯一的id(=標識符)。所以我的猜測是你有一個名稱屬性的節點。如果您在名稱屬性上有索引,則可以通過索引(indexing search)檢索它。如果您有該節點的標識符,則還可以通過CYPHER查詢(executing cypher queries)檢索它。

+0

感謝暴風雨爲您的答案, 節點的名稱我的意思是,當我創建節點時,我創建它像這樣。 節點A; A = graphDB.createNode(); 在這裏,我打電話給「A」節點的名稱。 – Sourav048 2013-03-13 02:51:50