- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在从事一个项目,其中每个用户都表示为 Neo4j 中的一个节点。用户可以“认可”其他用户,从而建立关系。我希望能够根据用户的信任度对用户进行排名,其中每个关系的权重都基于支持他们的用户的权重。例如,一个得到 20 多个用户认可的用户应该比另一个只有几个认可的用户对自己的认可有更多的权重。
我现在查询它的方式给了我每个深度的节点数,但它没有按父节点分组(例如,所有 3 级节点都在一个数组中返回,你不知道级别 2 中的哪些节点每个都相关)。
MATCH (n)-[r:TRUSTS*]->(u)
WHERE u.name = 'XYZ' WITH n.name AS n, LENGTH(r) AS depth
RETURN COLLECT(DISTINCT n) AS endorsers, depth
ORDER BY depth
这是网络的样子,以及对 Ben 的查询结果。
如您所见,Ben
有 2 个一级背书人,JM
有两个二级背书人,从图中可以看出,但不是来自查询结果。
任何人都可以建议如何返回按父节点和深度分组的结果,以便我可以在我的代码中计算信任排名,或者更好的方法来执行加权平均以实现第一段中的目标?
这是我为 Ben 想象的那种树结构输出的示例:
Ben
├── JM
│ ├── Simon
│ └── Rus
│ ├── Robbie
│ │ ├── Ben
│ │ │ └──/ should terminate here
│ │ ├── Simon
│ │ └── JM
│ └── Ben
│ └──/ should terminate here
└── Simon
这是 Rus 的另一个:
Rus
├── Robbie
│ ├── Simon
│ ├── Ben
│ │ ├── Simon
│ │ └── JM
│ │ ├── Simon
│ │ └── Rus
│ └── JM
│ ├── Simon
│ └── Rus
└── Ben
├── Simon
└── JM
├── Simon
└── Rus
显然它应该在到达我查询的用户时终止(否则它将是一个循环结构)。
我找到的最接近的匹配是 Tezra 提供的查询,它是:
MATCH (target:User{name:"Rus"}), (person:User), p=((person)-[:TRUSTS*]->(target))
WHERE ALL(n in NODES(p)[1..-1] WHERE n<>target)
RETURN NODES(p)[-2].name as endorser, COLLECT(person.name) as endorsed_by, SIZE(RELATIONSHIPS(p)) as depth
ORDER BY depth
此查询返回“Rus”的一级背书,然后返回 n 级背书一级背书:
| endorser | endorsed_by | depth |
|----------|-----------------------|-------|
| Robbie | Robbie | 1 | // 1st level endorsers of Rus
| Ben | Ben | 1 | // 1st level endorsers of Rus
| Robbie | JM, Simon, Ben | 2 | // 1st level endorsers of Robbie
| Ben | JM, Simon | 2 | // 1st level endorsers of Ben
| Ben | Rus, Simon | 3 | // 2nd level endorsers of Ben
| Robbie | Rus, Simon, JM, Simon | 3 | // 2nd level endorsers of Robbie
| Robbie | Rus, Simon | 4 | // 3rd level endorsers of Robbie
这不太正确,您只知道谁间接背书了 Ben 和 Robbie,而不知道中间的节点。
例如,从该输出我们知道 Robbie
的一级背书人是 JM
、Simon
和 Ben
。第 2 级背书人是 Rus
、Simon
、JM
和 Simon
(树中的第 4 列),但是有无法知道一级和二级背书人之间的关系。就此查询而言,以下树是相同的:
Rus
└── Robbie
├── Simon
├── Ben <--- here Ben has 3 children (so should be weighted higher)
│ ├── Simon
│ ├── Rus
│ └── JM
└── JM
└── Simon
Rus
└── Robbie
├── Simon
├── Ben
│ └── Simon
└── JM <--- here JM has 3 children instead
├── Simon
├── Rus
└── JM
我正在寻找的是一个查询,它返回类似这样的东西(每个背书的父级可以重建完整的树),这是 Rus 的想象输出:
+--------+----------+-------+
| parent | children | depth |
+--------+----------+-------+
| Rus | Robbie | 1 |
+--------+----------+-------+
| Rus | Ben | 1 |
+--------+----------+-------+
| Robbie | Simon | 2 |
+--------+----------+-------+
| Robbie | Ben | 2 |
+--------+----------+-------+
| Robbie | JM | 2 |
+--------+----------+-------+
| Ben | Simon | 3 |
+--------+----------+-------+
| Ben | JM | 3 |
+--------+----------+-------+
| JM | Simon | 4 |
+--------+----------+-------+
| JM | Rus | 4 |
+--------+----------+-------+
| JM | Simon | 3 |
+--------+----------+-------+
| JM | Rus | 3 |
+--------+----------+-------+
| Ben | Simon | 2 |
+--------+----------+-------+
| Ben | JM | 2 |
+--------+----------+-------+
| JM | Simon | 3 |
+--------+----------+-------+
| JM | Rus | 3 |
+--------+----------+-------+
最佳答案
首先,这是一个console播放/测试数据。
这里有一些评论查询。让我知道哪个最能满足您的需求。 (按相关性排序)
// Match the query target, and everyone who can endorse
MATCH (target:User{name:"Ben"}), (person:User),
// Match all endorse chains, length limit 5
p=((person)-[:TRUSTS*..5]->(target))
// Our target may start, and will end; our chain, so no other path nodes can be him.
// Normal matching will not match cycles.
// Adjust further path termination conditions here.
WHERE ALL(n in NODES(p)[1..-1] WHERE n<>target)
// Return target (extra), the 1'st tier endorser, their endorsers, and rank(depth) of each of those endorsers.
RETURN target.name, NODES(p)[-2] as endorser, COLLECT(person.name), SIZE(RELATIONSHIPS(p)) as depth
ORDER BY depth
// one line copy for copy-paste into console
MATCH (target:User{name:"Ben"}), (person:User), p=((person)-[:TRUSTS*..5]->(target)) WHERE ALL(n in NODES(p)[1..-1] WHERE n<>target) RETURN target.name, NODES(p)[-2] as endorser, COLLECT(person.name), SIZE(RELATIONSHIPS(p)) as depth ORDER BY depth
另一种返回格式
WITH NODES(p)[-2] as endorser, {people:COLLECT(person.name), depth:SIZE(RELATIONSHIPS(p))} as auth
RETURN endorser, COLLECT(auth)
// one line copy for copy-paste into console
MATCH (target:User{name:"Ben"}), (person:User), p=((person)-[:TRUSTS*..5]->(target)) WHERE ALL(n in NODES(p)[1..-1] WHERE n<>target) WITH NODES(p)[-2] as endorser, {people:COLLECT(person.name), depth:SIZE(RELATIONSHIPS(p))} as auth RETURN endorser, COLLECT(auth)
更新:替代返回格式以匹配 OP 的返回表
MATCH (target:User{name:"Rus"}), (person:User), p=((person)-[:TRUSTS*]->(target)) WHERE ALL(n in NODES(p)[1..-1] WHERE n<>target) WITH NODES(p) as n, SIZE(RELATIONSHIPS(p)) as depth RETURN DISTINCT n[-depth] as parent, n[-depth-1] as child, depth ORDER BY depth
关于neo4j - 获取每个关系深度的节点数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46589975/
我正在使用python 2.7 当我尝试在其上运行epsilon操作时出现此错误, 这是我的代码 import cv2 import numpy as np img = cv2.imread('img
1 很多程序员对互联网行业中广泛讨论的“35岁危机”表示不满,似乎所有的程序员都有着35岁的职业保质期。然而,随着AI技术的兴起,这场翻天覆地的技术革命正以更加残酷且直接的方式渗透到各行各业。程序员
我有一个包含多个子模块的项目,我想列出每个子模块的相对深度 该项目: main_project submodule1 submodule1\submodule1_1 submo
我有一张彩色图像及其深度图,它们都是由 Kinect 捕获的。我想将它投影到另一个位置(以查看它在另一个视角下的样子)。由于我没有 Kinect 的内在参数(相机参数);我该如何实现? P.S:我正在
给出了这三个网址: 1) https://example.com 2) https://example.com/app 3) https://example.com/app?param=hello 假
这个着色器(最后的代码)使用 raymarching 来渲染程序几何: 但是,在图像(上图)中,背景中的立方体应该部分遮挡粉红色实体;不是因为这个: struct fragmentOutput {
我希望能够在 ThreeJS 中创建一个房间。这是我到目前为止所拥有的: http://jsfiddle.net/7oyq4yqz/ var camera, scene, renderer, geom
我正在尝试通过编写小程序来学习 Haskell...所以我目前正在为简单表达式编写一个词法分析器/解析器。 (是的,我可以使用 Alex/Happy...但我想先学习核心语言)。 我的解析器本质上是一
我想使用像 [parse_ini_file][1] 这样的东西。 例如,我有一个 boot.ini 文件,我将加载该文件以进行进一步的处理: ;database connection sett
我正在使用 Mockito 来测试我的类(class)。我正在尝试使用深度 stub ,因为我没有办法在 Mockito 中的另一个模拟对象中注入(inject) Mock。 class MyServ
我试图在调整设备屏幕大小时重新排列布局,所以我这样做: if(screenOrientation == SCREEN_ORIENTATION_LANDSCAPE) { document
我正在 Ubuntu 上编写一个简单的 OpenGL 程序,它使用顶点数组绘制两个正方形(一个在另一个前面)。由于某种原因,GL_DEPTH_TEST 似乎不起作用。后面的物体出现在前面的物体前面
static FAST_FUNC int fileAction(const char *pathname, struct stat *sb UNUSED_PARAM, void *mo
我有这样的层次结构: namespace MyService{ class IBase { public: virtual ~IBase(){} protected: IPointer
我正在制作一个图片库,需要一些循环类别方面的帮助。下一个深度是图库配置文件中的已知设置,因此这不是关于无限深度循环的问题,而是循环已知深度并输出所有结果的最有效方法。 本质上,我想创建一个 包含系统中
如何以编程方式在树状结构上获取 n 深度迭代器?在根目录中我有 List 每个节点有 Map> n+1 深度。 我已修复 1 个深度: // DEPTH 1 nodeData.forEach(base
我正在构建一个包含大量自定义元素的 Polymer 单页界面。 现在我希望我的元素具有某种主样式,我可以在 index.html 或我的主要内容元素中定义它。可以这样想: index.html
我正在尝试每 25 秒连接到配对的蓝牙设备,通过 AlarmManager 安排,它会触发 WakefulBroadcastReceiver 以启动服务以进行连接。设备进入休眠状态后,前几个小时一切正
假设有一个有默认值的函数: int foo(int x=42); 如果这被其他人这样调用: int bar(int x=42) { return foo(x); } int moo(int x=42)
是否可以使用 Javascript 获取 url 深度(级别)? 如果我有这个网址:www.website.com/site/product/category/item -> depth=4www.w
我是一名优秀的程序员,十分优秀!