cypher优化-20240418

nebula版本:nebula3.4
机器配置:32core. 128g. 三个节点,每个节点2块SSD

原有查询语句:

MATCH (n)-[:APPLY_FOR]->(a2:APPL)-[:APPLY_ON]->(t2:`TIME`)
WHERE id(n) in [36472820] and t2.`TIME`.`date` < date('2022-03-19')
WITH collect(distinct case when a2 is not null then id(n) else null end) as col_appl_2nd_dr_v4
     return col_appl_2nd_dr_v4

现在我们更改的原始数据,删除了TIME点,然后将TIME点上的属性date放到了APPL节点,
则cypher改为

MATCH (n)-[:APPLY_FOR]->(a2:APPL)
WHERE id(n) in [36472820] where a2.APPL.`date` < date('2022-03-19')
WITH collect(distinct case when a2 is not null then id(n) else null end) as col_appl_2nd_dr_v4
     return col_appl_2nd_dr_v4

主要是我们的APPLY_ON是指向TIME节点的,我们将申请时间直接放在了APPL电上面,通过上面修改后语句筛选,请问这样查询,为什么查出来是空的呢,只是将TIME上的date属性放到了APPL上去了

所以,这里的 APPL 点类型是变更过 schema 么?变更的话,有创建新的 APPL 点类型索引么?

嗯嗯 我检查了 索引都创建成功了,我现在跑一条很简单的语句 都跑不出来,match(m:APPL) where m.APPL.date== date(‘2023-03-19’) return m limit 10。如果我把where条件去掉 就可以跑出来,nebula的节点上的属性where,我这个写的没问题吧?

我们等于是重构了 重新建了schema 重新倒入了数据,等于想重新建模,测试下

我直接这样查询没有这条记录

date 类型貌似得用 ",不能用单引号,你换下符号试试可以不。

应该不是这个问题,我现在把语句换了,根据这个id来查询,一样查不出来,数据是有的

APPL 创建过索引对吧,索引也 rebuild index 过对吧。你用的是我们企业版的话,你去找我们实施同学看看 。

这个应该不用索引

这个是需要索引的

profile 贴下

已经解决了

重新在命令行rebuild index了一次 就可以了

1 个赞