Neo4j 查询graphDB(密码)
我试图解释节点及其之间的关系:Neo4j 查询graphDB(密码),neo4j,cypher,Neo4j,Cypher,我试图解释节点及其之间的关系: (CR)-[:HAS]->(SR) (CR)-[:标记到]->(关键字) (SR)-[:标记到]->(关键字) 因此,我有3种类型的节点(CR、SR和关键字)和2种关系(具有和标记到) 一个CR附加了许多SR,一个CR可以标记为多个关键字,一个SR可以标记为多个关键字,一个或多个关键字可以在CR和SR中常见 假设我们有4个给定的关键字,现在我们需要从我的查询中找到4列: 第1列:匹配了关键字的CR 第二列:附在第1列中的CR的SR数量 第三列:和第一列中的CR匹
(CR)-[:HAS]->(SR)
(CR)-[:标记到]->(关键字)
(SR)-[:标记到]->(关键字)
CR
、SR
和关键字
)和2种关系(具有
和标记到
)
一个CR
附加了许多SR
,一个CR
可以标记为多个关键字
,一个SR
可以标记为多个关键字
,一个或多个关键字
可以在CR
和SR
中常见
假设我们有4个给定的关键字,现在我们需要从我的查询中找到4列:
- 第1列:匹配了
关键字的
李>CR
- 第二列:附在第1列中的
的CR
数量李>SR
- 第三列:和第一列中的
匹配的CR
关键字的计数李>
- 第4列:与第2列中的
匹配的唯一关键字数SR
- 第二列:附在第1列中的
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
以[“级别”、“交易”、“余额”、“行”]作为coll
使用coll时,范围(0,大小(coll)-1)保持不变
放松和我一样重要
以coll[i]为col,i
匹配(s:SR)-[t:taged_TO]->(tg:Tag),其中tg.name=~('.'''.'+col+'.'.'''.'))
使用s,将(t)算作\u关键字的no\u
匹配中的匹配(s:SR)尝试以下操作:
... 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
s,以及附加到这些CR
s的所有SR
s
在第二个可选匹配
中,查询匹配所有附加到先前获取的SR
s的标记。第二个匹配是可选的,原因是可能有SR
s没有附加任何Tag
s(正常匹配会过滤你的SR
s,只返回至少附加了on Tag的那些)。尝试以下操作:
... 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
s,以及附加到这些CR
s的所有SR
s
在第二个可选匹配
中,查询匹配所有附加到先前获取的SR
s的标记。第二个匹配是可选的,因为可能有SR
s没有任何Tag
s附加(正常匹配会过滤你的SR
s,只返回至少附加了on Tag的那些)。我认为你问题的标题太宽泛了。请编辑它。此外,您能否共享示例数据和预期结果?也许是。谢谢你的建议。@BrunoPeres。我已经添加了更多的信息和输出控制台的图像。我认为你问题的标题太宽泛了。请编辑它。此外,您能否共享示例数据和预期结果?也许是。谢谢你的建议。@BrunoPeres。我已经添加了更多信息和输出控制台的图像。谢谢@imran。实际上,第一列和第四列需要CR_编号:-如果我们看到第二行图像,CR在4个给定关键字中有1个关键字,385 SR在其中。现在在输出的4列中,我想知道这385 SR在4个给定关键字中包含多少个关键字。例如,在这385个关键字中,假设第一个SR包含4个给定关键字中匹配的2个关键字,第二个SR包含相同的2个关键字和1个新关键字,所以,count变为3,我们必须计算385 SR,并将第2行中的CR作为第4列(因此max.count将变为4,因为我们的示例中只有4个给定关键字)@Rajat我已根据您的更新更新了查询。如果它不能按预期工作,请共享一些输入数据集以测试针对Thanks@imran的查询。实际上,第一列和第四列需要CR_编号:-如果我们看到第二行图像,CR在4个给定关键字中有1个关键字,385 SR在其中。现在在输出的4列中,我想知道这385 SR在4个给定关键字中包含多少个关键字。例如,在这385个关键字中,假设第一个SR包含4个给定关键字中匹配的2个关键字,第二个SR包含相同的2个关键字和1个新关键字,所以,count变为3,我们必须计算385 SR,并将第2行中的CR作为第4列(因此max.count将变为4,因为我们的示例中只有4个给定关键字)@Rajat我已根据您的更新更新了查询。如果它不能像预期的那样工作,您可以共享一些输入数据集来测试查询吗