2

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

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

CREATE INDEX ON :<label>(sourceIds)

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

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

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

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

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

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

谢谢和最好的问候!

编辑:关于为什么我达到布尔子句最大限制的详细说明:我需要将数据库的特定部分导出为自定义文件格式以用于文本处理管道。这些管道使用我无法(出于可访问性或时间考虑)更改直接查询 Neo4j 的组件,因此我宁愿保留定义的所需文件格式。我通过“给我数据库中的所有 ID;现在,对于一批 ID,从 Neo4j 查询所需信息(例如特定路径)并将结果存储到文件”的模式进行导出。为什么我要使用批次?好吧,如果我不这样做,那么连接开销会大大降低速度。因此,大批量在这里是一种优化。

4

1 回答 1

1

模式索引现在只能进行完全匹配。您"testid" in n.sourceIds不使用索引(如您的查询时间所示)。我认为有计划让它表现得更好,但我和你一样急切地等待着他们。

实际上,我在 lucene 查询中达到了较低的最大值:512。如果有办法增加它,我很想听听。如果我有一种罕见的实际超过 512 个 id 的情况,我解决它的方法就是做不止一个查询。您在哪里需要更多查询?

于 2013-08-13T14:07:05.320 回答