1

我目前正在尝试 Neo4j 2.0.0 M3 并看到一些奇怪的行为。在我的单元测试中,一切都按预期工作(使用newImpermanentDatabase),但实际上,我没有graphDatabaseService.findNodesByLabelAndProperty.

这是有问题的代码:

ResourceIterator<Node> iterator = graphDB
            .findNodesByLabelAndProperty(Labels.User, "EMAIL_ADDRESS", emailAddress)
            .iterator();
try {
    if (iterator.hasNext()) { // => returns false**
        return iterator.next();
    }
} finally {
    iterator.close();
}
return null;

这不返回任何结果。但是,在运行以下代码时,我看到我的节点在那里(打印了 MATCH !!!!!!!!! )并且我还通过模式设置了索引(尽管如果我阅读 API,这似乎不是必需的,但对性能很重要):

ResourceIterator<Node> iterator1 = GlobalGraphOperations.at(graphDB).getAllNodesWithLabel(Labels.User).iterator();
    while (iterator1.hasNext()) {
        Node result = iterator1.next();
        UserDao.printoutNode(emailAddress, result);
    }

和 UserDao.printoutNode

public static void printoutNode(String emailAddress, Node next) {
    System.out.print(next);
    ResourceIterator<Label> iterator1 = next.getLabels().iterator();
    System.out.print("(");
    while (iterator1.hasNext()) {
        System.out.print(iterator1.next().name());
    }

    System.out.print("): ");
    for(String key : next.getPropertyKeys()) {
        System.out.print(key + ": " + next.getProperty(key).toString() + "; ");
        if(emailAddress.equals( next.getProperty(key).toString())) {
            System.out.print("MATCH!!!!!!!!!");
        }
    }

    System.out.println();
}

我已经通过代码进行了调试,我已经发现我通过InternalAbstractGraphDatabase.map2NodesaDelegatingIndexProxy.getDelegate并最终进入类,IndexReader.Empty该类返回IteratorUtil.EMPTY_ITERATOR因此得到falseiterator.hasNext()

知道我做错了什么吗?

4

1 回答 1

1

找到了:

我只包含neo4j-kernel:2.0.0-M03在类路径中。我添加的那一刻neo4j-cypher:2.0.0-M03一切都运行良好。

希望这个答案有助于为其他用户节省一些时间。

@Neo4j:如果抛出异常而不是什么都不返回,那就太好了。

@Ricardo:我想这样做,但我还没有被允许,因为我作为一个新的 SO 用户的声誉还不够好。

于 2013-07-08T19:43:19.960 回答