【问题标题】:Traverse a graph using multiple schema criteria in Gremlin在 Gremlin 中使用多个模式条件遍历图形
【发布时间】:2021-07-05 13:55:43
【问题描述】:

我正在尝试进行 Gremlin 查询来遍历包含人和地点的图表。查询需要获取互相看的人的计数。假设它已经被图像算法收集和处理。请看下面的虚拟图。

g.addV('local').as('1').
  property(single, 'cidade', 'Londres').
  property(single, 'rua', 'Oxford').
  addV('pessoa').as('2').
  property(single, 'idade', 25).
  property(single, 'nome', 'Liam').
  property(single, 'genero', 'M').
  addV('pessoa').as('3').
  property(single, 'idade', 45).
  property(single, 'nome', 'Preston').
  property(single, 'genero', 'M').
  addV('pessoa').as('4').
  property(single, 'idade', 25).
  property(single, 'nome', 'Lexie').
  property(single, 'genero', 'F').
  addV('pessoa').as('5').
  property(single, 'idade', 45).
  property(single, 'nome', 'Toby').
  property(single, 'genero', 'M').
  addV('pessoa').as('6').
  property(single, 'idade', 52).
  property(single, 'nome', 'Sam').
  property(single, 'genero', 'M').
  addV('pessoa').as('7').
  property(single, 'idade', 32).
  property(single, 'nome', 'Jack').
  property(single, 'genero', 'M').
  addV('pessoa').as('8').
  property(single, 'idade', 29).
  property(single, 'nome', 'Lola').
  property(single, 'genero', 'F').
  addV('pessoa').as('9').
  property(single, 'idade', 51).
  property(single, 'nome', 'Bella').
  property(single, 'genero', 'F').
  addV('pessoa').as('10').
  property(single, 'idade', 37).
  property(single, 'nome', 'Dalilah').
  property(single, 'genero', 'F').
  addV('pessoa').as('11').
  property(single, 'idade', 28).
  property(single, 'nome', 'Oliver').
  property(single, 'genero', 'M').
  addV('pessoa').as('12').
  property(single, 'idade', 21).
  property(single, 'nome', 'Peter').
  property(single, 'genero', 'M').
  addV('pessoa').as('13').
  property(single, 'idade', 18).
  property(single, 'nome', 'Tyler').
  property(single, 'genero', 'M').addV('local').
    as('14').
  property(single, 'rua', 'Atlântica').
  property(single, 'cidade', 'Rio de Janeiro').
  addV('pessoa').as('15').
  property(single, 'nome', 'Marta').
  property(single, 'idade', 24).
  property(single, 'genero', 'F').
  addV('pessoa').as('16').
  property(single, 'nome', 'Jorge').
  property(single, 'idade', 18).
  property(single, 'genero', 'M').
  addE('olhou-para').from('2').to('4').
  addE('caminhando-em').from('2').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('olhou-para').from('3').to('4').
  addE('caminhando-em').from('3').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('caminhando-em').from('4').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('olhou-para').from('5').to('4').
  addE('caminhando-em').from('5').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('olhou-para').from('6').to('4').
  addE('caminhando-em').from('6').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('olhou-para').from('7').to('9').
  addE('caminhando-em').from('7').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('caminhando-em').from('8').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('caminhando-em').from('9').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('caminhando-em').from('10').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('olhou-para').from('11').to('10').
  addE('caminhando-em').from('11').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('olhou-para').from('12').to('8').
  addE('caminhando-em').from('12').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('olhou-para').from('13').to('8').
  addE('caminhando-em').from('13').to('1').
  property('data_hora', '4-7-21 8:31:23').
  addE('caminhando-em').from('15').to('14').
  property('data_hora', '4-7-21 8:31:23').
  addE('caminhando-em').from('16').to('14').
  property('data_hora', '4-7-21 8:31:23').
  addE('olhou-para').from('16').to('15')

这些词是葡萄牙语,“caminhando-em”的意思是“走在路上”,意思是一个人走在特定的街道上。边缘“olhou-para”的意思是“盯着看”,意思是一个人在那个地方看着另一个人。目标是根据他人的长相来“衡量”一个人的美貌。我不知道“stared”这个词在英语中是否适合表达这一点。

下面的查询用于获取按接收查看的人汇总的查看计数。

g.V().
inE("olhou-para").
group().by(inV().values("nome")).unfold().
project("pessoa","count").
by(select(keys)).
by(select(values).count(local)).
order().by("count",Order.desc)

结果是:

[
  {
    "pessoa": "Lexie",
    "count": 4
  },
  {
    "pessoa": "Lola",
    "count": 2
  },
  {
    "pessoa": "Marta",
    "count": 1
  },
  {
    "pessoa": "Dalilah",
    "count": 1
  },
  {
    "pessoa": "Bella",
    "count": 1
  }
]

问题是:如何在特定数据/时间仅选择伦敦的外观? 我的意思是,如何过滤以忽略来自“里约热内卢”城市的“Marta”顶点?

提前致谢, 胡里奥

【问题讨论】:

    标签: graph gremlin


    【解决方案1】:

    你也许可以像这样添加一个额外的过滤器:

    gremlin> g.V().
    ......1> inE("olhou-para").
    ......2> filter(outV().out('caminhando-em').has('cidade','Londres')).
    ......3> group().by(inV().values("nome")).unfold().
    ......4> project("pessoa","count").
    ......5> by(select(keys)).
    ......6> by(select(values).count(local)).
    ......7> order().by("count",Order.desc)
    
    ==>[pessoa:Lexie,count:4]
    ==>[pessoa:Lola,count:2]
    ==>[pessoa:Dalilah,count:1]
    ==>[pessoa:Bella,count:1]  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多