Neo4j 基于属性上的regexp查找节点的密码查询
我有一个Neo4J数据库,该数据库将公司映射为节点,并将其关联为边。公司有一个代码属性。我想查询数据库并获取与regexpNeo4j 基于属性上的regexp查找节点的密码查询,neo4j,cypher,Neo4j,Cypher,我有一个Neo4J数据库,该数据库将公司映射为节点,并将其关联为边。公司有一个代码属性。我想查询数据库并获取与regexpCOMPANY.code=~'12345678.*'匹配的第一个节点,即前8个代码字母等于给定字符串文字的公司 经过几次尝试,我能想到的最好的查询是: START p=node(*) where p.CODE =~ '12345678.*' RETURN p; 结果是出现以下异常: org.neo4j.cypher.EntityNotFoundException: The
COMPANY.code=~'12345678.*'
匹配的第一个节点,即前8个代码字母等于给定字符串文字的公司
经过几次尝试,我能想到的最好的查询是:
START p=node(*) where p.CODE =~ '12345678.*' RETURN p;
结果是出现以下异常:
org.neo4j.cypher.EntityNotFoundException:
The property 'CODE' does not exist on Node[0]
看起来节点[0]是数据库中的一种特殊节点,它显然没有my CODE属性。因此,我的查询失败,因为我没有选择要查询的节点的适当类型。但是我不知道如何指定要查询的节点类型
返回我想要的内容的查询是什么?
我想我需要一个代码索引来运行这个查询,但是我想知道是否有一个查询可以在不使用这样的索引的情况下完成这项工作
注意:我使用的是Neo4J 1.9.2版。是否应该升级到2.0?您可以通过检查属性的存在来避免异常
START p=node(*)
WHERE HAS(p.CODE) AND p.CODE =~ '12345678.*'
RETURN p;
查询不需要索引,但索引可以提高性能。如果你不想要索引,还有其他几种选择。如果继续使用Neo4j 1.9.x,可以将代表公司的所有节点分组到一个或多个排序节点下。当您查询公司节点时,您可以从其排序节点检索它们,并根据它们的属性进行筛选。您可以将公司分组,在一个排序节点下为.code
设置一定范围的值,在另一个排序节点下设置不同范围的值,从而对图形进行分区;如果图形增长,您可以根据需要扩展此分区
如果您升级到2.0(注意:尚未发布,因此不适合生产),您可以从标签中获益。然后,可以将公司标签指定给所有这些节点,该标签可以维护其自身的索引和唯一性约束
称为“参考节点”的零节点将不会保留在Neo4j的未来版本中。您可以通过检查属性的存在来避免异常
START p=node(*)
WHERE HAS(p.CODE) AND p.CODE =~ '12345678.*'
RETURN p;
查询不需要索引,但索引可以提高性能。如果你不想要索引,还有其他几种选择。如果继续使用Neo4j 1.9.x,可以将代表公司的所有节点分组到一个或多个排序节点下。当您查询公司节点时,您可以从其排序节点检索它们,并根据它们的属性进行筛选。您可以将公司分组,在一个排序节点下为.code
设置一定范围的值,在另一个排序节点下设置不同范围的值,从而对图形进行分区;如果图形增长,您可以根据需要扩展此分区
如果您升级到2.0(注意:尚未发布,因此不适合生产),您可以从标签中获益。然后,可以将公司标签指定给所有这些节点,该标签可以维护其自身的索引和唯一性约束
称为“参考节点”的零节点将不会保留在Neo4j的未来版本中。如果COMPANY.CODE上存在索引,Neo4j会自动为此查询使用索引吗?如果没有,我应该如何更改查询以使用这样的索引?在1.9.x中,您使用
START
子句中的索引。查看文档了解详细信息,但通常类似于START p=node:myIndex(key=value)
。在2.0.x中,您可以删除START
子句,只需在模式中包含标签,例如MATCH(p:Company),其中p.code…
,再次查看文档以了解详细信息。如果Company.code上存在索引,neo4j会自动为此查询使用索引吗?如果没有,我应该如何更改查询以使用这样的索引?在1.9.x中,您使用START
子句中的索引。查看文档了解详细信息,但通常类似于START p=node:myIndex(key=value)
。在2.0.x中,您可以删除START
子句,只需在模式中包含标签,例如MATCH(p:Company),其中p.code…
,再次查看文档以了解详细信息。