私は、クライアント追跡を使用してWebアプリケーションのユーザー移動グラフを生成しています。追跡が進むにつれて、それらの間の関係を持つノード(ウェブサイトURL)を生成します。これらの関係は、「VIA_CLICK」または「OTHER」となります。ユーザーがリンクをクリックするたびに、現在のノード「VIA_CLICK」に接続された新しいWebサイトノードが生成されます。場合によってはリンクがユーザーをターゲットURLに誘導することもなく、リダイレクトが発生し、ユーザーがリンクからのターゲットURLと正確に異なるHTMLを読み込むことがあります。この場合、このパターンはNeo4j DBに保存されます:(開始 - ウェブサイト) - [VIA_CLICK] - >(リンク - ターゲット) - [OTHER] - >(リダイレクトされたターゲット) この場合、私はこのパターンを保持したいだけです(開始ウェブサイト) - [VIA_CLICK] - >(リダイレクトされたターゲット)のために、このリダイレクトをすべて検索したいと思います。全てのリダイレクションは、リンク先ノードの次のノードがすべて同じURLであり、それらの間の関係が「その他」であるという共通点を有する。私は正しいサイファークエリを見つけるのに苦労しています。多分ここの誰かが私を助けるかもしれない。私のユーザーの旅のグラフ(Neo4j)でcypher経由でリダイレクトを検索
0
A
答えて
0
のは、例えば、データセットを作成してみましょう:秒1は直接的な関係を探している間
CREATE
(p1:Site {name:1}),
(p2:Site {name:2}),
(p3:Site {name:3}),
(p4:Site {name:4}),
(p5:Site {name:5}),
(p6:Site {name:6}),
(p7:Site {name:7}),
(p8:Site {name:8}),
(p1)-[:VIA_CLICK]->(p2),
(p1)-[:VIA_CLICK]->(p3),
(p2)-[:OTHER]->(p5),
(p3)-[:OTHER]->(p5),
(p4)-[:OTHER]->(p5),
(p5)-[:VIA_CLICK]->(p6),
(p7)-[:VIA_CLICK]->(p8)
クエリの最初の部分は、リダイレクトをナビゲート。
MATCH (source:Site)-[:VIA_CLICK]->()-[:OTHER*]->(target:Site)
OPTIONAL MATCH (target)-[:OTHER]->(next)
WITH source, target, COUNT(next) as countNext
WHERE countNext = 0
RETURN DISTINCT source, target
UNION
MATCH (source:Site)-[:VIA_CLICK]->(target:Site)
OPTIONAL MATCH (target)-[:OTHER]->(next)
WITH source, target, COUNT(next) as countNext
WHERE countNext = 0
RETURN DISTINCT source, target
結果は次のようになります。
╒═════════╤═════════╕
│source │target │
╞═════════╪═════════╡
│{name: 1}│{name: 5}│
├─────────┼─────────┤
│{name: 5}│{name: 6}│
├─────────┼─────────┤
│{name: 7}│{name: 8}│
└─────────┴─────────┘
私は、クエリを簡素化することができ、非常に確信しています。
また、これが完全に質問に答えるかどうかはわかりません。グラフを修正する、つまりクエリ結果に基づいて新しいエッジを挿入しますか?
0
その後、1素晴らしいではありませんlinkTarget other
関係のカウント場合は、テストが必要になります。
MATCH (startWebsite)-[:VIA_CLICK]->(linkTarget)
OPTIONAL MATCH (linkTarget)-[:OTHER]->(redirectTarget)
WITH startWebsite,
linkTarget,
collect(distinct redirectTarget) + linkTarget as testTarget
WHERE size(testTarget) < 3
RETURN startWebsite as source,
head(testTarget) as target
関連する問題
- 1. のNeo4j CYPHER深い最初の検索
- 2. neo4j Cypherクエリのすべてのノードのルートノードを検索
- 3. Neo4jのCypherクエリーで索引付きプロパティーの検索に時間がかかる
- 4. FQL経由でユーザのイベントを検索
- 5. Hibernate + MSSQL + Fulltext Contains経由での検索
- 6. neo4jのサブグラフでの検索
- 7. Reflection経由でCOMオブジェクトメンバーを検索
- 8. CypherのNeo4j 3.0.0 + SPATIAL
- 9. Cypher Insert Neo4Jのクエリ
- 10. Neo4J:すべてのノードとすべてのプロパティを検索するCypher
- 11. SQLメタデータSharePoint経由で検索
- 12. 大きなneo4jグラフで未接続ノードを高速検索
- 13. Neo4jクエリでのCYPHER 2.3のパフォーマンス
- 14. SQLテーブルのIDのNAMEを検索し、PHP経由でエコー
- 15. PPAリポジトリ経由でJavaをインストールした後のJDKの検索
- 16. SmarTermの特定のテキストをVBA経由で検索する
- 17. curl経由のPHPでのヘッダのみの検索
- 18. Cypher for neo4j
- 19. Neo4j/Cypher concurrent MERGE
- 20. Neo4j cypherクエリは、中心ノード上のREST経由でパフォーマンスを向上させます
- 21. jQuery.post()とajax経由でリダイレクト
- 22. のNeo4j CYPHER - トラブル関係
- 23. Neo4j CypherのXORとツリー
- 24. Neo4j Cypherの最適化
- 25. neo4j、cypherのポリゴン内の点を検出する方法
- 26. cypherを使用したneo4jプロパティグラフのサイクルの検出
- 27. neo4jの階層ツリーで検索
- 28. Neo4jファジー検索
- 29. request.post経由で配列経由でneo4jにクエリを送信する
- 30. のNeo4j 2.0ワイルドカード検索
は、あなたの答えをありがとう!この問合せは、すべての「OTHER」関係を「無視」することによって、すべてのソースをターゲットにマップします。たとえば、サイト9を追加してこのようにマージした場合:(p2) - [:OTHER] - >(p9)の場合、2から2のその他の関係が送信されます。これは、2が静的リダイレクトのように機能しないことを意味します。クエリは次のタプルを出力するようになりました:(1,5)、(1,9)、... "OTHER"リレーションはグラフ内の有効なユーザーナビゲーションになります。 HTMLが読み込まれ、そのURLが直前に「クリック」されなかったたびに、表記は「その他」になります。たとえば、ユーザがuruelをmanuelly入力した場合。私はちょうど明白なリダイレクトを見つけたいと思う。 – mudvayne