从图中查找路径,然后使用 Gremlin 计算一条路径在 Azure Cosmos DB 中出现的次数
Find paths from a graph and then count how many times a path occurs in Azure Cosmos DB using Gremlin
我使用以下结构将点击流事件存储在图形数据库中
用户执行多个事件,每个事件都比前一个事件有优势:
- 顶点是 'user' 和 'event'
- 边是 'performed' 和 'previous'
每个事件都有一个 属性 命名引荐来源网址。
例如,如果用户查看页面 www.foobar.com/aaa
然后会有一个页面浏览事件,它会有 referer:www.foobar.com/aaa
现在我想从主页找到可能的路径及其数量
使用下面的 Gremlin 查询我能够找到可能的路径,但我无法将它们分组以找到每条路径的计数:
g.V().hasLabel('event').has('referer','https://www.foobar.com/').in('previous').in('previous').path().by('referer')
输出:
[
{
"labels": [
[],
[],
[]
],
"objects": [
"https://www.foobar.com/",
"https://www.foobar.com/aaa",
"https://www.foobar.com/bbb"
]
},
{
"labels": [
[],
[],
[]
],
"objects": [
"https://www.foobar.com/",
"https://www.foobar.com/aaa",
"https://www.foobar.com/bbb"
]
},
{
"labels": [
[],
[],
[]
],
"objects": [
"https://www.foobar.com/",
"https://www.foobar.com/ccc",
"https://www.foobar.com/ddd"
]
}
]
我想要这样的输出:
[[
"https://www.foobar.com/",
"https://www.foobar.com/aaa",
"https://www.foobar.com/bbb"
]:2,
[
"https://www.foobar.com/",
"https://www.foobar.com/ccc",
"https://www.foobar.com/ddd"
]:1]
由于我使用的是 azure cosmos graph db,所以只有这些 gremlin 运算符可用
https://docs.microsoft.com/en-us/azure/cosmos-db/gremlin-support
谢谢
您可以使用如下语法将 groupCount
应用于 path
:
groupCount().by(path().by('referer'))
因此您可以将查询重写为:
g.V().hasLabel('event').
has('referer','https://www.foobar.com/').
in('previous').
in('previous').
groupCount().by(path().by('referer'))
希望这对您有所帮助,
干杯
开尔文
我使用以下结构将点击流事件存储在图形数据库中
用户执行多个事件,每个事件都比前一个事件有优势:
- 顶点是 'user' 和 'event'
- 边是 'performed' 和 'previous'
每个事件都有一个 属性 命名引荐来源网址。 例如,如果用户查看页面 www.foobar.com/aaa 然后会有一个页面浏览事件,它会有 referer:www.foobar.com/aaa
现在我想从主页找到可能的路径及其数量
使用下面的 Gremlin 查询我能够找到可能的路径,但我无法将它们分组以找到每条路径的计数:
g.V().hasLabel('event').has('referer','https://www.foobar.com/').in('previous').in('previous').path().by('referer')
输出:
[
{
"labels": [
[],
[],
[]
],
"objects": [
"https://www.foobar.com/",
"https://www.foobar.com/aaa",
"https://www.foobar.com/bbb"
]
},
{
"labels": [
[],
[],
[]
],
"objects": [
"https://www.foobar.com/",
"https://www.foobar.com/aaa",
"https://www.foobar.com/bbb"
]
},
{
"labels": [
[],
[],
[]
],
"objects": [
"https://www.foobar.com/",
"https://www.foobar.com/ccc",
"https://www.foobar.com/ddd"
]
}
]
我想要这样的输出:
[[
"https://www.foobar.com/",
"https://www.foobar.com/aaa",
"https://www.foobar.com/bbb"
]:2,
[
"https://www.foobar.com/",
"https://www.foobar.com/ccc",
"https://www.foobar.com/ddd"
]:1]
由于我使用的是 azure cosmos graph db,所以只有这些 gremlin 运算符可用
https://docs.microsoft.com/en-us/azure/cosmos-db/gremlin-support
谢谢
您可以使用如下语法将 groupCount
应用于 path
:
groupCount().by(path().by('referer'))
因此您可以将查询重写为:
g.V().hasLabel('event').
has('referer','https://www.foobar.com/').
in('previous').
in('previous').
groupCount().by(path().by('referer'))
希望这对您有所帮助,
干杯 开尔文