Cypher/Neo4j:如何匹配n个"consecutive"个节点相关的节点

Cypher/Neo4j: How to match nodes related to n "consecutive" nodes

我正在尝试匹配图表中的房源可用性(类似于 Airbnb)。

我正在尝试编写一个查询,其中 returns 从 start_date 到 end_date 可用的所有列表。

我知道以下 FOREACH 语法不正确,但我可能会帮助提供一般思路:

MATCH period=(a)-[:NEXT_DAY*]->(c)
WHERE a.date="2013-01-20" AND c.date="2013-01-24"

MATCH (listing:Listing)-[:AVAILABLE]->(d:Date)
FOREACH (d IN nodes(period))

RETURN listing

奖励问题:如果我想根据查询的可用性按比例对列表进行评分(例如,如果列表在整个期间可用则为 100%,如果在整个期间可用则为 50%)只有一半的时间可用)?

提前致谢:)

本杰明

您可以使用 UNWIND 从您的日期路径获取节点并将它们 MATCHListing

MATCH period=(a)-[:NEXT_DAY*]->(c)
WHERE a.date="2013-01-20" AND c.date="2013-01-24"

// UNWIND gets a collection of ndoes and transforms them to single/matchable nodes
UNWIND nodes(period) as nodes_in_period
MATCH (nodes_in_period)<-[:AVAILABLE]-(listing:Listing)

RETURN listing

对于奖金问题:如果我没猜错,你可以计算从 ListingDateAVAILABLE 关系的数量,并将其与 [= 的数量进行比较17=] 您经期的节点。 OPTIONAL MATCH 可能有帮助:

MATCH period=(a)-[:NEXT_DAY*]->(c)
WHERE a.date="2013-01-20" AND c.date="2013-01-24"
UNWIND nodes(period) as nodes_in_period

OPTIONAL MATCH (nodes_in_period)<-[a:AVAILABLE]-(listing:Listing)

// return the listing, the number of available relationships 
// and the number of days in period
RETURN listing, count(a), count(nodes_in_period)