2014-02-13 100 views
0

我有以下細節的數據集:經與索引麻煩的Neo4j

  • 140萬節點
  • 290萬的關係
  • 15000000性質(包括性別,姓名,subscriber_id等)
  • 1關係類型(聯繫人)

我已批量導入數據到我的機器上的數據庫(64位,16核心,16 G B RAM)使用https://github.com/jexp/batch-import/tree/20

我想索引Subscriber_ID這些節點,但我不知道我在做什麼。

我跑

start n = node(*) set n:Subscribers 

我的理解是這會爲每個節點的標籤(這是正確的)

接下來,我跑了

create index on :Subscribers(SUBSCRIBER_ID) 

我想這應該創建在屬性'SUBSCRIBER_ID'上具有'訂閱者'標籤的所有節點的索引。 (正確嗎?)

現在,當我去的Neo4j-SH和運行

neo4j-sh (?)$ schema 
==> Indexes 
==> ON :Subscribers(SU_SUBSCRIBER_ID) ONLINE 
==> 
==> No constraints 

但是當我運行下面它說沒有爲節點設置指標。

neo4j-sh (?)$ index --indexes 
==> Node indexes: 
==> 
==> Relationship indexes: 

我有幾個問題

  1. 我一定要告訴它索引現有的數據?如果是的話我該怎麼辦 ?
  2. 我該如何使用索引?我已閱讀了 文檔,但是我遇到了一些問題。
  3. 它看起來 像我可以在我運行批量導入 腳本時設置索引,但我真的不知道如何...有人可以解釋 請嗎?

這裏是我的數據的例子:

Nodes.txt

id SU_SUBSCRIBER_ID CU_FIRST_NAME gender SU_AGE 
0 123456      Ann F  56 
1 832746       ? UNKNOWN -1 
2 546765      Tom UNKNOWN -1 
3 768345      Anges F  72 
4 267854     Aoibhlinn F  38 

rels.csv

start end rel counter 
0   3 CONTACTED 2 
1   2 CONTACTED 1 
1   4 CONTACTED 1 
3   2 CONTACTED 2 
4   1 CONTACTED 1 

回答

1

schema是看在正確的命令。

Cypher自動使用MERGEMATCH的標籤索引。

隨着Java核心的API,你會使用db.findNodesByLabelAndProperty(label,property,value)

你做了正確的事情,除了一個。您可以在進行批量導入時在節點上創建標籤。

只需在您的CSV文件中添加一個l:label字段,該字段包含每個節點以逗號分隔的標籤列表。如該分支的自述文件所示。