我试图解释它们之间的节点和关系:
(CR)-[:HAS]->(SR)
(CR)-[:TAGGED_TO]->(KEYWORDS)
(SR)-[:TAGGED_TO]->(KEYWORDS)
所以,我有3种类型的节点(CR
,SR
和KEYWORDS
)和2种关系(HAS
和TAGGED_TO
)。
一个CR
附加了许多SR
,一个CR
可以标记为多个KEYWORDS
,还有一个SR
可以标记为多个KEYWORDS
KEYWORDS
{1}},CR
和SR
中可能会有一个或多个CR
。
假设我们有4个给定的关键字,现在我们需要从查询中找到4列:
KEYWORDS
的{{1}}人。 SR
附加CR
的数量。KEYWORDS
匹配的CR
的计数。 SR
匹配的唯一关键字数量。我写了一个查询,它能够获得前3列,但没有获得4列。
WITH ["level","transact","balance","line"] AS coll
WITH coll, range(0, size(coll)-1) AS is
UNWIND is AS i
WITH coll[i] as col, i
match (s:SR)-[t:TAGGED_TO]->(tg:Tag) where tg.name=~('.*'+col+'.*')
with s, count(t) as no_of_keywords
matched_in_SR match (s:SR)<-[h:HAS]-(c:CR)
return c.CR_Number,count(h) as NO_of_SR_under_CR_which_contain_keywords,
no_of_keywords_matched_in_SR
输出控制台的图像
在我的输出控制台中,我有3列
在第4列中,我希望在给定关键字中匹配的关键字数量与第3列中的SR相匹配。
例如,CR 1-11071804441在4个给定关键字中匹配了2个关键字,并附加了893个SR。
我想要第4列,其中包含4个关键字中的关键字数量,这些关键字与第3列中的893 SR匹配。
对于一个实例,假设在893 SR中SR 1st SR包含4个给定关键字中的2个关键字,而第2个SR包含相同的2个关键字,其中包含第1个SR(因此我们不会计算这2个关键字)和新的关键字给定的4个关键字,所以我的总计数将变为3,我们必须计算所有893 SR的关键字,这些关键字在第1列中附加到CR 1-11071804441。就像与SR匹配的关键字总数最多为4,因为我们总共有4个给定的关键字。就像我必须为所有CR_number填充我的第4列
答案 0 :(得分:0)
试试这个:
... WITH col
MATCH (s:SR)-[:HAS]-(c:CR)-[:TAGGED_TO]-(tg:Tag)
WHERE tg.name=~('.*'+col+'.*')
WITH c, tg, s
OPTIONAL MATCH (s)-[:TAGGED_TO]-(tg1:Tag)
WHERE tg1.name=~('.*'+col+'.*')
RETURN c.CR_Number as CR_number,
count(distinct tg) as NO_of_keywords_matched_in_CR,
count(distinct s) as NO_of_SR_under_CR_which_contain_keywords,
count(distinct tg1) as NO_of_keywords_matched_in_SR
在第一个MATCH
中,查询会匹配具有所需关键字的所有CR
,以及附加到这些SR
的所有CR
。
在第二个OPTIONAL MATCH
中,查询会匹配以前提取的Tag
附加的所有SR
。第二个匹配为OPTIONAL
的原因是因为可能SR
个可能没有附加任何Tag
个(正常的MATCH会将您的SR
过滤到只返回至少附带标签的那些)。