我有一个带有5M节点的neo4j数据库(版本2.0.2)以及这些节点的所有属性的索引。
当我有一个1M命中的索引搜索结果(org.neo4j.graphdb.index.IndexHits)并且只需要结果:500k - 510k时,迭代器从数据库加载所有节点(0 - 500k)并跳过它们这很慢。这是我目前的做法:
final int pageSize = 5000;
final int page = 100;
final Index<Node> index = graphDatabaseService.index().forNodes("indexname");
final IndexHits<Node> hits = index.query(new WildcardQuery(new Term("property", "value*")));
final PagingIterator<Node> pagingIterator = new PagingIterator<Node>(hits.iterator(), pageSize);
pagingIterator.page(page);
final Iterable<Node> pagingIterable = new Iterable<Node>() {
@Override
public Iterator<Node> iterator() {
return pagingIterator;
}
};
for (final Node node : pagingIterable) {
write(node);
}
有哪种方法可以避免资源迭代器从图形数据库中加载不必要的节点?
答案 0 :(得分:1)
为什么不使用Cypher呢?您可以使用SKIP和LIMIT关键字。
START n=node:indexname("property:value*")
RETURN n
SKIP 500000
LIMIT 10000
不知道会有什么表现。