Cypher查询以获取具有给定属性值的节点

时间:2011-11-07 05:17:38

标签: spring neo4j spring-data spring-data-graph cypher

在Spring Data Graph上成为Cypher Queries的新手,这可能非常简单......

我正在寻找什么是Cypher查询来获取具有两个属性的给定值的所有节点。那么,以下内容的@Query注释中的???是什么:

@Query(???)
List<MyObject> findByProperty1AndProperty2(String property1, String property2)

修改 因此,我设法通过添加Cypher依赖项来使用派生查询(如下面Michael所建议的那样)。但我似乎得到了以下错误:

string matching regex (?i)\Qreturn\E' expected but ,' found

我认为这是因为它似乎正在创建一个类似的查询:

start n=node:__types__(className="com.example.MyObject") where n.property1 = {0}, n.property2 = {1} return n

而不是

start n=node:__types__(className="com.example.MyObject") where n.property1 = {0} and n.property2 = {1} return n

(请注意查询中的,而不是and

提前致谢。

1 个答案:

答案 0 :(得分:4)

请考虑到全局查询不是Neo4j的最佳选择,但是当你运行的是Spring Data Neo4j时,它会有所缓解。 :)

实际上,此查询不需要@Query注释。

它构造一个派生查询,无论如何查看你的属性,如果一个被索引,它将使用那一个作为你的查询的起点,否则它将从“__type__”索引中提取所有条目。

实际上它会创建一个类似的查询:

start n=node:__types__(className="com.example.MyObject")
where n.property1 = {0} and n.property2 = {1} 
return n

因此,如果您正在使用SDN的当前快照构建(本周将作为RC1发布)。 你可以这样做:

List<MyObject> findByProperty1AndProperty2(String property1, String property2)

确定cypher和gremlin是SDN中的可选依赖项(b / c有些人不希望默认情况下拉入scala / groovy)。您只需将cypher的maven依赖项添加到项目中

<dependency>
   <groupId>org.neo4j</groupId>
   <artifactId>neo4j-cypher</artifactId>
   <version>${neo4j.version}</version>
</dependency>