【问题标题】:neo4j 2.0 / cypher searching by dateneo4j 2.0 / cypher 按日期搜索
【发布时间】:2013-09-14 12:51:06
【问题描述】:

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

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

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

作为与我喜欢的内容类似的示例,假设我的图表中有电影《黑客帝国》。应包含电影 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)。

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

【问题讨论】:

  • 此演示文稿中有一个片段以另一种巧妙的方式模拟日期:infoq.com/presentations/shutl-neo4j 今天没有时间给出真正的答案,抱歉。 :)
  • 那个演示文稿非常有用。我还发现了为什么我的 CREATE UNIQUE 查询不起作用,我需要在 CREATE UNIQUE 之前添加 START CAL=node(idOfCalendarNode)。
  • OP 中的链接是 404。

标签: date neo4j cypher


【解决方案1】:

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

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

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;

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-12
      • 2012-02-26
      • 2020-09-05
      • 2016-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-09
      相关资源
      最近更新 更多