如何用模式查询neo4j标签?

时间:2014-06-14 21:34:37

标签: neo4j cypher

如何查询部分节点标签?

例如,如果我有像下面这样的节点whit标签 (n:用户:v#1.1.3) (n:用户:v#1.1.4) (n:用户:v#1.1.3.2) (n:usei:v#1.01.3.3)

我怎么能问v> 1.1.3将所有子部分视为数字?

返回应该是最新的3个节点

谢谢

2 个答案:

答案 0 :(得分:1)

我尝试了类似的查询:

CREATE (n:Foo_1_1),(m:Foo_1_2),(p:Foo_1_1_1),(q:Foo_1_2_1)
RETURN n, m, p, q;

您可以将节点与此匹配:

MATCH n
WITH n,[label IN labels(n)| label =~ 'Foo.*' AND TOINT(REPLACE(REPLACE(label,'Foo_',''), '_', '')) > 11] AS allResults
WHERE ANY (matches IN allResults WHERE matches = TRUE)
RETURN n

在这里,我尝试匹配版本严格大于Foo_1_1的所有标签(实际上对应于TOINT o REPLACE o REPLACE应用程序之后的11 ["> 11" part])。 然后,我根据这个小版本比较返回所有至少有1个标签匹配的节点。

但是,我建议这些标签成为常规索引属性。上一个查询只会成为Foo_*属性的全文搜索,并且肯定会比此查询执行得更好。

如迈克尔所建议的那样,版本图也可能是一个可行的选择。

答案 1 :(得分:1)

谢谢大家!

我最终选择将其作为版本图实现,因为它似乎是最简单且绝对完整的方式。