0

暗号クエリと数値インデックスに問題がある

@Indexed(unique = true, numeric = false)
private Long accountId;

戻り値:

neo4j-sh (0)$ start n=node:Principal(accountId = '1') return n;      
+---------------------------------------------------------------------------------------------+
| n                                                                                           |
+---------------------------------------------------------------------------------------------+
| Node[41722]{__type__:"example.package.Principal",accountId:1,name:"Simple User"} |
+---------------------------------------------------------------------------------------------+
1 row

しかし

@Indexed(unique = true, numeric = true)
private Long accountId;

戻り値:

neo4j-sh (0)$ start n=node:Principal(accountId = '1') return n; 
+---+
| n |
+---+
+---+
0 row

neo4j 1.9.2
spring-data-neo4j 2.3.0.RC1

私が正しく理解していれば、これはこの議論で議論されるかもしれませんが、それはかなり古いですか?

アップデート:

私が使用する場合

@Indexed(unique = true, numeric = false)

別の興味深いことが起こります。関係が存在するかどうかを確認します(実際にはデータベースに存在します):

count(r) は 0 に等しい - 不正解:

Long accountId = 1L;
Map<String, Object> result = template.query(
        "START child=node:Principal(accountId='{childId}') " +
                "MATCH child-[r:IS_MEMBER_OF]->parent " +
                "RETURN count(r)", MapUtil.map("childId", accountId)).singleOrNull();

count(r) は 1 に等しい - 正しい:

Long accountId = 1L;
Map<String, Object> result = template.query(
        "START child=node:Principal(accountId='1') " +
                "MATCH child-[r:IS_MEMBER_OF]->parent " +
                "RETURN count(r)",null).singleOrNull();
4

1 に答える 1

1

数値インデックス ルックアップは、リテラル値を持つ暗号からは機能しません。lucene パーサーは正しい内部クエリを作成しません。また、パラメーターを使用すると、インデックスに渡される通常のプリミティブ値は、neo4j lucene 実装では文字列として扱われます。クエリは、データが数値でインデックス化されたのか、文字列としてインデックス化されたのかを認識できないためです。

// this won't work, you have to remove the single quotes around '{childId}'
"START child=node:Principal(accountId='{childId}') " +

    "MATCH child-[r:IS_MEMBER_OF]->parent " +
    "RETURN count(r)", MapUtil.map("childId", accountId)).singleOrNull();

数値クエリを cypher で動作させる唯一の方法は、ValueContext.numeric(1)値を java-parameter-map のパラメータとして組み込みデータベースに渡すことです。

于 2013-08-08T12:29:51.417 に答える