2017-02-08 130 views
1

我有一組節點使用file_A創建,其中包含與每個節點的'id'列。它一直使用這個暗號查詢(在Java中)創建:Neo4j Cypher - 添加屬性與加載CSV

USING PERIODIC COMMIT 1000 
LOAD CSV WITH HEADERS FROM 'file:file_A' AS line FIELDTERMINATOR '\t' 
CREATE (c:Node {nodeId:line.id}) 

現在我還有一個文件(FILE_B),其中包含四列:ID,描述,PROP2和prop3。我需要爲以前創建的每個節點分配一個描述(屬性'nodeDesc')。這些描述將從file_B的「描述」列中讀取。此外,要將此值賦予節點的'nodoDesc'屬性,'prop2'和'prop3'必須都等於'1'。爲了這個目的,我用這個暗號查詢:

USING PERIODIC COMMIT 1000 
LOAD CSV WITH HEADERS FROM 'file:file_B' AS line FIELDTERMINATOR '\t' 
MATCH (c:Node) 
WHERE c.nodeId=line.id AND line.prop2='1' AND line.prop3='1' 
SET c.nodeDesc = line.description 

FILE_B包含每個節點的一些描述,但其中只有一個既有「PROP2」和「prop3」等於「1」。這就是我想要分配給節點屬性的那個。

執行前一個查詢後,我得到的問題是一些節點沒有描述。在執行了幾次測試之後,我已經驗證它不會執行'nodeId'的列'id'爲file_B的MATCH,但是在該列中它是'nodeId',並且'prop2'和' prop3'等於1'。

注:FILE_A有400.000行aprox的,和FILE_B有1.300.000行aprox的。

謝謝。

回答

0

您可能希望確保不將整數與字符串進行比較。這通常可能是這些不匹配的根源。

如果兩個值都是字符串,那麼您可能需要檢查一個字符串或另一個字符串是否有尾隨(或前面)空格。

+0

你好,謝謝你的回答。值都是字符串。並沒有尾隨或前面的空間。事實上,如果我手動刪除file_B的所有行(除了那些不匹配的行之外),那麼如果我執行de-cypher查詢(第二個),它就會匹配。 – Vicente

+0

如果我將其中一個未匹配並粘貼的行作爲file_B上行的第一個位置,它也會匹配。奇怪的行爲... – Vicente