2016-11-20 6 views
1

データモデルが実行に失敗しました。だから私は、文章中で使用するすべての単語がグラフの単語のノードとして存在することを知っています。 のNeo4jコンソールで文を作成するために、サイファークエリを実行しようとすると、のNeo4jはエラーを返します:一見簡単なのNeo4j CYPHERクエリが

Found no solution for block with size 7, Stream() were the selected candidates from the table IDPPlanTable(numberOfPlans=95, largestSolved=6)

編集私はそれをより理解するために、クエリで少し周りをいじってきました(に感謝先端!)。それらの一部はまだ動作していません。

MATCH (word8:word {word:'de'}),(word24:word {word:'platen'}), 
    (word25:word {word:'halen'}),(word26:word {word:'alles'}), 
    (word27:word {word:'wel'}),(word28:word {word:'weer'}), 
    (word29:word {word:'voor'}),(word18:word {word:'je'}), 
    (word30:word {word:'naar'}),(word31:word {word:'boven'}), 
    (word32:word {word:'als'}),(word33:word {word:'ze'}), 
    (word3353:word {word:'afspeelt'}) 
WITH (word8),(word24),(word25),(word26),(word27),(word28), 
    (word29),(word18),(word30),(word31),(word32),(word33),(word3353) 
MERGE (ThisSentence:Sentence {order:3})-[:START]-> 
(word8)-[nw26:NEXT {sentence:3, word:0}]-> 
(word24)-[nw27:NEXT {sentence:3, word:1}]-> 
(word25)-[nw28:NEXT {sentence:3, word:2}]-> 
(word26)-[nw29:NEXT {sentence:3, word:3}]-> 
(word27)-[nw30:NEXT {sentence:3, word:4}]-> 
(word28)-[nw31:NEXT {sentence:3, word:5}]-> 
(word29)-[nw32:NEXT {sentence:3, word:6}]-> 
(word18)-[nw33:NEXT {sentence:3, word:7}]-> 
(word30)-[nw34:NEXT {sentence:3, word:8}]-> 
(word31)-[nw35:NEXT {sentence:3, word:9}]-> 
(word32)-[nw36:NEXT {sentence:3, word:10}]-> 
(word18)-[nw37:NEXT {sentence:3, word:11}]-> 
(word33)-[nw38:NEXT {sentence:3, word:12}]->(word3353) 
WITH ThisSentence MATCH (PrevSentence) WHERE PrevSentence.order=2 
MERGE (PrevSentence)-[:NEXT]->(ThisSentence) WITH ThisSentence RETURN ThisSentence 

質問:このクエリは失敗します。私が考えてきた

可能な答え:

それは円形に何かがword18周りの関係を作成することがあります。

  • 29-> 18-> 30
  • 32> 18-> 33
  • :あなたが見ることができるように、それはすべてがお互いと異なり、入ってくる2および発信2を作成し、クエリで2回使用されて

どうすればこの問題を防ぐことができますか?

Neo4jバージョンは3.0.6 CEです。

+0

単語の条件を 'WHERE'節から' MATCH'節に移動しようとしましたか?たとえば、 'MATCH(word0:word {word: 'albums'})、...'とします。パフォーマンス面では違いはありません(しかし、これは 'PROFILE'でチェックする価値があります)。また、読みやすさを向上させると思います。 –

+0

ガーボーありがとう!私はwhere句を完全に削除しました。これははるかにきれいです。私はまだいくつかのクエリを実行するのに問題があります。 – Stefan

+0

2番目の一致 'WITH ThisSentence MATCH(PrevSentence)WHERE PrevSentence.order = 2'では' PrevSentence'を特定の型(例えば ':Sentence')にバインドせず、' order'をフィルタリングします。これはおそらく大きなグラフで評価するのが遅いでしょう。別のマイナーな提案:最初の 'MATCH'の後の' WITH'節は不要です。あなたのクエリに必要なノードだけで[サンプルグラフ](https://gist.github.com/szarnyasg/f1631cf4f4cfdc3b304204bc094bc4ad)を作成しました。空のデータベースでうまく動作しました。空のデータベースで実験できますか?たぶん[GrapheneDB](http://www.graphenedb.com/)? –

答えて

1

はい!回答が見つかりました...データセットは40ノードに縮小されました。それによって依然としてクエリが中断されます。
かなりのトレイルクエリ後(なしのデータセットの関係と9と31個のノードがありました)、次の作業のクエリが見つかりました:あなたが見ることができるように

MATCH (word8:word {word:'de'}), 
(word24:word {word:'platen'}), 
(word25:word {word:'halen'}), 
(word26:word {word:'alles'}), 
(word27:word {word:'wel'}), 
(word28:word {word:'weer'}), 
(word29:word {word:'voor'}), 
(word18:word {word:'je'}), 
(word30:word {word:'naar'}), 
(word31:word {word:'boven'}), 
(word32:word {word:'als'}), 
(word33:word {word:'ze'}), 
(word3353:word {word:'afspeelt'}), 
(PrevSentence:Sentence {order:2}) 
MERGE (PrevSentence)-[:NEXT]-> 
    (ThisSentence:Sentence {order:3})-[:START]->(word8) 
MERGE (word8)-[nw26:NEXT {sentence:3, word:0}]->(word24) 
MERGE (word24)-[nw27:NEXT {sentence:3, word:1}]->(word25) 
MERGE (word25)-[nw28:NEXT {sentence:3, word:2}]->(word26) 
MERGE (word26)-[nw29:NEXT {sentence:3, word:3}]->(word27) 
MERGE (word27)-[nw30:NEXT {sentence:3, word:4}]->(word28) 
MERGE (word28)-[nw31:NEXT {sentence:3, word:5}]->(word29) 
MERGE (word29)-[nw32:NEXT {sentence:3, word:6}]->(word18) 
MERGE (word18)-[nw33:NEXT {sentence:3, word:7}]->(word30) 
MERGE (word30)-[nw34:NEXT {sentence:3, word:8}]->(word31) 
MERGE (word31)-[nw35:NEXT {sentence:3, word:9}]->(word32) 
MERGE (word32)-[nw36:NEXT {sentence:3, word:10}]->(word18) 
MERGE (word18)-[nw37:NEXT {sentence:3, word:11}]->(word33) 
MERGE (word33)-[nw38:NEXT {sentence:3, word:12}]->(word3353) 

は、それがダウンして関係のチェーン全体を壊す必要原子レベルまでこの場合、Neo4jはパーツを処理する上で何の問題もありません。

答えが見つかりましたが、なぜNeo4jがクエリを処理できなかったのか不思議です。ノードのチェーンが長すぎますか?クエリ処理で「担保」データが多すぎますか?

関連する問題