从图中查找路径,然后使用 Gremlin 计算一条路径在 Azure Cosmos DB 中出现的次数

Find paths from a graph and then count how many times a path occurs in Azure Cosmos DB using Gremlin

我使用以下结构将点击流事件存储在图形数据库中

用户执行多个事件,每个事件都比前一个事件有优势:

每个事件都有一个 属性 命名引荐来源网址。 例如,如果用户查看页面 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'))

希望这对您有所帮助,

干杯 开尔文