Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Indexing 索引neo4j边的最佳实践_Indexing_Neo4j - Fatal编程技术网

Indexing 索引neo4j边的最佳实践

Indexing 索引neo4j边的最佳实践,indexing,neo4j,Indexing,Neo4j,假设我有一个图形模型,其中用户可以喜欢项目,实际喜欢的时间记录在一条边上: (:USER {name:Bill})-[:ACTION {type:like, time:1234567890}]->(:ITEM {name:Porsche}) 现在,我想快速地选择特定:用户按“时间”排序的所有:操作。我不需要对所有:用户的:操作进行排序,只需要对特定的:用户进行排序。可以考虑的简单解决方案是索引,其中对于每个:用户,都有一个按“时间”字段的:操作索引。问题是neo4j似乎不允许这种高级索引

假设我有一个图形模型,其中用户可以喜欢项目,实际喜欢的时间记录在一条边上:

(:USER {name:Bill})-[:ACTION {type:like, time:1234567890}]->(:ITEM {name:Porsche})
现在,我想快速地选择特定:用户按“时间”排序的所有:操作。我不需要对所有:用户的:操作进行排序,只需要对特定的:用户进行排序。可以考虑的简单解决方案是索引,其中对于每个:用户,都有一个按“时间”字段的:操作索引。问题是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)
但我不喜欢这种方法,特别是因为它使用生成的标签和两个冗余元素

使用neo4j有更好的解决方案吗


ps:如果您熟悉DynamoDB,我想从neo4j中寻找的是“散列”和“范围”索引概念,其中“范围”索引是为每个特定的“散列”键创建的,而不是为表中的所有项创建的。

1我认为模型中的更改是正确的解决方案。但我稍微改变了你的说法:

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或者,使用Neo4j的。我认为模型中的更改是正确的解决方案。但我稍微改变了你的说法:

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或者,使用Neo4j。

选项1从@stdob-指向正确的方向。不过,我觉得有点不同:

在stdob之后,我们有一些带有time属性的操作节点将用户与项目连接起来。但是该操作没有标签,也没有索引。理由:索引始终处于每个标签级别。因此,查询所有操作以仅查找特定于给定用户的少数操作并不是非常有效的。 另外,两个后续操作节点使用PREV关系彼此连接 最近的操作使用最后的操作关系连接到用户。因此,您有一个按时间预先排序的所有动作节点的链接列表。入口点是最后一个动作关系,当添加新动作时,当然需要移动它
@stdob-选项1指向正确的方向。不过,我觉得有点不同:

在stdob之后,我们有一些带有time属性的操作节点将用户与项目连接起来。但是该操作没有标签,也没有索引。理由:索引始终处于每个标签级别。因此,查询所有操作以仅查找特定于给定用户的少数操作并不是非常有效的。 另外,两个后续操作节点使用PREV关系彼此连接 最近的操作使用最后的操作关系连接到用户。因此,您有一个按时间预先排序的所有动作节点的链接列表。入口点是最后一个动作关系,当添加新动作时,当然需要移动它
您好,stdob,谢谢您的回复。第一个解决方案看起来不错,但似乎会创建一个类似ACTION_的索引,用于所有用户,我希望每个用户都创建索引,以避免不同用户同时“喜欢”某个内容时索引更新限制。您好,stdob,谢谢回复。第一个解决方案看起来不错,但似乎会创建一个类似于ACTION_的索引,用于所有用户,我希望每个用户都创建索引,以避免不同用户同时“喜欢”某个内容时索引更新限制。链表-一个好主意!这是一个非常好的想法,这是图形Thx的力量。链表-一个伟大的想法!这是graph Thx的强大功能。