【问题标题】:Neo4j 2.0 wildcard search on label namesNeo4j 2.0 通配符搜索标签名称
【发布时间】:2014-01-05 22:45:25
【问题描述】:

在 Cypher 中处理属性时,您可以使用正则表达式来匹配属性值,如下所示:

Match (n)-[:IS_A]-() where (n:Course_Driving_001) and (n.name =~ '(?i).*criteria.*' or n.description =~ '(?i).*criteria.*')   return distinct n limit 20;

我想对标签名称做同样的事情。我想获取包含某个字符串的所有唯一标签。比如:

 Match (n)-[:IS_A]-() where (n:Course_*_001) return distinct n;

Cypher 能做到吗?还是 RestAPI?正则表达式?

我正在使用 Neo4j 2.0 版本。

【问题讨论】:

    标签: regex wildcard cypher neo4j


    【解决方案1】:

    您不能直接在标签上使用正则表达式。但是使用labels 函数是可能的:

    MATCH (n)-[:IS_A]->() 
    WHERE any(l IN labels(n) WHERE l=~'Course_*_001')
    RETURN distinct n;
    

    请注意,此查询可能会很昂贵,因为它涉及您数据库中的所有节点。您可能希望重构数据模型以使用多个标签,例如Course Course_xyz_001。在这种情况下,您可以使用MATCH (n:Course) ....,它首先会减少要访问的节点数量。

    【讨论】:

    • +1 在多个标签上,或者在:Course(type) 上使用索引并将“Driving_001”放入您的type 属性中。不过这可能会慢一些。
    • 即使有多个标签,我认为这最终会太慢。我想我会尝试在制作新标签时将标签名称存储在他们自己的图表中。这样我就能很快找到它们。不过,我也许可以将您的示例用于其他情况。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 2014-06-11
    相关资源
    最近更新 更多