使用给定的uuid查询数据库中的未知元素

时间:2017-06-25 17:26:19

标签: neo4j cypher

很多年前,我与一些neo4j工程师讨论了查询未知对象的能力,并给出了这个问题。

当时,答案是neo4j中没有通用的db索引。

现在,我有同样的问题需要解决:

我创建的每个节点都有一个唯一的ID(uuid格式为 < nx:u-< uuid> - ?v = n> ,其中ns是namespace,uuid是唯一的uuid,v = n是元素的版本号。

我希望能够运行以下密码查询:

match (n) where n.about = 'ki:u-SSD-v5.0?v=2' return n;

实际上什么也没有返回。

以下查询

match (n:'mm:ontology') where n.about = 'ki:u-SSD-v5.0?v=2' return n;

返回我需要的内容,尽管在查询时我不知道元素类型。

有人可以为此提供帮助吗?

1 个答案:

答案 0 :(得分:1)

您是否考虑过为about属性的数据库中的每个节点添加一个achema索引?

例如

全局标签添加到图中所有尚未拥有它的节点(例如节点)。如果图形过大和/或堆过小,则需要批量执行此操作。以下内容......

MATCH (n)
WHERE NOT n:Node
WITH n
LIMIT 100000
SET n:Node

添加标签后,在新{em>全球标签(例如节点)的about属性上创建索引。这些步骤也可以互换地进行。

CREATE CONSTRAINT ON (node:Node) assert node.about IS UNIQUE

然后查询类似下面的内容

MATCH (n:Node) 
WHERE n.about = 'ki:u-SSD-v5.0?v=2' 
RETURN n;

将以高效的方式返回您正在寻找的节点。