cypher语句优化
发布于 6 年前 作者 c814516149 4401 次浏览 来自 问答

每种疾病包含几种症状,我想通过症状查和它相关联的疾病的其他症状,我下面的语句似乎不太对,请问有没有优化的方式或其他的语句? match (n:symptom),(m:disease),(p:symptom) where n.symId=17695 and (n) <-[:contain]-(m)-[:contain]->§ return p.symId,p.symName 这条语句执行速度很慢,大约要半分钟才出结果,而且结果不太合理 同一条数据会有重复返回,求教问题出在哪里或者该采用什么方式呢?

6 回复

针对自己的业务,这样修改了语句,自测效果还挺好的。 match(n:symptom),(p:symptom) , q = shortestPath((n)-[*…2]-§) where n.symId = {symptomid} and p.symId <> {symptomid} return p.symId,p.symName

你之前的(n) <-[:contain]-(m)-[:contain]->§ 消耗大,如果库里数据量大,这个很费时间。 用 shortestPath 方法会用 类似 迪杰斯特拉算法那样查找,是跟数据量无关的

今天给各个节点的id属性建了索引,查询速度都提升了100多倍,原来都要1000多ms,现在只要12ms就可以了,节点数越多,索引就越有必要了,希望对和我一样的新手有帮助。

请问cypher有类似sparql查询的如下功能吗:只知道属性值,但是不知道该属性值对应的属性,也能查,如"SELECT ?x WHERE { ?x ?y ‘诸葛亮’ }" 而不是像这样需要指定name属性:MATCH (p1 {name: “诸葛亮”}) RETURN p1 或者 MATCH (p1) WHERE P1.name=“诸葛亮” RETURN p1;

@lily_jian 你好,你的这个问题解决了吗,我刚好卡在了这个问题,能分享一下吗?

@liutianling MATCH (a) WHERE Any(k IN keys(a) where any(nn in a[k] where nn =~’(?i).1234.’)) RETURN a limit 100 感觉这像是你想要的

回到顶部