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

时间:2014-02-03 17:08:03

标签: java lucene indexing neo4j


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

节点:10
约会:1990/03/14 - 1994/04 / 23,1999 / 12/12 - 2005/04/06

节点:11
约会:1890/10/18 - 1950/05 / 15,1970 / 06/08 - 1988/05 / 11,1993 / 06/09 - 2010/07/04

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

我正在考虑的解决方案是将间隔“平坦”到索引中的单个间隔,然后扫描结果以消除误报结果,因此对于前面的示例,我将索引数据,如:

节点:10
约会 - 低:1990/03/14
约会高:2005/04/06

节点:11
约会 - 低:1890/10/18
约会高:2010/07/04

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

修改
让我添加更多细节来解释我的问题。首先,我通常不能使用基于图形结构(密码查询)的查询,因为我保存在节点上的数据与数据I索引不同(不要问我原因,需要解释很久),为一个节点做一个简单的例子,我可以得到数据:

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

在lucene指数中:

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

所以我可以将查询限制为lucene索引。仍然有一个答案(目前唯一的答案)让我想到在lucene索引中进行第一次查询,而不是使用cypher进行第二次查询来优化利用图结构的第一个查询的结果。如果这是一种有效的方法或者有更好的方法,请告诉我 谢谢。

1 个答案:

答案 0 :(得分:0)

通常,最好将这些日期属性分隔为单独的节点和关系。

因此,如果节点10,11代表一个Person,并且间隔代表就业期(在您的情况下不太可能,但作为示例),那么您将创建节点和关系:

(人) - [:employed_in] - GT;(作业)

其中1个人有多个工作,通过“employ_in”关系连接。对于日期,您还使用其他节点(而不是属性),如下所述:

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

这是更多的预先建模,但意味着您可以编写和测试数据的Cypher查询,而无需转到Java API,这样可以更轻松地查询数据以检查数据模型。