0

我已经查看了关于使用带有日期的 neo4j 和这篇博文的之前的 SO 问题

http://blog.nigelsmall.com/2012/09/modelling-dates-in-neo4j.html

但是,我不确定如何使它起作用。基本上我需要两件事,将日期添加到节点,然后按日期查询节点。

作为与我喜欢的内容类似的示例,假设我的图表中有电影 The Matrix。应包括电影 The Matrix 的查询文本示例:

Movies released in Q1, 1999
Movies relased on March 31, 1999
Movies released in March 1999
Movies released before 2000
Movies released between 1998 and 20000

我现在开始尝试的是按照博客文章中的描述构建日期图。我尝试了以下查询,但我猜它的构造不正确

CREATE UNIQUE p = (CAL)-[:YEAR]->(1999 { number:1999 })-[:QUARTER]->(1 { number:1} )-[:MONTH]->(3 { number:3})-[:DAY]->(31 { number:31}) return p;

我想在我为特定日期创建节点之后,我会在 The Matrix 中添加 release_on->(that_date)。

所以现在我想知道这是否是我想做的那种查询的方法,以及如何让它真正起作用。

4

2 回答 2

0

如果这些是您计划执行的唯一查询,我会说属性和索引查询可能是一个更好的主意。

对于每部电影,您可以将日期属性添加为以下格式的字符串:YYYYMMDD 然后您可以从 date_index 查询特定日期,或者使用 where 条件,例如:> 19990101 和 <19990401 表示 1999 年第一季度。

这种方法当然有一些缺点,我想到的一个是你不能通过“季节性”来获得电影,例如所有这些年来的所有夏季电影!在这方面,in graph 数据索引是一个更好的主意。

于 2013-09-11T09:13:05.840 回答
0

我最终以与博客文章中描述的方式相似的方式将日期放入图表中。

要添加日期,我使用以下查询:

MERGE (n0:Calendar) CREATE UNIQUE (n0)-[r0:YEAR]->(n1 {number: 2003})-[:QUARTER]->(q { number: 1} )-[r1:MONTH]->(n2 {number: 3})-[r2:DAY]->(n3 {number: 31}) RETURN n3;

然后我使用与此类似的查询来获取节点及其日期:

MATCH (r)-[:has_date]->(day)<-[:DAY]-(month)<-[:MONTH]-(quarter)<-[:QUARTER]-(year) return day,month,quarter,year;
于 2013-09-19T14:03:55.350 回答