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" 不正确,但这是最佳做法。

希望这对您有所帮助, 汤姆