Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j按查询顺序排列的性能不佳_Neo4j_Spring Data Neo4j_Neo4j Apoc - Fatal编程技术网

Neo4j按查询顺序排列的性能不佳

Neo4j按查询顺序排列的性能不佳,neo4j,spring-data-neo4j,neo4j-apoc,Neo4j,Spring Data Neo4j,Neo4j Apoc,我有一个复杂的密码,当我不使用“orderby”时,我会得到一个相当快的响应,但当我使用“orderby”时,它会非常慢。我的order属性(电影的分数,即PageRank算法分数)上有一个b树索引。我加了密码 MATCH (m:Movie) WHERE m.release > '0' AND m.imdbVoteAverage > 0 AND CASE WHEN NOT [] = [] THEN any(title in [] WHERE toLower(m.title) CONT

我有一个复杂的密码,当我不使用“orderby”时,我会得到一个相当快的响应,但当我使用“orderby”时,它会非常慢。我的order属性(电影的分数,即PageRank算法分数)上有一个b树索引。我加了密码

MATCH (m:Movie)
WHERE m.release > '0' AND m.imdbVoteAverage > 0 AND
CASE WHEN NOT [] = [] THEN any(title in [] WHERE toLower(m.title) CONTAINS title OR toLower(m.originalTitle) CONTAINS title) ELSE TRUE END
WITH m AS m
MATCH (m)-[:HAS_GENRE]->(genre: Genre)
WHERE CASE WHEN NOT ['komedi'] = [] THEN any(genreName in ['komedi'] WHERE toLower(genre.name) CONTAINS genreName) ELSE TRUE END
MATCH (m)<-[acted:ACTED_IN]-(actor: Person)
WHERE CASE WHEN NOT [] = [] THEN any(actorName in [] WHERE toLower(actor.name) CONTAINS actorName) ELSE TRUE END AND
CASE WHEN NOT [] = [] THEN any(characterName in [] WHERE any(cname in acted.characterNames WHERE toLower(cname) CONTAINS characterName)) ELSE TRUE END
MATCH (m) -[:HAS_KEYWORDS]->(keyword: Keyword)
WHERE CASE WHEN NOT [] = [] THEN any(keywordName in [] WHERE toLower(keyword.name) CONTAINS keywordName) ELSE TRUE END
MATCH (m)<-[:PRODUCED]-(producer: Person)
WHERE CASE WHEN NOT [] = [] THEN any(producerName in [] WHERE toLower(producer.name) CONTAINS producerName) ELSE TRUE END
MATCH (m)<-[:DIRECTED]-(director: Person)
WHERE CASE WHEN NOT [] = [] THEN any(directorName in [] WHERE toLower(director.name) CONTAINS directorName) ELSE TRUE END
MATCH (m)<-[:WRITTEN]-(writer: Person)
WHERE CASE WHEN NOT [] = [] THEN any(writerName in [] WHERE toLower(writer.name) CONTAINS writerName) ELSE TRUE END
MATCH (m)<-[:PRODUCED_COMPANY]-(productionCompany: ProductionCompany)
WHERE CASE WHEN NOT [] = [] THEN any(producedCompanyName in [] WHERE toLower(productionCompany.name) CONTAINS producedCompanyName) ELSE TRUE END
RETURN DISTINCT m ORDER BY m.score DESC LIMIT 10 
匹配(m:电影)
其中m.release>0和m.imdbVoteAverage>0和
如果不是[]=[]则任何(在[]中的标题,其中toLower(m.title)包含标题或toLower(m.originaltle)包含标题)否则为真结束
以m为m
匹配(m)-[:具有类型]->(类型:类型)
如果CASE WHEN NOT['komedi']=[]那么任何(在['komedi']中的genreName),其中toLower(genre.name)包含genreName),否则为TRUE END
匹配(m)(关键字:关键字)
其中CASE WHEN NOT[]=[]则any(关键字名称在[]中,其中toLower(keyword.name)包含关键字名称)ELSE TRUE结束

匹配(m)您需要向计划者表明您的m.score字段是数字字段,因此从索引中提取该字段。即
其中m.score>0

您应该在查询计划中看到它


您的查询看起来也非常复杂,而且是生成的。但实际上没有考虑到总是“false”的表达式可以从查询部分中删除,例如,
WHERE not[]=[]

它解决了问题,谢谢。