创造&使用索引 - Neo4j 2.0

时间:2013-10-29 19:29:07

标签: neo4j

我在Neo4j中使用/创建索引时遇到问题。

我正在进行大量插入,因此使用BatchInserter - import org.neo4j.unsafe.batchinsert.BatchInserter;

但是 - 插入后,索引不会出现?

我创建了这样的索引:

BatchInserter inserter = BatchInserters.inserter( DB_CONNECTION_STRING );

Label personLabel = DynamicLabel.label( "Person" );

Label transactionLabel = DynamicLabel.label( "Transaction" );

BatchInserter inserter = inserter.createDeferredSchemaIndex( personLabel ).on( "personid" ).create();

BatchInserter inserter = inserter.createDeferredSchemaIndex( transactionLabel ).on( "txid" ).create();

然后,插入节点......

Map<String, Object> properties = new HashMap<>();

properties.put( "personid", myPersonID );

long nodeID = inserter.createNode( properties, personLabel );

批量插入器完成。

我已经注册了shutdown hook,它应该完成批量插入&amp;索引,对吧?

Runtime.getRuntime().addShutdownHook( new Thread() {
@Override
public void run() {
  inserter.shutdown();
} } );

最后,我尝试了Cypher查询。但是,它报告索引不存在。

START n=node:Person(personid='12345')
MATCH (n)-[:MYEDGE]-(x) 
RETURN count(x);

结果:

STATEMENT_EXECUTION_ERROR: Index `Person` does not exist

任何线索??!

1 个答案:

答案 0 :(得分:2)

您在批量插入期间创建模式索引,而在Cypher查询中,您使用START子句,该子句使用您必须单独创建和更新的旧索引。 尝试将查询重写为:

MATCH (n:Person)-[:MYEDGE]-(x) 
WHERE n.persionid='12345' 
RETURN count(x)
然后,

Cypher将自动选择正确的索引以加快查询速度。