簡體   English   中英

如何在 Gremlin 中查找公共頂點數並對結果進行排序?

[英]How to find common vertex count and sort the result in Gremlin?

我的架構有兩種類型的節點,

node1:學生(id為主鍵) node2:技能(SkillName為主鍵)他們之間的關系是HAS_SKILL

我的用例:對於給定的學生 ID,我需要獲取相似的用戶、技能計數和技能匹配最多的常用技能列表。

我試過的查詢:

g.V().has('Student','id','test1').
      out('HAS_SKILL').
      inE('HAS_SKILL').
      group().
        by(outV().values('userId')).
      unfold().
      project('id','count').
        by(select(keys)).
        by(select(values).count(local)).
      order().
        by('count',desc)

此查詢提供相似的用戶和計數 bt 我無法獲得常用技能列表。如何實現?

使用以下步驟,我根據您的問題文本創建了一個示例圖表。

g.addV('Student').property('id','S1').as('s1').
  addV('Student').property('id','S2').as('s2').
  addV('Student').property('id','S3').as('s3').
  addV('Student').property('id','S4').as('s4').
  addV('Student').property('id','S5').as('s5').
  addV('Skill').property('SkillName','cricket').as('cr').
  addV('Skill').property('SkillName','football').as('fo').
  addV('Skill').property('SkillName','golf').as('go').
  addV('Skill').property('SkillName','volleyball').as('vo').
  addE('HAS_SKILL').from('s1').to('cr').
  addE('HAS_SKILL').from('s1').to('fo').
  addE('HAS_SKILL').from('s2').to('fo').
  addE('HAS_SKILL').from('s2').to('go').
  addE('HAS_SKILL').from('s3').to('fo').
  addE('HAS_SKILL').from('s3').to('cr').
  addE('HAS_SKILL').from('s3').to('vo').
  addE('HAS_SKILL').from('s4').to('cr').
  addE('HAS_SKILL').from('s5').to('fo') 

這些步驟構建了一個看起來像這樣的圖表

示例圖

然后,我們可以使用沿着這些思路的查詢來查找常用技能列表。

g.V().has('Student','id','S1').
      out('HAS_SKILL').as('common').
      in('HAS_SKILL').
      group().
        by('id').
        by(select('common').values('SkillName').fold()).unfold()

哪個生產

{'S3': ['cricket', 'football']}
{'S4': ['cricket']}
{'S5': ['football']}
{'S1': ['cricket', 'football']}
{'S2': ['football']}

然后,您可以從這些構建塊中獲取計數和任何其他所需信息。

g.V().has('Student','id','S1').
      out('HAS_SKILL').as('common').
      in('HAS_SKILL').
      group().
        by('id').
        by(select('common').values('SkillName').fold()).
      unfold().
      project('id','count','skills').
        by(keys).
        by(select(values).count(local)).
        by(select(values)).
      order().
        by('count',desc)

這給了我們最終的結果

{'id': 'S3', 'count': 2, 'skills': ['cricket', 'football']}
{'id': 'S1', 'count': 2, 'skills': ['cricket', 'football']}
{'id': 'S4', 'count': 1, 'skills': ['cricket']}
{'id': 'S5', 'count': 1, 'skills': ['football']}
{'id': 'S2', 'count': 1, 'skills': ['football']}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM