我正在尝试创建一个查询,它为我提供了一个与一组节点完全匹配的节点。在这种情况下,我想带来带有标签的经验,例如,经历有哪些标签:“食物”和“夜生活”和“文化”。
我的查询是“正常”,但是使用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。
答案 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