在neo4j中,如何按日期索引并在日期范围内搜索?

Phi*_*hil 15 java indexing search neo4j

在neo4j中,如何按日期索引并在日期范围内搜索.有时候,我想在日期范围内的早上8点到9点之间进行搜索.

Jos*_*ell 23

将日期和时间索引为整数时间戳.然后,您可以轻松地在索引中搜索其他时间戳之间的日期.您还可以将时间戳的时间部分分别索引为另一个整数,以便查询给定日期之间的特定时间.

示例:存储的日期和时间为"2012-02-05 8:15 AM"因此,在索引中,存储"timestamp = 1328447700"和"time = 815"

现在,您要查询2012-02-01和2012-02-10之间从上午8:00到上午9:00发生的所有事件的索引.你可以通过查询索引"timestamp> = 1328072400和timestamp <= 1328936399,时间> = 800,时间<= 900"来做到这一点

执行此操作的确切语法取决于您如何连接到Neo4j(REST或嵌入式)以及您正在使用的编程语言.但无论如何,这个想法都是一样的.

  • 你能解释为什么混合纪元日期和'ISO8601`时间是个好主意吗?如果我要实现它,我会选择"20131124"和"1130"或"1385251200"和"41400"(午夜后的秒数:`(11*60 + 30)*60`),这样你就可以串联的部件和解析`yyyyMMddHHmmss`格式OR做`Calendar.setTimeInMillis`与一起加入时,它需要以显示两个值. (8认同)

Mat*_*nné 9

有一个方便的org.neo4j.index.lucene.LuceneTimeline可以做到这一点(在neo4j中使用集成的lucene索引).


Jes*_*ose 5

这是 Josh Adell 答案的扩展。为了可读性,我建议有两个datetime整数字段,如

date:19970716 (YYYYMMDD)
time:203045000 (HHmmssuuu): last three digits for microseconds. 
Run Code Online (Sandbox Code Playgroud)

int数据类型可以存储高达2147483647。如果您喜欢冒险,long数据类型最多可以存储9223372036854775807. http://docs.neo4j.org/chunked/stable/graphdb-neo4j-properties.html


灵感来自ISO 8601 时间戳,1997-07-16T19:20:30.45Z.

免责声明:我对 Neo4J 的经验很少。

  • 那是毫秒而不是微。 (4认同)