有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在neo4j中索引多个日期间隔?


这是我的问题:我需要将一个属性由任意数量的日期间隔组成的节点索引到neo4j中,例如:

节点:10
日期:1990/03/14-1994/04/231999/12/12-2005/04/06

节点:11
日期:1890/10/18-1950/05/1511970/06/08-1988/05/1111993/06/09-2010/07/04

我需要能够使用单个日期进行查询,并找到查询日期在其中一个时间间隔内的所有节点,因此对于前面的示例,如果我查询1995/08/13,我只希望在结果中获得节点11,而不是10

我考虑的解决方案是将间隔“平齐”到索引中的单个间隔,然后扫描结果以删除假阳性结果,因此对于前面的示例,我将对数据进行如下索引:

节点:10
约会时间:1990年3月14日
约会高潮:2005/04/06

节点:11
约会时间:1890/10/18
约会高潮:2010/07/04

查询1995/08/13将返回两个节点,但随后我将通过查询节点中存储的实际日期间隔来放弃节点10。这是一个解决方案,但它可能会减慢我的查询速度,所以我想问:有没有更有效的解决方案?仅使用neo4j公开的索引API是否可以实现上述解决方案
谢谢

编辑
让我补充更多细节来解释我的问题。首先,我通常不能使用基于图形结构的查询(密码查询),因为我保存在节点上的数据与我索引的数据不同(不要问我为什么,解释起来很长),为一个节点举一个简单的例子,我可以得到数据:

节点:10
100_1_fv:NodeName
101_0_fv:1990/03/14-1994/04/23

在lucene指数中:

节点:10
名称:NodeName
约会低点:19900314
约会高潮:19940423

如果可以的话,我会把查询限制在lucene索引上。仍然有一个答案(目前唯一的答案)让我想到在lucene索引中进行第一次查询,然后使用cypher进行第二次查询,以利用图形结构优化第一次查询的结果。请告诉我这是一个有效的方法还是有更好的方法
谢谢


共 (1) 个答案

  1. # 1 楼答案

    一般来说,将这些日期属性分离为单独的节点和关系是一种良好的做法

    因此,如果节点10、11代表一个人,间隔代表雇佣期(在您的情况下不太可能,但作为一个例子),那么您将创建节点和关系:

    (人)-[:受雇于]>;(工作)

    其中一人有多份工作,由“雇佣关系”连接。对于日期,还可以使用其他节点(而不是属性),如下所述:

    http://blog.neo4j.org/2012/02/modeling-multilevel-index-in-neoj4.html

    这更像是预先建模,但这意味着您可以在数据上编写和测试Cypher查询,而不必访问javaapi,这使得查询数据以检查数据模型变得更容易