自然言語で書かれた構文注釈付きの文のデータベースを構築しています。データベース構造は非常に特殊なので、そのタスクに neo4j を使用できるかどうか疑問に思っていました。
データベースは多くの分離されたグラフ (文を表す) で構成され、各グラフは のようなノードのチェーンでありNODE1-[:NEXT]->NODE2-[:NEXT]->NODE3
、各ノードはプロパティを持つ単語です。データベースへのクエリの大部分は のようなものなSTART x=node:nodes(lemma="buy") MATCH x-[:NEXT]->y-[:NEXT]->z RETURN x,y,z
ので、基本的には ngram を抽出することだけが目的です。単語の補題に基づく単純な索引を使用します。
データベースには 6500 万のノード、2 億 7000 万のプロパティ、1 億 1000 万の関係があります。
私はneo4j 2.0.0 M-06を使用しています。
問題は、neo4j がそのような ngram クエリを実行するのに時間がかかりすぎることです。たとえば、上記のクエリには 140 秒以上かかります。インデックスで見つかった開始ノードの数に依存しているようです。数値が大きい場合 (~50k)、クエリは遅れます。
webadmin を介して cypher でクエリを実行し、Java およびトラバーサル フレームワークを介して cypher を使用してクエリを実行しようとしましたが、インデックスからアイテムを取得する際に何らかの問題があるように見えます。cypher-java では、クエリを実行すると 500 ミリ秒かかりますが、イテレータを呼び出すと、上記の 140 秒以上かかります。
そのようなものがあるかどうか、またはそのような問題を引き起こす可能性のあるものが他にあるかどうか、誰か教えてもらえますか? このような開始ノードが多いが単純な一致条件クエリを処理する効果的な方法があるのではないでしょうか?
可能であればCypherに固執したいと思います.Cypherはエレガントで表現力があり、問題が別の場所にあれば素晴らしいと思うからです:)