首页 > 解决方案 > 一个不寻常的密码查询挑战:查找与按标签分组的节点的交集

问题描述

我试图找到一个通用(ist)密码查询,而不必指定标签,这将实现以下用例。

问题是试图找到一个有效的查询来验证以下内容:用户必须与至少一个与广告具有相同标签的节点相关才能看到它。一般架构如下所示:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

我已经查看了密码中的交叉和联合技术,包括apoc.intersection程序,但它在这种情况下确实有效。

该数据库包含大约 6M 的关系,效率至关重要。我们总是试图为一个用户找到一个随机广告(查询总是以 开头MATCH (u:User{id:"1"})...。我写了很多不成功的测试,但我不确定我可以用哪种有效的方法来解决这样的问题。任何帮助将不胜感激!

标签: neo4jcyphergraph-databases

解决方案


你有没有尝试过一些类似的方法,一个两步的方法,从用户的广告中减去“标签”的标签?

MATCH (u:User {id:'1'})-->()<--(a:Ad)
WITH DISTINCT u,a
WHERE 
     SIZE(apoc.coll.subtract( 
                              [(a)-->(tag) | labels(tag)[0]],
                              [(u)-->(tag)<--(a) | labels(tag)[0]]
                            )
         ) = 0
RETURN a,rand() AS rand
ORDER BY rand LIMIT 1

推荐阅读