Neo4j 2.0:使用模式索引索引数组值属性

时间:2013-08-13 13:26:56

标签: neo4j cypher

我在一个名为“sourceIds”的数组值属性中有多个“sourceIds”的节点,只是因为可能有多个资源可以从中派生出一个节点(我正在将多个数据库组装成一个Neo4j模型)。 我希望能够通过任何源ID查找节点。使用遗留索引这没问题,我只想在与sourceIds属性数组的每个元素关联的索引中添加一个节点。

现在我想切换到带标签的索引,我想知道这种索引是如何工作的。我能做到

CREATE INDEX ON :<label>(sourceIds)

但这实际上是做什么的?我希望它只是为每个数组元素创建索引条目,但似乎并非如此。与

MATCH n:<label> WHERE "testid" in n.sourceIds RETURN n

查询需要300毫秒到500毫秒,这对于索引查找来说太长了(其他模式索引的工作速度要快3到5倍)。与

MATCH n:<label> WHERE n.sourceIds="testid" RETURN n

我没有得到结果。这很清楚,因为它是一个数组属性,但我只是试一试,因为如果为了索引目的将数组属性分解为它们的元素是有意义的。

那么,有没有办法用模式索引来处理数组属性,或者有计划还是我必须坚持遗留索引?遗留Lucene索引的问题在于我达到了布尔子句的最大数量(1024)。因此,另一个问题是:我可以提出这个数字吗? Lucene允许这样做,但是我能用Neo4j使用的Lucene索引做到这一点吗?

谢谢和最诚挚的问候!

编辑:更详细说明为什么我点击布尔条款max limit:我需要将数据库的特定部分导出为文本处理管道的自定义文件格式。这些管道使用我不能(无论是为了可访问性或时间)更改来直接查询Neo4j的组件,所以我宁愿保持定义的所需文件格式。我通过模式导出“在DB中给我所有ID;现在,对于批量ID,从Neo4j查询所需信息(例如特定路径)并将结果存储到文件”。为什么我要使用批次?好吧,如果我不这样做,通过连接开销会显着减慢速度。因此,大批量是这里的一种优化。

1 个答案:

答案 0 :(得分:1)

架构索引现在只能进行完全匹配。您的"testid" in n.sourceIds不使用索引(如查询时间所示)。我认为有计划让这种行为变得更好,但我正在等待他们,就像你一样热切。

我实际上在lucene查询中达到了较低的最大值:512。如果有办法增加它,我很乐意听到它。我绕过它的方式只是做一个以上的查询,如果我有一个罕见的情况实际超过512 ids。在您需要更多的地方,您在做什么查询?