我在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
任何线索??!
答案 0 :(得分:2)
您在批量插入期间创建模式索引,而在Cypher查询中,您使用START子句,该子句使用您必须单独创建和更新的旧索引。 尝试将查询重写为:
MATCH (n:Person)-[:MYEDGE]-(x)
WHERE n.persionid='12345'
RETURN count(x)
然后,Cypher将自动选择正确的索引以加快查询速度。