2016-10-31 2 views
0

私は、クライアント追跡を使用してWebアプリケーションのユーザー移動グラフを生成しています。追跡が進むにつれて、それらの間の関係を持つノード(ウェブサイトURL)を生成します。これらの関係は、「VIA_CLICK」または「OTHER」となります。ユーザーがリンクをクリックするたびに、現在のノード「VIA_CLICK」に接続された新しいWebサイトノードが生成されます。場合によってはリンクがユーザーをターゲットURLに誘導することもなく、リダイレクトが発生し、ユーザーがリンクからのターゲットURLと正確に異なるHTMLを読み込むことがあります。この場合、このパターンはNeo4j DBに保存されます:(開始 - ウェブサイト) - [VIA_CLICK] - >(リンク - ターゲット) - [OTHER] - >(リダイレクトされたターゲット) この場合、私はこのパターンを保持したいだけです(開始ウェブサイト) - [VIA_CLICK] - >(リダイレクトされたターゲット)のために、このリダイレクトをすべて検索したいと思います。全てのリダイレクションは、リンク先ノードの次のノードがすべて同じURLであり、それらの間の関係が「その他」であるという共通点を有する。私は正しいサイファークエリを見つけるのに苦労しています。多分ここの誰かが私を助けるかもしれない。私のユーザーの旅のグラフ(Neo4j)でcypher経由でリダイレクトを検索

答えて

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) 

Example graph

クエリの最初の部分は、リダイレクトをナビゲート。

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

は、あなたの答えをありがとう!この問合せは、すべての「OTHER」関係を「無視」することによって、すべてのソースをターゲットにマップします。たとえば、サイト9を追加してこのようにマージした場合:(p2) - [:OTHER] - >(p9)の場合、2から2のその他の関係が送信されます。これは、2が静的リダイレクトのように機能しないことを意味します。クエリは次のタプルを出力するようになりました:(1,5)、(1,9)、... "OTHER"リレーションはグラフ内の有効なユーザーナビゲーションになります。 HTMLが読み込まれ、そのURLが直前に「クリック」されなかったたびに、表記は「その他」になります。たとえば、ユーザがuruelをmanuelly入力した場合。私はちょうど明白なリダイレクトを見つけたいと思う。 – mudvayne

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 
関連する問題