Neo4j:匹配路径而不计算两次共享节点

时间:2017-12-04 10:06:05

标签: neo4j cypher

我正在研究以下Neo4j架构:

Neo4j Schema

我试图获取不同标签的频率。我尝试了以下Cypher请求:

 MATCH ()-[r:entry_tag]->(:tag_value)-[:value_of_tag]->(t:tag)
RETURN t.tag AS tag, COUNT(r) AS tagFrequency ORDER BY tagFrequency DESC

但我的问题是某些条目具有相同的tag_values,但不属于同一个标记。因此,每次都会计算() - [:entry_tag] - >(),而我正在寻找从条目到其标记的所有唯一路径。

例如,如果我有以下3个条目:

  • 条目1:tag_value = A; tag = tag1
  • 条目2:tag_value = B; tag = tag2
  • 条目3:tag_value = A; tag = tag3

我得到的结果是:(第一个是标签,第二个是频率)

tag1:2

tag3:2

tag2:1

因为标签1和3共享相同的标签值,然后关系[:entry_value]被计算两次,而我想为每个频率获得1,因为我试图获得路径从开始到结束。

我知道我的密码查询错误,但我无法弄清楚如何纠正它。有没有人有建议?

提前致谢

编辑:为了更好地理解,这里是我的例子的一些图形图像:

首先是以下查询的结果:

MATCH path= ()-[:entry_tag]->(v:tag_value)-[:value_of_tag]->(t:tag) 
WHERE t.tag in ['tag1', 'tag2', 'tag3'] AND v.tag_value in ['A', 'B'] 
RETURN path LIMIT 3

Query result

然后我的3个条目及其标签和标签值:

Example graph

0 个答案:

没有答案