1

ノードのセットと完全に一致するノードを取得するクエリを作成しようとしています。この場合、タグが付いたエクスペリエンスを提供します。たとえば、「食べ物」と「ナイトライフ」と「文化」のタグが付いたエクスペリエンスを紹介します。

私のクエリは「機能しています」が、ANDの代わりにORを使用して結果をもたらします。どうすれば修正できますか?

正しいアプローチを使用しているかどうかはわかりません

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

SpringData2.0.1とneo4j1.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 に答える