2014-08-27 120 views
2

從電子表格導入大量數據時,我試圖使用標籤約定,其中節點大寫爲「This」,關係標籤標記爲「THIS」。在一種情況下,我不小心將關係標籤格式用於一組節點。然後我刪除了這些節點,並用正確的標籤格式重新導入它們。 (旁邊的問題 - 有沒有辦法重命名標籤,我沒有看到哪些可以避免刪除/重新導入?)從neo4j中刪除標籤參考

我的問題是,在內置的Cypher瀏覽器(Neo4j 2.1.3)中,即使零節點標籤錯誤,節點列表中也會顯示正確和錯誤的標籤。所以,雖然我成功地刪除了節點,但我無法弄清楚如何從節點中刪除標籤 - 使用REMOVE命令很容易,但完全可以從數據庫中刪除標籤。爲什麼當它被分配的項目達到零時,它會自動刪除該標籤?

更具體地講,我可以點擊措施的節點標籤和這個查詢大火於:

MATCH (n:`MEASURES`) RETURN n LIMIT 25 

與這些結果:

Returned 0 rows in 77 ms 

我想徹底刪除標籤「 MEASURES'從數據庫,因爲沒有什麼是使用它。如果您需要更多信息,請告訴我。

回答

5

我不認爲現在還沒有內置的方法來完全從neo4j數據庫中刪除不再使用的標籤。我也被過時的標籤所困擾,這些標籤仍然出現在neo4j瀏覽器的網頁界面中。

我知道一種方法可以將它們刪除,但如果您的數據庫數量巨大,它可能不實用,並且它可能不是完全安全的。因此,如果您選擇執行以下操作,則應確保備份了原始數據庫(例如,您應該複製原始文件夾或將其重命名)。

該技術其實很簡單。您只需導出所有數據,關閉neo4j,刪除或重命名原始文件graph.db,重新啓動neo4j,然後重新導入數據。以下步驟假設您在linux環境中的neo4j安裝文件夾中,並且neo4j未作爲服務運行。

  1. 導出數據(CYPHER語句將重新創建數據):

    。/斌/ Neo4j的殼-c 「傾銷」> mydump.cql

  2. 關閉Neo4j的(因爲它是不安全的刪除或重命名graph.db而DB運行):

    ./bin/neo4j停止

  3. 重命名當前graph.db文件夾,以防萬一你需要更換下面創建新文件夾:/

  4. RES

    MV數據/ graph.db數據graph.db.archive撻Neo4j的,它會自動創建一個新的文件夾graph.db

    ./bin/neo4j開始

  5. 重新導入從轉儲數據:

    ./bin/neo4j-shell -file mydump .cql

過時的標籤應該從任何地方消失(您應該重新加載所有neo4j網頁)。

+0

我想你已經得到了我所要求的,當我在這個週末有機會時,我會試試這個,然後回報。的確,我在談論的是neo4j瀏覽器UI中的按鈕,爲什麼我知道數據庫仍然知道標籤。感謝這個想法。 – 2014-08-29 15:21:34

+0

我終於開始這樣做了。轉儲花了相當長的一段時間,導致超過700,000行。然後,我必須插入; /提交/開始行每千行,以便文件讀取過程不會崩潰。在Notepad ++中使用正則表達式查找/替換的技巧。 正如你可以想象的那樣,導入永遠持續下去,但是違規標籤已經消失。這似乎是解決這個問題的一個非常麻煩的方法。但是,在等待2.1.5社區發佈(2.1.5企業版)時,我注意到企業版發行說明提到了修復可能與此相關的錯誤。我們拭目以待。謝謝! – 2014-10-16 19:30:29

1

標籤除了使用它們的節點之外並不存在。您始終可以查詢不存在的標籤,並且您將始終返回零節點。

在這裏,您正在查詢MEASURES並且什麼也沒有。這與標籤不存在非常相似。

這裏有一個數據庫中,我剛纔所說的例子:

$ neo4j-shell -path test 
NOTE: Local Neo4j graph database service at 'test' 
Welcome to the Neo4j Shell! Enter 'help' for a list of commands 


neo4j-sh (?)$ MATCH (m:TotallyNonExistantLabel) return m; 
+---+ 
| m | 
+---+ 
+---+ 
0 row 
1946 ms 

因此,底線是,你不能真正從不是刪除所有使用它們的節點的其它數據庫中刪除標籤。你可以是這樣做的:

MATCH (f:ThisLabelGonnaDieSucka) 
REMOVE f:ThisLabelGonnaDieSucka 
RETURN f; 

這基本上是從數據庫中刪除ThisLabelGonnaDieSucka

2

這是怎麼做到的。

你必須確保那是什麼

  • 1)無節點使用標籤
  • 2),並沒有指標或約束刪除標籤

1) /用cypher查詢重命名節點上的標籤:

MATCH (n:OldLabel) 
SET n:NewLabel /* Optional line if you want to rename the label */ 
REMOVE n:OldLabel 
RETURN n 

2a)檢查i ˚F指數或約束在neo4j-shell使用使用schema命令標籤:

$ neo4j-shell 
Welcome to the Neo4j Shell! Enter 'help' for a list of commands 
NOTE: Remote Neo4j graph database service 'shell' at port 1337 

neo4j-sh (?)$ schema 
Indexes 
    ON :OldLabel(id)   ONLINE (for uniqueness constraint) 
    ON :Person(name)   ONLINE (for uniqueness constraint) 
    ON :Person(id)    ONLINE (for uniqueness constraint) 

Constraints 
    ON (person:Person) ASSERT person.name IS UNIQUE 
    ON (person:Person) ASSERT person.id IS UNIQUE 
    ON (oldlabel:OldLabel) ASSERT oldlabel.id IS UNIQUE 

2B)在cypher查詢中刪除索引和約束:

DROP CONSTRAINT ON (n:OldLabel) 
    ASSERT n.id IS UNIQUE; 
DROP INDEX ON :OldLabel(id); 

請記住,對新指數和約束,如果你只是想重新命名標籤。

之後,標籤不應再出現在Web界面中。