我真的被绘制(和新的)neo4j作为一种模拟我的数据以便于分析的方法。我的部分工作要求我分析我们的电子邮件营销工作。
作为一个简单的数据模型,我认为我的图有3个节点:
Lead
- 数据库中的客户Email
- 发送给客户的电子邮件URL
- 电子邮件中包含的链接关系是:
(Lead) -[:SENT]-> (Email)
(Lead) -[:OPEN]-> (Email)
(Lead) -[:CLICKED_THRU]-> (Email)
(EMAIL) -[:CONTAINS]-> (URL)
现在回答我的问题。使用我在上面构建的数据模型,如何隔离Lead点击的URL。如果我添加了另一个关系(Lead) -[:CLICKED_ON]-> (URL)
,我不知道该网址包含哪个电子邮件(我们会在多封电子邮件中发送相同的网址)。
现在,我有一个传统的RDBMS实现,我知道哪个主管点击了每封电子邮件中的哪些URL。
我想尝试使用此业务问题来学习neo4j,但我正在努力将如何将点击的URL与特定电子邮件联系起来。
提前感谢您的帮助。如果这不是正确的论坛,请告诉我在哪里可以指导我的问题。
答案 0 :(得分:1)
模型的问题在于,为了使其工作,您必须假设每封电子邮件只有一个链接。这通常不是真的。
现在,如果它是真的每封电子邮件只有一个链接,那么你可以这样做你想做的事情:
MATCH (l:Lead)-[:CLICKED_THRU]->(e:Email)->[:CONTAINS]->(url:URL)
return l, url
这会告诉您是谁点击了哪个网址。但请注意,如果每封电子邮件中有多个网址,这会使每个点击电子邮件链接的用户看起来都点击该电子邮件中的每个链接。
更好的数据建模方法如下:
(Lead)-[:CLICKED_THRU]->(URL)
(EMAIL)-[:CONTAINS]->(URL)
(Lead)-[:OPEN]->(Email)
这可以让您询问点击了哪些网址(仅限于CLICKED_THRU
,但它也会告诉您哪些电子邮件已打开。此外,如果网址对于电子邮件是唯一的,请按照:CONTAINS
进行操作您可以知道通过哪个链接点击了哪个电子邮件。
最后,对于neo4j中的一般建模问题,请确保check out this presentation深入探讨如何考虑建模,以及它与关系的不同之处。
答案 1 :(得分:1)
我假设在访问URL时,您知道它来自哪个电子邮件,电子邮件包含多个URL,并且多个电子邮件中可能存在相同的URL。您可能希望将超边(将两个以上节点链接在一起的东西)建模为节点:
(Lead)-[:CLICKED_URL_FROM]->(EmailLinkNode)
(EmailLinkNode)-[:FROM_EMAIL]->(email)
(EmailLinkNode)-[:CLICKED_URL]->(url)
我认为这是在一个“关系”中将三个节点联系起来的唯一方法,但我自己也很陌生。
NeoTechnology page here上描述了类似的内容。
我认为考虑您的数据,您可以考虑创建一个新节点来表示EmailUrl的概念,这是一个虚拟节点,用于在与特定电子邮件相关时唯一标识URL。
(email)-[:CONTAINS]->(EmailUrl)-[:FOR_URL]->(url)
这会导致潜在客户和现在唯一的节点(线索) - [:CLICKED_THRU] - >(EmailUrl)之间的简单关系,因此简单的查询不仅可以找到点击了哪些网址,还查看了哪些电子邮件证明了最吸引你的潜在客户。