Cypher / Neo4j:如何匹配与n个“连续”节点相关的节点

时间:2015-06-05 10:43:00

标签: date neo4j cypher graph-databases

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

  • 图表每个日期有1个节点,连续日期由NEXT_DAY边缘链接。
  • 列表通过AVAILABLE边缘(如果可用)链接到日节点

我正在尝试编写一个查询,该查询返回从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%期间)?

提前致谢:)

本杰明

1 个答案:

答案 0 :(得分:2)

您可以使用UNWIND从日期路径获取节点,并MATCH将其添加到Listing

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

对于红利问题:如果我做对了,你可以计算从AVAILABLEListing的{​​{1}}关系的数量,并将其与{{1}的数量进行比较您期间的节点。 Date可能有所帮助:

Date