1

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

我的查询是“有效的”,但使用 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。

4

2 回答 2

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' "
于 2012-11-19T15:34:47.080 回答
1

我同意@ulkas

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

START tags = node({0}) 
MATCH experience-[:TAGGED]->tags
WITH experience, count(*) as cnt
WHERE cnt = length({0})
RETURN experience
于 2012-11-22T02:21:05.470 回答