gpt4 book ai didi

java - 无法检索 Neo4j 中的 inode

转载 作者:行者123 更新时间:2023-12-01 12:32:55 26 4
gpt4 key购买 nike

我使用以下代码加载数据:

public void createGraph() {
Map<String, String> config = new HashMap<String, String>();
config.put("cache_type", "none");
config.put("use_memory_mapped_buffers", "true");
config.put("neostore.nodestore.db.mapped_memory", "200M");
config.put("neostore.relationshipstore.db.mapped_memory", "1000M");
config.put("neostore.propertystore.db.mapped_memory", "250M");
config.put("neostore.propertystore.db.strings.mapped_memory", "250M");
inserter = BatchInserters.inserter("./data/neo4j", config);

long start = System.currentTimeMillis();

try {
BufferedReader reader = new BufferedReader(new InputStreamReader(new
FileInputStream("./data/enronEdges.txt")));
String line;
int lineCounter = 1;
long srcNode, dstNode;
while((line = reader.readLine()) != null) {
if(lineCounter > 4) {
String[] parts = line.split("\t");

srcNode = getOrCreate(parts[0]);
dstNode = getOrCreate(parts[1]);

inserter.createRelationship(srcNode, dstNode, RelTypes.SIMILAR, null);
}
lineCounter++;
}
reader.close();
}
catch (IOException e) {
e.printStackTrace();
}

long time = System.currentTimeMillis() - start;
inserter.createDeferredSchemaIndex(NODE_LABEL).on("nodeId").create();
System.out.println("Loading time: " + time / 1000.0);

inserter.shutdown();
}

private long getOrCreate(String value) {

Long id = cache.get(Long.valueOf(value));
if(id == null) {
Map<String, Object> properties = MapUtil.map("nodeId", value);
id = inserter.createNode(properties, NODE_LABEL);
cache.put(Long.valueOf(value), id);
}
return id;
}

然后我尝试使用以下代码检索节点:

GraphDatabaseService gdb = new GraphDatabaseFactory().newEmbeddedDatabase(dbPath);
try(Transaction tx = gdb.beginTx()) {
Node n = gdb.findNodesByLabelAndProperty(DynamicLabel.label("Node"), "nodeId", 1).iterator().next();
System.out.println(n);

}

但我收到以下错误:

Exception in thread "main" java.util.NoSuchElementException: No more elements in org.neo4j.collection.primitive.PrimitiveLongCollections$5@6b3ab760 at org.neo4j.collection.primitive.PrimitiveLongCollections$PrimitiveLongBaseIterator.next(PrimitiveLongCollections.java:60) at org.neo4j.collection.primitive.PrimitiveLongCollections$13.next(PrimitiveLongCollections.java:712) at org.neo4j.helpers.collection.ResourceClosingIterator.next(ResourceClosingIterator.java:76) at test.Neo4jBatchInsert.visitAllNodes(Neo4jBatchInsert.java:56) at test.Neo4jBatchInsert.main(Neo4jBatchInsert.java:49)

这不是获取 inode 的正确方法吗?
仅供引用,我使用嵌入式 Neo4j 2.1.3。

最佳答案

索引是在初始化 gdb 时填充的,因此可能需要一些时间才能使索引联机。

您可以在 findNodesByLabelAndProperty 之前调用 gdb.schema().awaitIndexesOnline(10l, TimeUnits.MINUTES) 以确保索引就位。

关于java - 无法检索 Neo4j 中的 inode ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25802794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com