考虑一下我有一个图表模型,用户可以在这里看到项目,并且实际喜欢的时间记录在边缘:
(:USER {name:Bill})-[:ACTION {type:like, time:1234567890}]->(:ITEM {name:Porsche})
现在我要选择所有:特定的动作:按时间排序的用户'非常快。我不需要:所有操作:USERs排序,仅针对特定的:USER。可以想到的简单解决方案是索引,其中每个:USER,有一个索引:ACTION by' time'领域。问题在于neo4j似乎不允许进行这种高级索引操作。
我可以想到neo4j支持的解决方法
Model - (:USER {id:54321,name:Bill})-[:DOES]->(:ACTION:USER_54321_ACTION {type:like, time:1234567890})-[:REFERS_TO]->(:ITEM {name:Porsche})
Index - CREATE INDEX ON :USER_54321_ACTION(time)
但我不喜欢这种方法,特别是因为它使用生成的标签和2个冗余元素。
使用neo4j是否有更好的解决方案?
ps:如果你熟悉DynamoDB,那么我从neo4j那里寻求的就是' hash'和'范围'索引概念,其中'范围'为每个特定的哈希'创建索引。键,而不是表格中的所有项目。
答案 0 :(得分:2)
选项1)来自@ stdob--指向正确的方向。不过我的情况有点不同:
PREV
关系LAST_ACTION
关系连接到用户。因此,您有一个按时间预先排序的所有操作节点的链接列表。入口点是LAST_ACTION
关系(当添加新操作时,当然需要移动它)答案 1 :(得分:0)
Model - (:USER {id:54321,name:Bill})
-[:DOES]->
(:ACTION:ACTION_LIKE {time:1234567890})
-[:REFERS_TO]->
(:ITEM {name:Porsche})
Index - CREATE INDEX ON :ACTION(time)
CREATE INDEX ON :ACTION_LIKE(time)
2)如果没有,请查看遗留索引的方向。
3)或者,使用APOC
代替Neo4j。