首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有过滤器的neo4j查询(包含)

带有过滤器的neo4j查询(包含)
EN

Stack Overflow用户
提问于 2020-07-30 14:33:07
回答 1查看 99关注 0票数 1

我使用NEO4j进行了一个没有过滤器(包含+ OR/AND条件)的查询,但是当我添加过滤器时,查询被卡住了,没有响应。如果没有过滤器,下面有+- 70,000个结果查询示例:

代码语言:javascript
复制
MATCH (movie: movie) WHERE  (movie.movie="xxx_xxxx" )
with movie
MATCH (movie)-[found:found]->(n:firstName)
with n, movie
MATCH (n)-[:cinema|secondName*0..1]->(g)-[p:cinema]->(cinema:cinema)<-[found:found]-(movie)
with n,g,cinema,movie
OPTIONAL MATCH (cinema)-[as:ID]->(id:ID)<-[found:found]-(movie)
with n,g,cinema,id,movie
OPTIONAL MATCH (id:ID)-[p2:cinema]->(cinema2:cinema)<-[found:found]-(movie)
with n,g,cinema,id,cinema2
OPTIONAL MATCH path2 = ((cinema:cinema)-[as:ID]->(id:ID)-[p2:cinema]->(cinema2:cinema))
with path2,n,g,id,cinema,cinema2
MATCH path = (n)-[:cinema|secondName*0..1]->(g)-[p:cinema]->(cinema:cinema)
with n,cinema,path,path2
WHERE
(  (  toLower(n.nickname) CONTAINS toLower("jhon") OR
 toLower(g.nickname) CONTAINS toLower("jhon") OR
 toLower(cinema.address) CONTAINS toLower("jhon")
)   )
return DISTINCT NODES(path)+COALESCE (NODES(path2),[]), RELATIONSHIPS(path)+COALESCE (RELATIONSHIPS(path2),[])
SKIP 0 LIMIT 5

您知道为什么筛选器会阻塞查询吗?

EN

回答 1

Stack Overflow用户

发布于 2020-07-30 19:46:53

您的WHERE子句需要g,但前面的WITH子句没有传递它。Cypher计划器似乎没有将其标记为错误(至少在4.1.0中是这样),但它可能会导致问题。因此,尝试将with n,cinema,path,path2更改为with n,cinema,path,path2,g

顺便说一句,您的WHERE子句可以提高一些效率,因为当您只需要按原样使用"jhon“时,就不需要调用TOLOWER("jhon") (最多3次)。所以,你应该改变这一点:

代码语言:javascript
复制
WHERE
(  (  toLower(n.nickname) CONTAINS toLower("jhon") OR
 toLower(g.nickname) CONTAINS toLower("jhon") OR
 toLower(cinema.address) CONTAINS toLower("jhon")
)   )

对此:

代码语言:javascript
复制
WHERE
 toLower(n.nickname) CONTAINS "jhon" OR
 toLower(g.nickname) CONTAINS "jhon" OR
 toLower(cinema.address) CONTAINS "jhon"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63175424

复制
相关文章

相似问题

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