[英]Match nodes connected to same intermediary - cypher/neo4j
我正在處理帶有用術語節點標記的內容節點的圖。 我正在嘗試查詢返回與其他(搜索)術語節點連接到相同內容節點的(匹配)術語節點的查詢。
(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');
選擇以下兩個術語后,查詢將返回標有那些內容(“進化”,“螞蟻”等)中任何一個的術語,但是,使用上述查詢不會返回任何術語。
您可以嘗試將查詢分為兩部分:
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 10
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.