【发布时间】:2015-12-29 04:17:12
【问题描述】:
下一个 Neo4j 版本的功能请求:Neo4j 已经支持以排序顺序保持属性的索引,从而允许快速查找。例如。对于一个人的名字,一个人的索引可能如下所示:
爱丽丝 鲍勃 颂歌 戴夫 艾米丽 (....)
所以人们可以使用二分查找 (O(log n)) 而不是线性扫描 (O(n)) 查找“Dave”。
但是,也可以使用索引来有效地查找重复项(对于某些属性具有相同值的节点)。例如,如果想要一个共享相同名字的每组“人”节点的列表,Neo4j 2.3 似乎做的(通过 Cypher 中的 EXPLAIN)是将每个节点的名字与其他每个名字进行比较,这是 O(N^2)。例如。这个查询:
用 MATCH (b:person) 解释 MATCH (a:person) WHERE a.name = b.name RETURN a, b LIMIT 5
显示了一个 CartesianProduct 步骤,然后是一个 Filter 步骤。但是有了名字的索引,人们可以对一个列表进行线性扫描,例如:
爱丽丝 爱丽丝 爱丽丝 鲍勃 颂歌 颂歌 戴夫 艾米丽 坦率 坦率 坦率 (....)
比较项目#1 到#2、#2 到#3 等等,以在每次扫描的 O(n) 时间内构建所有重复项的有序列表。 Neo4j 似乎不支持这一点,但它对我的应用程序非常有用,所以我想提出一个请求。
【问题讨论】:
标签: neo4j