2

私は Neo4j を初めて使用し、REST API を使用してノードと関係を作成しています。NA と NB の 2 つのノードがあり、それらは関係 RC で接続されています。「NA - RC - NB」。ノードと関係を作成する前に、ノードとノード間の関係が存在しないかどうかを確認します。ノードが存在するかどうかを確認する方法を理解し、2 つのノード間に関係が存在するかどうかを確認する方法に苦労しています。私はこの Cypher クエリを思いつきました。

"start x  = node(*), n = node(*) 
match x-[r]->n 
where (x.name? = {from} and type(r) = {rtype} and n.name? = {to}) 
return ID(r), TYPE(r)"

ノードにはプロパティ「名前」があります。このクエリを実行すると、空の 'data: []' が表示されます。

助言がありますか?Neo4j のドキュメントといくつかのチュートリアルを調べてみましたが、これを理解することはできませんでした。

ティア

Javaコードは次のとおりです。

/** Check if a relationship exists between two nodes */
public boolean relationshipExists(String from /** node name */
, String to /** node name */
, String type) {
    boolean exists = false;

    /** check if relationship exists */
    String url = "http://localhost:7474/db/data/cypher";
    JSONObject jobject = new JSONObject();
    try {
        Map<String, String> params = new HashMap<String, String>();
        params.put("from", from);
        params.put("rtype", type);
        params.put("to", to);
        String query = "start x  = node(*), n = node(*) match x-[r]->n where (x.name? = {from} and type(r) = {rtype} and n.name? = {to}) return ID(r), TYPE(r)";
        jobject.put("query", query);
        jobject.put("params", params);
    } catch (JSONException e) {
        logger.error("Error", e);
    }

    String response = sendQuery(url, jobject.toString());

    try {
        jobject = new JSONObject(response);
        JSONArray data = (JSONArray) jobject.get("data");
        JSONArray next = null;
        for (int index = 0; index < data.length(); index++) {
            next = data.getJSONArray(index);
            if (!next.isNull(1) && next.getString(1).equalsIgnoreCase(type)) {
                exists = (next.getInt(0) > -1) ? true : false;
            }
        }
    } catch (JSONException e) {
        logger.error("Error", e);
    }

    return exists;
}
4

2 に答える 2

1

型パラメーターは としてリストされていますが、パラメーター マップでは{type}として定義されています。"rtype"それはあなたのためにそれを修正しますか?パラメーターを指定せずに (ハード コードするだけで) クエリを実行して、機能するかどうかを確認してください。

于 2012-09-25T04:15:52.283 に答える
0

たぶん、RELATEコマンドで別のものにすることができます: http://docs.neo4j.org/chunked/1.8.M03/query-relate.html

この方法では、リレーションが既に存在するかどうかを確認する必要はありません。単純に、そうでない場合は作成します。

于 2012-09-27T08:29:09.807 に答える