我正在处理一个用术语节点标记内容节点的图表。我试图让一个查询正常工作,返回(匹配的)连接到与其他(搜索)术语节点相同的内容节点的术语节点。
(matched:term)--(contentNode:content)--(search:term)我遇到的问题是返回连接到所有搜索词的内容的匹配项节点,而不是任何一个。
下面是我当前查询的简化版本:
query = [
'MATCH (matched:term)<-[:TAGGED_WITH]-(contentNode:content)-[:TAGGED_WITH]->(searchTerms:term) ',
'WHERE searchTerms.UUID IN {searchTerms} ',
'RETURN DISTINCT matched.name AS name, matched.UUID AS UUID, matched.contentConnections AS connections ',
'ORDER BY connections DESC LIMIT 10'
].join('\n');下面是实践中的一个例子--最上面的一组术语是与我的查询匹配的术语,下面是用于搜索的术语:

“天文学”一词不应返回,但这是因为一些以“图像”为标记的内容也被标记为“天文学”。
结果的图表示:

注意,只有一段内容(灰色节点)匹配这两个术语(很难判断,因为显示的是节点ID )。我们期望的是只返回那些连接到带有“图像”和“器官”标记的内容的术语。
另一个例子是:

这一搜索不应产生任何术语,因为没有任何内容都有“器官”和“天文学”的标记,然而,它正在返回标记为两者之一的术语。
图形表示:

我希望我已经把我的问题说清楚了。我试着用count()对结果进行分组,但很难让它起作用。
任何帮助都将不胜感激。
编辑:
查询:
query = [
'MATCH (contentNode:content)-[:TAGGED_WITH]->(searchTerms:term) ',
'WITH contentNode, COUNT(contentNode) as countContent, searchTerms ',
'WHERE searchTerms.UUID IN {searchTerms} AND countContent = {searchTermsCount} ',
'MATCH (typeNode:termType)<-[:IS_TYPE]-(matched:term)<-[:TAGGED_WITH]-contentNode, ',
'matched-[:HAS_LANGUAGE {languageCode: {language} }]-(termMeta:termMeta) ',
'WHERE NOT matched.UUID IN {ignoreTerms}',
'RETURN DISTINCT termMeta.name AS name, matched.UUID AS UUID, matched.contentConnections AS connections ',
'ORDER BY connections DESC LIMIT 10'
].join('\n');如果选择了以下两个术语,则查询将返回标记到任何内容片段(“演化”、“蚂蚁”等)的术语,但是,在使用上述查询时,将不会返回任何术语。

发布于 2014-03-03 09:05:52
您可以尝试将查询分成两部分:
MATCH (contentNode:content)-[:TAGGED_WITH]->(searchTerms:term)
WHERE searchTerms.UUID IN {searchTerms}
WITH contentNode, COUNT(*) as cnt
WHERE cnt = {_searchTerms_size_}
MATCH (matched:term)<-[:TAGGED_WITH]-contentNode
RETURN DISTINCT matched.name AS name, matched.UUID AS UUID, matched.contentConnections AS connections
ORDER BY connections DESC LIMIT 10https://stackoverflow.com/questions/22128827
复制相似问题