gpt4 book ai didi

neo4j - 过滤与密码中特定节点相关的节点

转载 作者:行者123 更新时间:2023-12-01 23:54:43 25 4
gpt4 key购买 nike

如何有效地过滤连接到一组节点的所有节点?

我现在有这个:

MATCH (:City { Id: 10 })<-[:LIVES_IN]-(p:Person),
p-[:KNOWS]->(:Person { Name: 'John' }),
p-[:KNOWS]->(:Person { Name: 'Mark' }),
p-[:KNOWS]->(:Person { Name: 'Jane' }),
p-[:KNOWS]->(:Person { Name: 'Mary' })
RETURN p

这可以满足我的要求,但速度非常慢。大约需要 900 毫秒的数据库。标记为 Person 的 500 个节点。

我要解决的问题更大

MATCH (:City { Id: 10 })<-[:LIVES_IN]-(p:Person)-[:HAS_ITEM]->(i:Item),
p-[:KNOWS]->(:Person { Name: 'John' }),
p-[:KNOWS]->(:Person { Name: 'Mark' }),
p-[:KNOWS]->(:Person { Name: 'Jane' }),
p-[:KNOWS]->(:Person { Name: 'Mary' })
RETURN i, count(p)

此查询查找拥有元素的人,对于每个元素,它返回拥有该元素并认识某些人的所有人的数量。此查询永远不会完成(或者我等待的时间不够长)。

当我删除“认识某些人”部分时,查询会在大约 400 毫秒内完成。

MATCH (:City { Id: 10 })<-[:LIVES_IN]-(p:Person)-[:HAS_ITEM]->(i:Item),
RETURN i, count(p)

我做错了什么?

最佳答案

尝试重新排序以尽量减少一次必须搜索的结果数。像这样——如果知道群体比城市中的人口数和拥有元素的人数少,那么这可能会更好(如果拥有元素的人很少,可以交换它):

MATCH (p:Person)-[:KNOWS]->(:Person { Name: 'John' }) // start with john's friends
WITH p
MATCH (:City { Id: 10 })<-[:LIVES_IN]-(p)-[:HAS_ITEM]->(i:Item) // only friends that live in city 10 and have the item...
WITH p, i
MATCH p-[:KNOWS]->(:Person { Name: 'Mark' })
WITH p, i
MATCH p-[:KNOWS]->(:Person { Name: 'Jane' })
WITH p, i
MATCH p-[:KNOWS]->(:Person { Name: 'Mary' })
RETURN i, count(p)

此外,请确保您在 :Person(Name):City(Id) 上有索引

关于neo4j - 过滤与密码中特定节点相关的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24599515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com