1

我在 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 );

批量插入器完成正常。

我已经注册了关机钩子,它应该完成批量插入和索引,对吗?

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

有什么线索???

4

1 回答 1

2

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

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

Cypher 然后会自动选择正确的索引来加快查询速度。

于 2013-10-29T23:30:10.437 回答