检索某个日期范围内发生的操作

Retrieve actions that happened in a date range

我已经搜索了这个问题的答案,但没有找到确切的解决方案。

我有一个简单的应用程序,我可以在其中跟踪一个人最喜欢的项目。我这样建立关系:

         [:favorite]
(user) ---------------------> (item)
         timestamp:xxxxxx

用户节点获得了对项目的喜爱关系,我将时间戳存储为关系属性。

同一个项目可以有多个用户收藏,也可以一个用户收藏多个项目。现在,我的用例是查找在特定日期范围内收藏的项目,例如:

(1) 过去 1 小时收藏的项目

(2) 2015 年 1 月 1 日至 2015 年 1 月 15 日收藏的项目

(3) Hour-wise 2015 年 1 月 15 日收藏的项目拆分

我正在尝试找到 return 这些结果的最优化方法。我正在为 PHP.

使用 Everyman Neo4j

我的问题是如何索引时间戳 属性(我相信这会大大提高性能)?

此外,对于上面列出的三种情况,构建查询的最佳方式是什么?

通常您会将时间建模为图中的一种树或链表结构。

但是对于您的用例, 您可以使用关系自动索引来索引时间戳 属性 然后查询它:请参阅:http://neo4j.com/docs/stable/rest-api-configurable-auto-indexes.html

我认为选择一种易于搜索和排序的格式是有意义的,例如 yyyy-mm-dd-hh

将您的 conf/neo4j.properties 更改为:

relationship_auto_indexing=true
relationship_keys_indexable=timestamp

但您必须重新索引现有数据,

开始 rel=relationship()

可以查询:

start rel = relationship:relationship_auto_index("timestamp:2015-01-*")
match (user)-[rel]->(item)
....

start rel = relationship:relationship_auto_index("timestamp:2015-01-*")
return startNode(rel) as user, endNode(rel) as item

数值范围是不可能的,但字符串范围是不可能的。

start rel = relationship:relationship_auto_index("timestamp:[2015-01-01-00 TO 2015-02-01-00]")
return startNode(rel) as user, endNode(rel) as item