使用公共实体计算用户数

时间:2016-01-29 10:08:05

标签: neo4j cypher

我想确定有共同兴趣的用户群。

数据模型和特征

  • 用户兴趣是节点标签并代表唯一节点
  • LIKES 是他们之间的关系,(用户) - [:LIKES] - >(兴趣)
  • 节点的所有属性都已编入索引
  • 关系性质可以在节点之间表征为多对多
  • 有300多个兴趣和120,000多个用户

我使用以下查询来确定具有共同兴趣和所有其他兴趣的用户数;

MATCH (u:User)-[:LIKES]-(i:Interest)
WHERE i.name = "Baking"
WITH u
MATCH (u)-[:LIKES]-(i:Interest)
WHERE i.name <> "Baking"
RETURN i.name, COUNT(u) AS userCount
ORDER BY userCount DESC

我尝试制作一个可以有3个共同兴趣的查询,但这会让它变慢。我认为这不是一个好的,可伸缩的设计,任何人都可以帮忙吗?

虽然可能不合理,但最终目标是计算nxn利益组合。

1 个答案:

答案 0 :(得分:1)

也许你应该限制利益,只采取前五名或其他什么? 此外,我不知道您的数据模型,但感兴趣的是一个独特的节点。这将加快查询速度。因此关系[有兴趣] - &gt;(烘焙)指向同一节点,您只需从烘焙开始即可获得所有用户。 也许翻转您的查询并从兴趣开始(密码很奇怪)或者您可以强制查询使用索引