我试图解释节点和它们之间的关系:
(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在CR和SR中是常见的。
假设我们有4个给定的关键字,现在我们需要从我的查询中找到4列:
CR匹配的KEYWORDS。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列中的SRs匹配。
例如,CR 1-11071804441有4个给定关键字中的2个关键字匹配,893个SR被附加到它上。
我想要第四列,它将包含计数的关键字,从给定的4个关键字,是匹配的893 SR,在第3列。
例如,假设在893个SR中,第一个SR包含4个关键字中的2个关键字,第二个SR包含相同的2个关键字(因此我们不计算这2个关键字),并且在给定的4个关键字中添加一个新的关键字,所以我的总计数将变成3,就像我们必须在第1列中对附加到CR 1-11071804441的所有893 SR的关键字进行计数一样。就像与SR匹配的关键字总数的最大值为4一样,因为在给定keywords.Like的情况下,我们总共有4个关键字,必须填充所有CR_number的第4列。
发布于 2017-11-03 22:31:33
试试这个:
... 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中,查询匹配包含所需关键字的所有CRs,再加上附加到这些CRs的所有SR。
在第二个OPTIONAL MATCH中,查询匹配所有附加到以前获取的SRs上的Tag。第二个匹配的原因是OPTIONAL可能没有附加任何Tag的SRs (正常的匹配会过滤您的SR,只返回至少附加了标记的OPTIONAL)。
https://stackoverflow.com/questions/47102896
复制相似问题