首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化密码查询

优化密码查询
EN

Stack Overflow用户
提问于 2012-12-13 23:04:04
回答 1查看 259关注 0票数 0

如何优化此cypher查询?它比使用Gremlin的类似查询慢3-4倍。

代码语言:javascript
复制
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查询:

代码语言:javascript
复制
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];
EN

回答 1

Stack Overflow用户

发布于 2012-12-14 18:45:37

代码语言:javascript
复制
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查询的,你能试试这个吗?

代码语言:javascript
复制
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代码中列出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13862620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档