簡體   English   中英

無法過濾密碼查詢Neo4j上的節點

[英]Can't filter nodes on cypher query Neo4j

我有一些數據,如下所示:

(:Artist {id: 1, name: "Depeche Mode"})<-[:PLAYED_BY]-(:Song {id: 1, title: "Enjoy The Silence"})-[:PLAYED_BY]->(:Artist {id: 2, name: "Lacuna Coil"})

例如,我將需要查詢id 1和2的所有PLAYED_BY Artist Song

我在想類似的東西:

MATCH (s:Song)-[:PLAYED_BY]->(a:Artist)
WHERE a.id IN [1, 2]
RETURN s

但這不是我想要的那樣工作:因為它就像一個OR ,我想像AND使用它。

有什么建議么?

編輯1: Artist的數量應該是任意的。

EDIT2:我還需要使用全文索引運行此查詢,如下所示:

START song=node:node_auto_index("title:*enjo*") 
MATCH ... 
RETURN ...

該歌曲也由其他藝術家播放,例如,由Artist [1, 2, 3]播放的Song 1 當我查詢[1,2] ,無論如何應該返回它。

這應該適用於您的示例:

MATCH (a1:Artist)<-[:PLAYED_BY]-(s:Song)-[:PLAYED_BY]->(a2:Artist)
WHERE a1.id = 1 AND a2.id = 2
RETURN s

因此,您想查找歌手1和歌手2播放的歌曲嗎?

該查詢如何:

MATCH (a1:Artist)<-[:PLAYED_BY]-(s:Song)-[:PLAYED_BY]->(a2:Artist)
WHERE a1.id = 1 AND a2.id = 2
RETURN s

編輯

對於任意數量的藝術家:

WITH [1,2] AS ids
MATCH (a:Artist)<-[:PLAYED_BY]-(s:Song)
WITH collect(a.id) AS artistIds, ids,s
WHERE all(x IN artistIds WHERE x IN ids) AND all(x IN ids WHERE x IN artistIds)
RETURN s

收集播放過歌曲的所有藝術家的ID,然后使用Cypher集合謂詞all僅過濾所需的藝術家ID。

數組[1,2]可以像這樣被參數化: WITH {id_array} AS ids ...

編輯

使用舊式索引進行模糊文本搜索應適用於這種方法。 只需將MATCH中未綁定(s:Song)模式的部分替換為由舊索引填充的綁定song變量:

START song=node:node_auto_index("title:*enjo*")
WITH [1,2] AS ids, song
MATCH (a:Artist)<-[:PLAYED_BY]-(song)
WITH collect(a.id) AS artistIds, ids, song
WHERE all(x IN artistIds WHERE x IN ids) AND all(x IN ids WHERE x IN artistIds)
RETURN s

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM