neo4j - 多个可选匹配

时间:2014-07-25 13:14:51

标签: neo4j

我有以下neo4j数据库: http://console.neo4j.org/?id=gkkmha

然后我运行以下查询:

MATCH (person:Person)-[:plays]->(instrument:Instrument {name: 'Drums'})
OPTIONAL MATCH (band:Band { name: 'bandname' })-[:genre]->(genre:Genre)<-[:likes]-(person)
OPTIONAL MATCH (band)-[:influenced]->(influence:Influence)<-[:influenced]-(person)
RETURN person.name, COLLECT(genre.name) as matched_genres, COLLECT (influence.name) as matched_influences, (count(genre)/4.0) as score
ORDER BY score DESC

我希望能够找到演奏指定乐器的音乐家,但也有类似的流派匹配和影响乐队。到目前为止,我已经将它用于匹配类型并返回这些类型的列表,但我不能让它对影响做同样的事情。我希望它能够返回匹配影响的列表。

理想情况下,它还可以获得与乐队相关的流派和影响的总数(尽管这很不错)。

当前输出:

+-----------------------------------------------------------------+
| person.name    | matched_genres    | matched_influences | score |
+-----------------------------------------------------------------+
| "Robert Smith" | ["Soul","Motown"] | []                 | 0.5   |
| "Alex Smith"   | ["Soul"]          | []                 | 0.25  |
| "Mr Drummer"   | []                | []                 | 0.0   |
+-----------------------------------------------------------------+
3 rows
54 ms

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我相信你有一个错字,而不是:influenced尝试:Influenced

MATCH (person:Person)-[:plays]->(instrument:Instrument { name: 'Drums' })
OPTIONAL
MATCH (band:Band { name: 'bandname' })-[:genre]->(genre:Genre)<-[:likes]-(person)
OPTIONAL
MATCH (band)-[:Influenced]->(influence:Influence)<-[:Influenced]-(person)
RETURN person.name, COLLECT(genre.name) AS matched_genres, COLLECT(influence.name) AS matched_influences,(count(genre)/4.0) AS score
ORDER BY score DESC