graph - 在 Gremlin 中使用多个模式条件遍历图形
问题描述
我正在尝试进行 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”的意思是“盯着看”,意思是一个人在那个地方看着另一个人。目标是根据他人的长相来“衡量”一个人的美貌。我不知道“凝视”这个词在英语中是否适合表达这一点。
下面的查询用于获取按接收外观的人汇总的外观计数。
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
}
]
问题是:如何在特定数据/时间仅选择伦敦的外观?我的意思是,如何过滤以忽略“里约热内卢”城市的“玛塔”顶点?
在此先感谢,胡里奥
解决方案
您也许可以添加一个额外的过滤器,如下所示:
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]
推荐阅读
- reactjs - React 服务器启动失败(仅在我重新启动系统时才有效)
- reactjs - 如何对齐材料表中的“操作”列反应
- python - 如何使用循环将带有来自 googlesearch 的链接的列表附加到另一个列表?
- javascript - 使用 CSS :target 和 Javascript
- python-3.x - 通过 argparse 将 bash 变量数组读入 python
- reactjs - 如何在 React 中的函数组件中渲染之前从数据库中获取数据?
- c - 在循环中一起使用 printf 和 fgets
- python - SQLAlchemy 数据库迁移错误与 db.relationships
- python-3.x - 在 Python 中根据电子邮件地址和姓名查找最常见的电子邮件模式
- c# - 当我尝试打印不同的字符时,为什么终端会一直打印问号?