Neo4j Cypher 在大规模图上按权重过滤关系
Neo4j Cypher filtering relationships by weight on large scaled graph
我有一个关于如何根据 属性 关系高效过滤搜索结果的问题。
我有这样的图表:
(:PERSON)-[:WORKED_WITH {weight:30}]->(:PERSON)
有超过 300.000 个标记为 PERSON 的节点和超过 15.000.000 条标记为:WORKED_WITH 的边(每个都有一个整数权重)。
现在举例来说,我想要在它们之间具有最高权重的 10 个节点组合。所以我的查询看起来像这样:
MATCH (n:PERSON)-[r:WORKED_WITH]->(m:PERSON)
RETURN n.name, m.name, r.weight
ORDER BY r.weight DESC
LIMIT 10;
正如我最近读到的,不可能在关系的 属性 上创建索引。例如,我读到过您可以为 <50、50-100、>100 等分区创建节点,但这并不是最佳实践……是否有可能使用行为类似于(不等式)索引的东西?或者你认为如何有效地解决这类问题?
问候
沃尔夫冈
Stefan Armbruster 在 中很好地解释了这一点(以及您的选择)。
如果该关系是进入您的图表的唯一入口点(阅读:如果没有其他方法可以减少初始搜索)...那么您可能想要对其进行改造(作为节点)。这可能确实 "feel" 不正确,但这是最佳做法。
希望这对您有所帮助,
汤姆
我有一个关于如何根据 属性 关系高效过滤搜索结果的问题。
我有这样的图表:
(:PERSON)-[:WORKED_WITH {weight:30}]->(:PERSON)
有超过 300.000 个标记为 PERSON 的节点和超过 15.000.000 条标记为:WORKED_WITH 的边(每个都有一个整数权重)。
现在举例来说,我想要在它们之间具有最高权重的 10 个节点组合。所以我的查询看起来像这样:
MATCH (n:PERSON)-[r:WORKED_WITH]->(m:PERSON)
RETURN n.name, m.name, r.weight
ORDER BY r.weight DESC
LIMIT 10;
正如我最近读到的,不可能在关系的 属性 上创建索引。例如,我读到过您可以为 <50、50-100、>100 等分区创建节点,但这并不是最佳实践……是否有可能使用行为类似于(不等式)索引的东西?或者你认为如何有效地解决这类问题?
问候 沃尔夫冈
Stefan Armbruster 在
如果该关系是进入您的图表的唯一入口点(阅读:如果没有其他方法可以减少初始搜索)...那么您可能想要对其进行改造(作为节点)。这可能确实 "feel" 不正确,但这是最佳做法。
希望这对您有所帮助, 汤姆