【问题标题】:neo4j paging with lucene index OR how to skip index hitsneo4j 使用 lucene 索引分页或如何跳过索引命中
【发布时间】:2014-05-31 19:02:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: lucene indexing iterator neo4j paging


    【解决方案1】:

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

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

    但不知道性能如何。

    【讨论】:

    • 大家好,感谢您的回答!是的,我已经看到 cypher 有一个“跳过”命令。 cypher 也可以解析我的 lucene 查询,但我正在使用自定义的 lucene QueryParser 为适当的字段提供数字范围查询。如果有办法让 ExecutionEngine 使用我的自定义 QueryParser,那对我来说将是一个解决方案......
    猜你喜欢
    • 2015-06-20
    • 2012-11-20
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多