在Neo4j中编制索引时遇到问题

时间:2014-02-13 09:41:30

标签: indexing neo4j cypher

我有一个包含以下详细信息的数据集:

  • 140万个节点
  • 290万人关系
  • 1500万个属性(包括性别,名称,subscriber_id等)
  • 1种关系类型(联系)

我使用https://github.com/jexp/batch-import/tree/20批量导入数据到我的机器上的数据库(64位,16核,16 GB RAM)

我正在尝试在Subscriber_ID上索引这些节点,但我不确定我在做什么。

我跑了

start n = node(*) set n:Subscribers

我的理解是这为每个节点创建了一个标签(这是正确的)

接下来我跑了

create index on :Subscribers(SUBSCRIBER_ID)

我认为应该为属性'SUBSCRIBER_ID'上的'Subscribers'标签创建所有节点的索引。 (正确的吗?)

现在我去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. 看起来 就像我可以在运行批量导入时设置索引一样 脚本,但我真的不明白......有人可以解释 请?
  4. 以下是我的数据示例:

    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 个答案:

答案 0 :(得分:1)

schema是正确的命令。

Cypher自动为MERGEMATCH使用标签索引。

使用Java Core-API,您可以使用db.findNodesByLabelAndProperty(label,property,value)

除了一个,你做对了。您可以在执行批量导入时在节点上创建标签。

只需在CSV文件中添加l:label字段,其中包含每个节点的逗号分隔标签列表。如同该分支的自述文件所示。