建模和迭代时间依赖关系的正确方法是什么?
例如:
还有许多其他与时间有关的关系:
对这些进行建模的正确方法是什么?一个典型的查询是找到一个带有“as of”参数的遍历,例如“从01/01/74开始,John的配偶是谁?”
答案 0 :(得分:1)
使用索引可以轻松完成。索引/属性只能使用原语,因此您可以将Date对象转换为long值,然后可以索引该值。您必须将索引存储为特殊的Numeric类型,但之后,您可以根据范围进行搜索,这样您就可以执行“之前”或“之后”甚至“之间”类型查询。
答案 1 :(得分:1)
您可以考虑使用额外的节点来表示特定的婚姻或工作期与calendar subgraph一起使用。例如,约翰的婚姻可以模仿如下:
(John)-[:MARRIAGE]->(John+Liz)
(Liz)-[:MARRIAGE]->(John+Liz)
(John+Liz)-[:START_DATE]->(07/03/69)
(John+Liz)-[:END_DATE]->(05/12/73)
(John)-[:MARRIAGE]->(John+Corrie)
(Corrie)-[:MARRIAGE]->(John+Corrie)
(John+Corrie)-[:START_DATE]->(03/18/82)
这使您可以灵活地处理每个人可能进行的婚姻数量以及END_DATE
是否存在。
希望这有帮助
的NiGe
答案 2 :(得分:0)
我假设为每种类型构建总是两种关系 - lived_in_s,lived_in_e,belowned_to_s,belowned_to_e ....其中后缀“s”和“e”表示该关系的开始和结束时间。比查询参数可能看起来像:
START n=node({John})
MATCH n-[r:spouse_of_s]-m, n-[?r2:spouse_of_e]-m
WHERE r2.time? < {timestamp} AND r.time > {timestamp}
RETURN m;
(我可能在r2的查询中输入错误?,我没有经过测试就写了它)
你可能想要使用@nicholas写的关于
的索引答案 3 :(得分:0)
我通常会在on_date属性中添加时间戳。
我还建议您使用以下格式YYYYMMDD编码日期。然后,您可以在代码中轻松添加比较。例如:
约翰于07/03/69与伊丽莎白结婚,并于05/12/73与她离婚;然后他于03/18/82与Corrie结婚并仍然结婚。如果你想知道John是否已婚并且与谁结婚,你可以简单地比较日期,并获得结束节点。