首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Neo4j:因效率低下而替换CASE子句?

Neo4j:因效率低下而替换CASE子句?
EN

Stack Overflow用户
提问于 2018-02-06 17:12:49
回答 1查看 42关注 0票数 0

我有一个neo4j查询,它获取(用户)的所有一级和二级连接,然后作为所有者或室友获取他们的位置。我收集所有的地方和一些其他信息与用户之间的类似关系通过一个案例条款。但是问题是,CASE子句需要超过20秒才能执行查询,这是非常糟糕的。

代码语言:javascript
复制
MATCH (n:User), (n)-[:connected_to*1..2 {status: 1}]-(sp:User),
           (sp)<-[:owner_of|house_mate]-(place:Place)
WHERE (ID(n) = {ID_n}) 
      AND NOT(n)<-[:owner_of|house_mate]-(place)
MATCH (place)-[tenant:owner_of|house_mate]->(u:User)
WITH DISTINCT place,
              type(tenant) AS type,
              u,
              CASE
                WHEN (n)-[:connected_to {status: 1}]-(u) THEN '1'
                WHEN (n)-[:connected_to*1..2 {status: 1}]-(u) THEN '2'
                ELSE '3'
              END AS connection
WITH place,
     collect({type: type, u: u, connection: connection}) AS tenants
RETURN place,
       [tenant IN tenants WHERE tenant.type = 'owner_of'   | [tenant.u, tenant.connection]][0] AS owner_array,
       [tenant IN tenants WHERE tenant.type = 'house_mate' | [tenant.u, tenant.connection]] AS house_mates_array

有什么有效的方法来返回用户之间的连接吗??

EN

回答 1

Stack Overflow用户

发布于 2018-02-06 18:27:05

这应该更有效,因为它使用OPTIONAL MATCH执行一次(n)-[:connected_to*1..2 {status: 1}]-(u)搜索(而不是在CASE子句中执行两次非常类似的搜索)。

代码语言:javascript
复制
MATCH (n:user)-[:connected_to*..2 {status: 1}]-(:User)<-[:owner_of|house_mate]-(place:Place)
WHERE ID(n) = {ID_n} AND NOT(n)<-[:owner_of|house_mate]-(place)
MATCH (place)-[tenant:owner_of|house_mate]->(u:User)
OPTIONAL MATCH (n)-[ct:connected_to*..2 {status: 1}]-(u)
WITH place,
     collect({
       type: type(tenant),
       u: u,
       connection: CASE SIZE(ct)
         WHEN 1 THEN '1'
         WHEN 2 THEN '2'
         ELSE '3'
       END}) AS tenants
RETURN place,
       [t IN tenants WHERE t.type = 'owner_of'   | [t.u, t.connection]][0] AS owner_array,
       [t IN tenants WHERE t.type = 'house_mate' | [t.u, t.connection]] AS house_mates_array
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48648427

复制
相关文章

相似问题

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