neo4j - 一个不寻常的密码查询挑战:查找与按标签分组的节点的交集
问题描述
我试图找到一个通用(ist)密码查询,而不必指定标签,这将实现以下用例。
- 用户可以链接到节点,节点代表用户配置文件或活动。例如
(User)->[:HAS_CLICKED]->(Document)
,或(User)-[:LIVES_IN]->(Country)
- 广告可以链接到这些节点中的一个或多个
Document-[:x]->Advert
问题是试图找到一个有效的查询来验证以下内容:用户必须与至少一个与广告具有相同标签的节点相关才能看到它。一般架构如下所示:
我已经查看了密码中的交叉和联合技术,包括apoc.intersection
程序,但它在这种情况下确实有效。
该数据库包含大约 6M 的关系,效率至关重要。我们总是试图为一个用户找到一个随机广告(查询总是以 开头MATCH (u:User{id:"1"})...
。我写了很多不成功的测试,但我不确定我可以用哪种有效的方法来解决这样的问题。任何帮助将不胜感激!
解决方案
你有没有尝试过一些类似的方法,一个两步的方法,从用户的广告中减去“标签”的标签?
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
推荐阅读
- keycloak - Keycloak docker 从 4.0.0 Beta 升级到 4.1.0
- python - Python Pivot Table margins=True 不能很好地求和
- jenkins - 如果代码文件中的字符数超过 80,是否有任何插件无法构建
- python - 使用滑动窗口分类器在 2D 阵列上进行 1-in-N 分类的高效多数投票
- java - Mockito - 如果超类包含与子类具有相同名称和类型的字段,如何注入模拟
- javascript - 1 到 50 之间的随机数;50次
- python - 使用 pandas 多对多应用函数
- azure - 导入架构问题
- amazon-web-services - 使用 AWS Lambda 函数 (Java) 将文件上传到 s3
- httpresponse - AWS API Gateway - 方法响应中没有模型选项