2015-04-02 23 views
2

我正在使用Neo4j 2.2.0並通過LOAD CSV導入數據(以節點文件和關係文件的形式)。基於LOAD CSV中的數據設置標籤

節點將全部導入到「Person」標籤下,但是如果節點文件中的緯度和經度字段爲空,我想爲其中的一些添加「Geotag」標籤。

因此,舉例來說,下面的節點文件(忽略行之間的額外線)

"username","id","latitude","longitude"

"abc123","111111111","33.223","33.223"

"abc456","222222222","",""

我想創建節點「ABC123」與Person和地理標記標籤和節點abc456只用人員標籤,因爲它沒有經度和緯度。

我認爲這將是沿着線的東西:

LOAD CSV WITH HEADERS FROM "file:/users.csv" AS line 
CREATE (p:Person { username: line.username, id: line.id, latitude: line.latitude, longitude: line.longitude }) 
SET p: (CASE WHEN line.latitude IS NOT NULL THEN GEOTAGGED); 

我知道我使用CASE語句錯誤以及SET語句,但是這是可能的,而進口的節點呢?這個文件有超過300萬個節點,插入時會有幫助,所以當新節點被添加(通常是分批)時,我們並沒有探索所有的節點,只是爲了找到新的節點。

我已經探索其他等問題(How to set relationship type and label in LOAD CSV?Loading relationships from CSV data into neo4j dbNeo4j Cypher - creating nodes and setting labels with LOAD CSV),但他們從我的問題,不同之處在於公司正試圖將文件作爲標籤的使用領域,我只是試圖讓有條件的OP根據文件中的數據決定使用哪些標籤。

謝謝!

編輯: 針對一個答案,我想以下幾點:

LOAD CSV WITH HEADERS FROM "file:/users.csv" AS line 
CREATE (p:Person { username: line.username, id: line.id, latitude: line.latitude, longitude: line.longitude }) 
CASE WHEN line.latitude IS NOT NULL THEN [1] ELSE [] END AS geotagged 
FOREACH (x IN geotagged | SET p:Geotag); 

我收到以下錯誤:

QueryExecutionKernelException: Invalid input 'A': expected 'r/R' (line 3, column 2 (offset: 454)) "CASE WHEN line.latitude IS NOT NULL THEN [1] ELSE [] END AS geotagged"

隨着胡蘿蔔「A下'in「CASE」

EDIT2:

下面是一個完整的解決方案,它的靈感來源於David的解決方案,只是略有不同。

LOAD CSV WITH HEADERS FROM "file:/users.csv" AS line 
CREATE (p:Person { username: line.username, id: line.id, latitude: line.latitude, longitude: line.longitude }) 
WITH p, CASE WHEN line.latitude <> "" THEN [1] ELSE [] END AS geotagged 
FOREACH (x IN geotagged | SET p:Geotag); 

回答

1

你就近了。您不能將條件邏輯放入設置的標籤語句中。當你有一個非零的lon/lat值時,你需要創建一個1的集合來迭代。然後遍歷1的集合並在那裏執行語句。

... 
case when line.latitude IS NOT NULL then [1] else [] end as geotagged 
foreach(x in geotagged | set p:Geotag) 
... 
+0

Bennet,謝謝。也許我是誤解,我仍然收到錯誤,我將它添加到我原來的帖子中。 – Brooks 2015-04-02 18:59:40

+0

對不起......我還假設,當你寫下「CASE WHEN時的情況」時,這是一個錯字,但我嘗試了兩種方法,但仍然沒有運氣。 – Brooks 2015-04-02 19:15:46

+0

爲了清楚起見,上面的語法是不起作用的,但是讓我走上了正確的軌道。要糾正它,只需在「CASE WHEN」前面加上「WITH p」即可。 OP中的完整解決方案。 – Brooks 2015-04-02 20:00:41