簡體   English   中英

Cypher / Neo4j 查詢獲取具有特定多重關系的節點節點

[英]Cypher / Neo4j query that gets a nodes nodes with specific multiple relationships

我正在開發應用程序管理器應用程序。 它有帶有標簽的項目 Item和帶有 label Tags的標簽。 項目可以有多個標簽,最多五個。

(i:Item)-[:HAS]->(t:Tag)

我正在使用 php 來做到這一點,所以理想情況下我可以連接查詢:

$tags = $this->getParam("tags"); // split by comma or some separator
        
if ($tags != null) {
      $arrayTags =  explode(";", $tags ,5);

      $queryAddTagSpecifiers = "";

      for ($i=0;$i<count($arrayTags);$i++) {
          $queryAddTagSpecifiers.= " MATCH (t:Tag {name:'".$arrayTags[$i]."'})<-[:HAS]-(i:Item)";
       }

       $query = "MATCH (t:Tag)<-[:HAS]-(i:Item)-[:OWNED]->(u:User) 
               ".$queryAddTagSpecifiers."
                 WHERE u.id='" . $this->userId . "' RETURN i";
       echo $query;

   }

我正在嘗試編寫查詢 MATCH 以獲取具有多個標簽的項目。 對於單個標簽,它可以工作。

例如 document10 有標簽 house 和 image222

我嘗試了多種變體:

MATCH (i:Item)-[:OWNED]->(u:User) MATCH (t:Tag {name:'house'})<-[:HAS]-(i:Item) MATCH (t:Tag {name:'image222'})<-[:HAS]-(i:Item) WHERE u.id='1640793954DANYXV4RW8EFZLIJNUMC' RETURN i

我也使用WHERE t.name='house AND t.name='image222'但沒有運氣,可能是因為它們是互斥的。

任何幫助表示贊賞。

如果您有名稱為“Tag1”、“Tag2”、“Tag3”、“Tag4”的標簽,並且您想查找同時具有“Tag1”和“Tag3”的項目,您可以這樣做

WITH ['Tag1','Tag3'] AS tags
MATCH (i:Item)
WHERE ALL(tag IN tags WHERE tag IN [(i)-[:HAS]->(itemTag) | itemTag.name])

其中這部分

[(i)-[:HAS]->(itemTag) | itemTag.name]

是特定項目的標簽的集合

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM