neo4j 使用 lucene 索引分页或如何跳过索引命中

问题描述 投票:0回答:1

我有一个 neo4j 数据库(版本 2.0.2),有 5M 个节点以及这些节点所有属性的索引。

当我有一个索引搜索结果(org.neo4j.graphdb.index.IndexHits)有1M的点击量并且只需要结果: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);
}

有没有办法避免资源迭代器从图形数据库加载不必要的节点?

indexing neo4j pagination iterator lucene
1个回答
1
投票

为什么不使用 Cypher 呢?您可以使用 SKIP 和 LIMIT 关键字。

START n=node:indexname("property:value*")
RETURN n
SKIP 500000
LIMIT 10000

不知道表演会怎样

© www.soinside.com 2019 - 2024. All rights reserved.