图数据库查询问题

我有一个场景想用 Nebula Graph 实现,数据模型如下:
节点类型:人,房子
边类型:拥有,租赁
其中租赁关系上有属性,分别是开始时间和结束时间,用来标识租赁时间。一个人可以拥有和租赁多套房子,也可以在不同时间段内租赁同一套房子。

我的问题是,用 nGQL 可以实现 “所有 3 个月内空置过的房子” 这个查询吗?

谢谢!

可以实现:
1) 创建schema, 插入数据
创建两个tag:person, house
house 上有一个属性:name
创建两个edge: own lease
lease 用于两个属性:starttime(每个空置开始的时间), endtime(每个空置结束的时间)
插入数据

2) 在edge lease上创建索引
CREATE EDGE INDEX index1 ON lease(starttime,endtime );
lookup on lease where lease.starttime < now() - 3 months | fetch prop $-.DstVID yield house.name;

谢谢您的回复,这个数据建模的方式跟我预想的不一样,因为我手上只有租赁开始和结束的时间,如果是把空置时间作为属性值放上去,还要经过我自己的换算,不是很方便。所以理想的建模方式肯定是把租赁开始和结束的时间作为这条边的属性。请问这样建模,还可以实现上面的查询吗?

多谢!

可以搞定啊
请问下“所有 3 个月内空置过的房子“ 是指 到目前为止连续空置3个月,还是3个月内空置过(哪怕一天)也算空置?

谢谢您的试用,关于您的问题,我们需要详细了解一下需求:
1,“所有 3 个月内空置过的房子” 指的是近三个月内还没有租赁出去的房子?还是近三个月内出现过断租的房子?或者前两种都包含?
2,人和房子之间的关系是租赁或拥有(我们暂且称为自住),那么根据租赁的边类型来查询的话,只能查询到有过租赁历史的房子,因为自住的房子是不会有租赁的数据的,这样就会有一个问题,查询结果里是否需要包含自住的房子(也就是没有租赁历史的房子,可能这个房子三个月前已经被挂到中介了,但是一直租不出去,所以这个房子根据上边的模型,不太好被鉴定为“空置”)?

谢谢您的回复!抱歉我之前可能描述不太准确。

  1. 我想找的是所有曾经连续空置过 3 个月的房子,不一定是最近 3 个月
  2. 我想要的查询结果都是只针对租赁这种情况的,不包括自住。

感谢!

最近空置三个月的,目前就能实现。
1) create edge lease 时,设置ttl属性,将endtime(某次租赁的结束时间), 时间间隔为3个月
这样就会将lease 无关的数据以及历史数据都删除

2) CREATE EDGE INDEX index1 ON lease(starttime,endtime );
lookup on lease | fetch prop $-.DstVID yield house.name;

要是不一定是最近 3 个月需要遍历历史数据了
这样目前可能实现不了,你可以提需求,我们进行评估。