2016-11-18 6 views
0

私はこのように見ているグラフインポートした:のNeo4jコミュニティへは何サイファー/のNeo4jを作成し、「予想2つの文字列を、しかし[Ljava.lang.Stringだ。22d9b2a2と... @」エラー

(x:Person {id:"Pers1"})-[:factoid {name:[" Abt Eberhard "]}]->(u:Source {id:"Source1"}) 

をエディション3.0.7(今日はWindows 10マシンにのみインストールされています)。 f.nameで全体の用語を検索する

が正常に動作します:

MATCH g=(p:Person)-[f:factoid]-(u:Source) 
WHERE f.name=' Abt Eberhard ' 
RETURN f.name 

しかし=~CONTAINSSTARTS WITH、または正規表現を使用して、例えば

MATCH g=(p:Person)-[f:factoid]-(u:Source) 
WHERE f.name STARTS WITH ' A' 
RETURN f.name 

のようなエラーを返します
Expected two strings, but got [Ljava.lang.String;@38fb2527 and A 

私は間違って何をしていますか?

答えて

0

例のデータでは、factoid関係のnameプロパティは、文字列リスト:[" Abt Eberhard "]です。ただ、角括弧を削除し、それは同様にSTARTS WITHで動作します:

CREATE 
    (x:Person {id:"Pers1"})-[:factoid {name:" Abt Eberhard "}]-> 
    (u:Source {id:"Source1"}) 

MATCH g=(p:Person)-[f:factoid]-(u:Source) 
WHERE f.name STARTS WITH ' A' 
RETURN f.name 

╒══════════════╕ 
│f.name  │ 
╞══════════════╡ 
│ Abt Eberhard │ 
└──────────────┘ 

等価比較は動作しますが、(おそらく)サイファーエンジンは、リスト上のtoString()様の操作を実行するため。しかし、結果の違いに注意してください:

CREATE 
    (x:Person {id:"Pers1"})-[:factoid {name:" Abt Eberhard "}]-> 
    (u:Source {id:"Source1"}) 
CREATE 
    (x:Person {id:"Pers1"})-[:factoid {name:[" Abt Eberhard "]}]-> 
    (u:Source {id:"Source1"}) 

MATCH g=(p:Person)-[f:factoid]-(u:Source) 
WHERE f.name=' Abt Eberhard ' 
RETURN f.name 

╒════════════════╕ 
│f.name   │ 
╞════════════════╡ 
│ Abt Eberhard │ 
├────────────────┤ 
│[ Abt Eberhard ]│ 
└────────────────┘ 
+0

さらに別の明確な説明が私の問題を作成します。ありがとう! – GVogeler

0

興味深い。 nameの値は実際にはのコレクションで、1つの文字列しか含まれていません。これは意図的ですか?

私はこのクエリことに驚いています:コレクションは、エラーが発生したり、少なくともfalseする必要がありますいずれかの文字列を、等しい場合そのクエリを求めているので、

MATCH g=(p:Person)-[f:factoid]-(u:Source) WHERE f.name=' Abt Eberhard ' RETURN f.name 

は、何かを返します。

MATCH g=(p:Person)-[f:factoid]-(u:Source) WHERE f.name[0]=' Abt Eberhard ' RETURN f.name[0] 

それはあなたがもっとうるさいですしようとした他の文字列関数のようになります。

「正しい」構文はこのようなものになるだろう。たとえば、STARTS WITHは、「正しい」構文で動作します。

MATCH g=(p:Person)-[f:factoid]-(u:Source) WHERE f.name[0] STARTS WITH =' A' RETURN f.name[0]; 
+0

それだけです!ありがとう!! – GVogeler

関連する問題