2014-02-13 59 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字段,该字段包含每个节点以逗号分隔的标签列表。如该分支的自述文件所示。