【问题标题】:neo4j - performance of query to match nodes with a common relationshipneo4j - 查询性能以匹配具有共同关系的节点
【发布时间】:2020-03-05 04:01:22
【问题描述】:

我已经从 twitter 数据中创建了一个数据库,并且用户和地点之间的关系如下:

(:User)-[:WAS_AT]-> (p:Place)

在 59.257 个用户和 823 个地点之间有 610.464 个这种类型的关系。

我想获取所有在同一个地方的用户:

MATCH q=(u1:User)-[:WAS_AT]->(:Place)<-[:WAS_AT]-(u2:User)
RETURN q

那个查询在两个多小时后还没有完成,我做错了什么?

我尝试为用户添加索引,但这并没有提高效率。

提前致谢,

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    您的查询试图让每个不同的对访问都访问同一个Place。因此,如果对 Place 进行了 N 次访问,您将尝试获取 N*(N-1) 路径。你正试图为每一个Place 这样做。

    您真正想要的是获得一个不同的Users 列表,他们访问了相同的Place(最大为N)。你可以这样做:

    MATCH (u:User)-[:WAS_AT]->(place:Place)
    RETURN place, COLLECT(DISTINCT u) AS users
    

    仅当User 可以与同一个Place 具有多个WAS_AT 关系时,才需要DISTINCT 选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 2016-01-25
      • 2018-08-25
      • 2017-06-14
      • 1970-01-01
      相关资源
      最近更新 更多