Neo4j /检索从特定startDate创建的节点的好方法

时间:2014-07-17 10:02:54

标签: graph neo4j cypher graph-databases

让我们假设这个Cypher查询(Neo4j):

MATCH(m:Meeting)
WHERE m.startDate > 1405591031731
RETURN m.name

如果图中有数百万Meeting个节点,我应该选择哪种策略来快速进行此类查询?

  • 为会议的startDate财产编制索引?
  • 使用LuceneTimeline
  • 为其编制索引
  • 避免索引并优先选择structure
    但是,这种结构似乎与一系列日期( FROM => TO )的查询相关,而不仅仅是 From

我在查询范围时没有使用案例: FROM 此startDate TO 此endDate。

顺便说一下,似乎简单的索引只在处理相等时才起作用...(不像>那样比较。)

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

看一下这个答案:How to filter edges by time stamp in neo4j?

使用关系运算符选择节点时,最好选择用于将meeting节点分组为离散时间间隔的中间节点。将会议添加到数据库时,您将确定每个时间戳发生在哪个时间间隔内,并获取或创建表示该时间间隔的中间节点。

您可以在数百万个会议节点上从Neo4j shell运行以下查询,这会将会议组合在一起,间隔为10秒。假设你的时间戳是毫秒。

MATCH (meeting:Meeting)
MERGE (interval:Interval { timestamp: toInt(meeting.timestamp / 10000) }
MERGE (meeting)-[:ON]->(interval);

然后,您可以执行以下查询:

MATCH (interval:Interval) WHERE interval.timestamp > 1405591031731
WITH interval
MATCH (interval)<-[:ON]-(meeting:Meeting)
RETURN meeting