問題タブ [neo4j-java-api]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
neo4j - Neo4j Cypherは、ソートされた関係を探索するすべてのパスを見つけます
2 つのノード間のすべてのパス (最大長まで) を見つける方法を見つけるのに何日も苦労していますが、Neo4j によるパスの探索は、探索される関係を (それらのプロパティの 1 つによって) 並べ替えることによって制御します。
明確にするために、最大長が M になるまで、2 つのノード間の K 個の最適なパスを見つけたいとしましょう。クエリは次のようになります。
ここまでは順調ですね。しかし、パスの関係には「優先度」と呼ばれるプロパティがあるとしましょう。私が望むのは、パス探索の各ステップで、どの関係を最初に探索する必要があるかを Neo4j に伝えるクエリを作成することです。
Java ライブラリと組み込みデータベースを使用すると、それが可能になることがわかっています (PathExpander インターフェイスを実装し、それを Java の GraphAlgoFactory.allSimplePaths() 関数への入力として与えることにより)。しかし今、Bolt または REST API を使用してサーバー モードのデータベース アクセスでこれを行う方法を見つけようとしています。
サーバーモードでこれを行う方法はありますか? それとも、サーバー モードでグラフにアクセスしているときに Java ライブラリ関数を使用しているのでしょうか。
jdbc - パラメータ化された Cypher クエリと Neo4J JDBC 準備済みステートメント
これに似たパラメータ化された暗号クエリがあります-
ここで、JDBC の準備済みステートメントから {relations} 変数を渡したいと思います。これは、ループしたいオブジェクトの配列になります。
java - Neo4j で、Java API を使用しているときにパス内のノードとリレーション タイプを制限する方法はありますか?
ソース ノードと宛先ノードがあり、パス内のノードとリレーション タイプに制限を加えたいと考えています。Neo4j Java APIを使用しています。
次のおもちゃの例を考えてみましょう。
3 つの人物ノード A、B、C があります。
ソース ノード: A &宛先ノード: B . それらの間に存在する可能性のある他の多くの種類のパスがあります。次のような特定の形式へのパスを制限したい-
(person) -[worksAt]-> (company) -[CompetitorOf]-> (company) <-[worksAt]- (person)
これは暗号クエリから非常に簡単に実現できますが、Java API を使用してそれを行う方法があるか知りたいです。
ノート:
- パスの長さを制限することはお勧めしません。問題は解決しません。パス内のノードとリレーション タイプを制限したい。
- 上記の例はおもちゃの例です。私が作業しようとしているグラフはより複雑であり、個々のパスをトラバースして検証することが現実的ではない可能性のあるパスが多数あります。
java - Neo4j は、特定のプロパティ Java API によってノードを取得します
Java API を使用して特定の属性でノードを取得する方法はありますか? 具体的には:
- 名前で
- レーベル別
- プロパティ別 - (さまざまなプロパティ)
私が見つけた唯一の機能は次のとおりです。
1 つのプロパティのみをサポートします。または、これを取得するには Cypher を使用する必要がありますか?
java - ループを使用してneo4jでノードの命名を自動化するには?
文字列のリストがあり、すべての要素をグラフ データベースにインポートしたいと考えています。インポートと言うのはつまり、文字列をノードのプロパティとして設定したいということです。リストのサイズは膨大になります。ノードの命名を自動化する方法はありますか? 従来の方法では、リストのサイズが 100 の場合、graphDb.createNode() を 100 回呼び出してノードを作成する必要があるためです。
neo4j - Neo4j 3.x の Java プログラムから Neo4j 埋め込みグラフ データベースを (サイファー) クエリするにはどうすればよいですか?
Neo4j は、私が最後に使用してから大きく成長しました (マイルストーン 2.0 から 3.0)。組み込みグラフ データベース (GraphDatabaseService) を使用して Java プログラムから cypher を使用したいと考えていました。
以前は ExecutionEngine を作成し、そこから先に行っていました。
現在、この目的のために org.neo4j.driver.* を使用する方法が推奨されているようです。
このバンドルは、Neo4j 3.0.7 から入手したライブラリにはないようです。
javaを使用して埋め込みグラフデータベースのサイファークエリを実行できる方法はありますか?
java - Neo4j ステートメント結果トラバース
私は現在、Java アプリケーション内で Neo4j データベース バージョン 3.0.3 を使用し、neo4j jdbc ドライバー バージョン 3.0.1 を使用しています (一致しないことはわかっていますが、今のところは問題ないと判断しました)。かなり具体的です。JDBC ライブラリを使用して暗号クエリを作成するときは、ノードにラベルを使用し、関係に型を使用するようにしています。
私のデータセットは、他の Person ノードを認識している Person ノードのネットワークです。KNOWS 関係には、その接続がいつ行われたかを追跡できるようにするための日付があります。以下に示すように、2 つの異なる Person ノード間の経路でデータ マイニングを行いたいと考えました。人々がますます多くの人々を知るようになるにつれて、エンド ノードに未知の関係があるかどうかを確認したいと思います。これには、開始者と終了者の間の経路にある人物ノードと、場合によってはそれらの関係が作成された日付を調べる必要があります。
今日、neo4j ブラウザー機能と Java コードの両方で、かなり具体的なクエリを実行しました。少なくともそう思っていました。
上記のクエリは、(garret) と (adam) の間で合計 30 のパスを返しました。Neo4j ブラウザーでのそのクエリの PROFILE は、38 ミリ秒を返すことを示しています。確かに電光石火のように見えます。
StatementResult オブジェクトを使用してそのクエリを Java コードに接続し、クエリを実行すると、以下に示すように list() メソッドを呼び出すと、その実行時間は42.7 秒であることがわかりました。
私の質問はこれです:
- list() コマンドにそんなに時間がかかるのはなぜですか?
- Neo4j の結果セットを処理する最良の方法は何ですか?
- その .list() 呼び出しに時間がかかるかどうかを判断するのに役立つ、PROFILE の実行から他のことを調べる必要がありますか?
私はこのプロジェクトの初期段階にいますが、データ セットが大きくなるにつれて、結果を取得するための 42.7 秒は確実にかなり劇的に長くなります。StatementResult からデータを取得する際のこの遅延を最小限に抑える最善の方法について、コミュニティからアドバイスを求めたいと思います。
皆さんが提供できるすべてのアドバイスに感謝します。
neo4j - Neo4J Java Native API vs Traversal API vs Cypher
Neo4J Java Native API、Traversal API、および Cypher のパフォーマンス評価を行った人はいますか? 上記の 3 つのオプションのうち、パフォーマンスの観点からより良い結果が得られるのはどれですか? また、書き込み操作には、ネイティブ Java API または暗号を使用する必要があります。ノード/関係の作成ごとではなく、DB に 1 回だけヒットするように、ネイティブ API で DB 操作を一括処理する可能性はありますか。
java - Neo4j Java ドライバーを使用した Cypher クエリの実行時間
Java ドライバーを使用して Cypher クエリの実行時間を調べようとしています。
しかし、 StatementResultまたはによって返されるResultSummaryのどこにも見つかりませんでしたStatementResult.consume(query)
。
からデータベースヒットにアクセスできProfiledPlan
ましResultSummary
たが、時間に関する情報はありません。
neo4j Java ドライバーを使用して Cypher クエリの実行時間にアクセスする方法はありますか?