我正在 Neo4j 中实现基本的访问者指标跟踪(请原谅我;我通常是图形数据库的新手)。我有三种节点类型:Visitor、Session 和 Event。
每次创建新的事件节点时,如果需要,我还想创建新的会话和/或访客节点(具有相同 ID 的节点尚不存在)。这是我尝试过的:
CREATE UNIQUE
(e:Event { type: 'pageview' })<-[:ACTION]-(s:Session { id: 'ABC'})<-[:SESSION]-(v:Visitor { id: '123' })
RETURN e,s,v;
这会产生以下错误:Unbound pattern!
,这是有道理的,因为我没有明确地将任何东西绑定到参考节点。但是,我希望以利用索引中存在的任何内容的方式编写查询,并创建缺少的内容。
我使用的是 2.0 版(带标签),并创建了以下索引:
CREATE INDEX on :Session(id);
CREATE INDEX on :Visitor(id);
此外,我想为会话中的事件和访问者的会话实现链接列表。基本上,如果存在预先存在的 [:ACTION] 关系,则删除旧关系并将新事件节点与前一个事件节点相关联(对于同一会话)。会话和访问者的 [:SESSION] 关系也是如此,即:
curSession-[:ACTION]->curEvent-[:PREV]->prevEvent...
visitor-[:SESSION]->curSession-[:PREV]->prevSession...
我可能会弄清楚如何使用多个查询来做到这一点,但我正在尝试学习如何正确地利用图形数据库结构(而且我担心竞争条件)。