首先英语不是我的母语,所以我不确定如何告诉您我需要什么。我希望这个描述会更好。
我在neo4j中有一个图形,其中包含两种类型的标签:鸡尾酒和配料。它们通过称为CONTAIN的关系连接。
示例:
(:鸡尾酒{name:“杜松子酒补品”})-[:CONTAINS]-(:成分{name:“杜松子酒”} (:cocktail {名称:“杜松子酒补品”})-[:CONTAINS]-(:成分{name:“补品水”}
现在我的问题是:我想输入原料清单并输出所有可能用此清单制作的鸡尾酒。问题是:如何获得所有这些鸡尾酒,甚至那些不包含列表中提供的所有成分的鸡尾酒?
示例输入:
“杜松子酒”,“补品水”,“伏特加”
示例输出:
“补品水” <-“杜松子酒补品”->“杜松子酒”
提前谢谢!
答案 0 :(得分:0)
首先,您需要浏览成分列表,并获取所有可能的鸡尾酒的列表。然后,仅选择那些鸡尾酒,其所有成分都在成分列表中:
WITH ["gin","tonic water","vodka", "lemon"] AS ingredientNames
UNWIND ingredientNames AS ingredientName
MATCH (c:cocktail)-[:CONTAINS]-(i:ingredient {name: ingredientName})
WITH c,
collect(DISTINCT i) AS ingredients
MATCH (c)-[:CONTAINS]->(i:ingredient)
WITH c, ingredients,
collect(DISTINCT i) AS ingredientsTest
WHERE SIZE(ingredients) = SIZE(ingredientsTest)
RETURN c AS cocktail,
ingredients