Neo4j Cypher查询查找具有完全匹配的节点(AND而不是OR)

时间:2012-11-19 14:42:17

标签: nosql neo4j cypher

我正在尝试创建一个查询,它为我提供了一个与一组节点完全匹配的节点。在这种情况下,我想带来带有标签的经验,例如,经历有哪些标签:“食物”和“夜生活”和“文化”。

我的查询是“正常”,但是使用OR而不是AND来生成结果。我该如何解决?

我不确定我是否正在使用

的正确方法
@Query("START experience = node:__types__(className=\"...\"), tags = node({0}) " +
  "WHERE experience-[:TAGGED]->tags " +
  "RETURN experience")
public Set<Experience> findExperiencesByTags(Set<Long> tagIds);

我正在使用Spring Data 2.0.1和neo4j 1.6.3。

2 个答案:

答案 0 :(得分:1)

尝试将其划分为3个单独的MATCH短语:

"MATCH experience-[:TAGGED]->tags1, experience-[:TAGGED]->tags2,  experience-[:TAGGED]->tags3, " +
"WHERE tags1.tag='food' AND tags2.tag='culture' AND tags3.tag='nightlife' "

答案 1 :(得分:1)

我同意@ulkas

如果你真的想要传递任意数量的标签,你可以试试这个,但它的表现可能不如显式匹配。

START tags = node({0}) 
MATCH experience-[:TAGGED]->tags
WITH experience, count(*) as cnt
WHERE cnt = length({0})
RETURN experience