下一個Neo4j版本的功能請求:Neo4j已經支持以排序順序保存屬性的索引,從而實現快速查找。例如。一個人的名字,一個可能有一個看起來像指數:neo4j中高效的重複節點查找
愛麗絲 鮑勃 卡羅爾 戴夫 艾米莉 (....)
這樣一個可以查找「戴夫」與二進制搜索(O(log n))而不是線性掃描(O(n))。
但是,也可以使用索引來有效地查找重複項(某些屬性具有相同值的節點)。例如,如果想要列出每個「人」節點共享相同名字的一組列表,Neo4j 2.3似乎(通過Cypher中的EXPLAIN)執行的操作是將每個節點的名字與其他所有名字進行比較,是O(N^2)。例如。此查詢:
介紹匹配(一個:人)用一根火柴(B:人)WHERE a.name = b.name RETURN A,B LIMIT 5
示出了笛卡兒積步驟和隨後的過濾步驟。但隨着名字的指數,一個可以做線性掃描過類似的列表:
愛麗絲 愛麗絲 愛麗絲 鮑勃 卡羅爾 卡羅爾 戴夫 艾米莉 弗蘭克 弗蘭克 弗蘭克 (.... )
比較項目#1到#2,#2到#3等,以每次掃描O(n)時間構建所有重複項的有序列表。 Neo4j似乎不支持,但它會對我的應用程序非常有用,所以我想提出一個請求。