如何优化此cypher查询?它比使用Gremlin的类似查询慢3-4倍。
START movie=node:vertices(movieId="100")
MATCH genera1<--movie<--()-[ratedRel:rated]->anotherMovie-->genera1
WHERE ratedRel.stars > 3
RETURN anotherMovie.title as title, anotherMovie.movieId as id,
genera1.genera as genera,
COUNT(anotherMovie) as count ORDER BY count(anotherMovie) DESC LIMIT 20;我只是尝试检索那些被评为3星以上并且与开始节点具有相同类别的电影:http://markorodriguez.files.wordpress.com/2011/09/movielens-schema.png?w=350
我在控制台中运行查询,并且使用的是Neo4j 1.9
Gremlin查询:
m = [:];
x = [] as Set;
v = g.v(node_id);
v.out('hasGenera').aggregate(x).back(2).inE('rated').
filter{it.getProperty('stars') > 3}.outV.outE('rated').
filter{it.getProperty('stars') > 3}.
inV.filter{it != v}.
filter{it.out('hasGenera').toSet().equals(x)}.
groupCount(m){\"${it.id}:${it.title.replaceAll(',',' ')}\"}.iterate();
m.sort{a,b -> b.value <=> a.value}[0..24];发布于 2012-12-14 18:45:37
START movie=node:vertices(movieId="100")
MATCH movie-->genera1<-anotherMovie<-[ratedRel:rated]-user
WHERE ratedRel.stars > 3
RETURN anotherMovie.title as title, anotherMovie.movieId as id, genera1.genera as genera,
COUNT(ratedRel) as cnt ORDER BY cnt DESC LIMIT 20;更新:基于你的gremlin查询的,你能试试这个吗?
START movie=node:vertices(movieId="100")
MATCH movie-[:hasGenera]->genera1<-[:hasGenera]-anotherMovie<-[ratedRel:rated]-user
WITH anotherMovie,count(ratedRel) as allVotes, sum(ratedRel) as allStars,genera1
WHERE allStars/allVotes>3
RETURN anotherMovie.title as title, anotherMovie.movieId as id, genera1.genera as genera,
allStars ORDER BY allStars DESC LIMIT 20;重点是在路径中准确定义尽可能多的元素(在本例中,我们遗漏了rels名称),并省略了user节点,我不知道如何在cypher中做到这一点,但它显然没有在gremlin代码中列出。
https://stackoverflow.com/questions/13862620
复制相似问题