【发布时间】:2016-05-19 00:38:36
【问题描述】:
我正在开展一个项目,该项目旨在建立一个系统来检索生物医学信息(例如,药物、疾病和基因等生物医学实体,以及它们之间的关系)。当我尝试使用 cypher 语句检索数据库以查找特定疾病时:
对于密码字符串MATCH (m:Disease) WHERE m.disease_name =~ '(?i)"+disease+"' RETURN m;
如果疾病名称为2'-benzoyloxycinnamaldehyde 或4-[1-ALLYL-7-(TRIFLUOROMETHYL)-1H-INDAZOL-3-YL]BENZENE-1,3-DIOL,则会出现以下异常消息:
无效输入 '"':应为 0..9、'.'、'e'、'E'、标识符字符、空格、节点标签、'['、"=~"、IN、STARTS、ENDS , 包含, IS, '^', '*', '/', '%', '+', '-', '=', "", "!=", '' , "=", AND, XOR, OR, LOAD CSV, START, MATCH, UNWIND, MERGE, CREATE, SET, DELETE, REMOVE, FOREACH, WITH, Return, UNION, ';'或输入结束(第 1 行,第 53 列(偏移量:52)) "MATCH (n1:Drug)-[x]-(n2:Disease) RETURN n1 LIMIT 25""
我该如何解决这个问题?非常感谢!
【问题讨论】:
-
我建议使用参数 MATCH (m:Disease) WHERE m.disease_name =~ {diseaseName} RETURN m $params['diseaseName'] = '(?i)'.$diseaseName;然后将此参数传递给密码查询,因为如果我们使用参数,那么密码解析器将看不到它们
-
这只是一种预感:您也可以尝试在密码查询中用 tostring(disease) 替换 disease
-
似乎你在查询中有一个奇怪的引用......顺便说一下,如果“疾病”变量可能来自不受信任的来源。它还可以提高查询性能。 neo4j.com/docs/stable/cypher-parameters.html
-
非常感谢大家!