2017-09-28 9 views
1

現在、頂点間の接続を示すグラフを使って作業しています。頂点は両方向に接続できます。私は、接続の方向または両方向に接続が存在するかどうかにかかわらず、いくつの頂点が互いに接続されているかを知ることに興味があります。Gremlin:反対方向の平行なエッジを持つエッジを無視して接続をカウントする

たとえば、下にスケッチしたグラフでは、接続された頂点の総数は3になります(単純なエッジカウントでは4つのエッジがあることがわかります)。

Example Graph

によりエッジの方向性に、これはTinkerpopレシピが提供する重複エッジ検出によって解決同じ問題ではありません。この数を助けることができるグレムリンクエリがありますか?

vertex1 = graph.addVertex(“example","vertex1") 
vertex2 = graph.addVertex("example","vertex2") 
vertex3 = graph.addVertex("example","vertex3") 
vertex4 = graph.addVertex("example","vertex4") 

vertex1.addEdge("Connected_to",vertex2) 
vertex2.addEdge("Connected_to",vertex1) 
vertex2.addEdge("Connected_to",vertex3) 
vertex3.addEdge("Connected_to",vertex4) 

私はグレムリン言語に新たなんだと私は頂点間の接続数をカウントクエリを作成悩みを抱えている:

私は以下のいくつかの例のデータを用意しました。私はグラフクエリの複雑さを理解するようになると、あなたからの助けを得ることは素晴らしいことでしょう!

答えて

2

dedup()には、2つの頂点IDを使用できます。エッジ方向が影響を与えないように、2つの頂点の一貫した順序(例えば、idによる順序)を確実に確保してください。

gremlin> g.E() 
==>e[8][0-Connected_to->2] 
==>e[9][2-Connected_to->0] 
==>e[10][2-Connected_to->4] 
==>e[11][4-Connected_to->6] 
gremlin> g.E().dedup().by(bothV().order().by(id).fold()) 
==>e[8][0-Connected_to->2] 
==>e[10][2-Connected_to->4] 
==>e[11][4-Connected_to->6] 
gremlin> g.E().dedup().by(bothV().order().by(id).fold()).count() 
==>3 
+0

これはすばらしい、洗練されたクエリです。ありがとうございました! – Chris

関連する問題