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.map2NodesDelegatingIndexProxy.getDelegate最終的にIndexReader.Emptyを返すクラスにIteratorUtil.EMPTY_ITERATORなることfalseです。iterator.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 に答える