【问题标题】:Neo4j: invalid input in cypherNeo4j:密码中的无效输入
【发布时间】:2016-05-19 00:38:36
【问题描述】:

我正在开展一个项目,该项目旨在建立一个系统来检索生物医学信息(例如,药物、疾病和基因等生物医学实体,以及它们之间的关系)。当我尝试使用 cypher 语句检索数据库以查找特定疾病时:

对于密码字符串MATCH (m:Disease) WHERE m.disease_name =~ '(?i)"+disease+"' RETURN m;

如果疾病名称为2'-benzoyloxycinnamaldehyde4-[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
  • 非常感谢大家!

标签: neo4j cypher


【解决方案1】:

您实际上有 2 个不同的查询,它们有不同的问题:

  1. 第一个查询是由这个语句生成的:

    "MATCH (m:Disease) WHERE m.disease_name =~ '(?i)"+disease+"' RETURN m";
    

    由于您使用单引号作为正则表达式字符串分隔符,如果disease 值包含单引号,那么这将过早结束正则表达式。您有多种选择,按质量不断提高:

    • 转义(使用前面的反斜杠)disease 中的所有单引号字符。
    • 使用双引号作为正则表达式字符串分隔符(也需要转义字符,但 disease 不需要更改)。我假设disease(实际上似乎是一个化学名称)永远不会包含双引号:

      "MATCH (m:Disease) WHERE m.disease_name =~ \"(?i)" + disease + "\"RETURN m";
      
    • disease 值作为parameter 传递。不需要转义,如果您需要多次进行基本相同的查询,查询会更快。但是,传入的参数值必须以“(?i)”开头。

      "MATCH (m:Disease) WHERE m.disease_name =~ {disease} RETURN m";

  2. 您的第二个查询有一个简单的错字。它的末尾有一个额外的双引号:

    "MATCH (n1:Drug)-[x]-(n2:Disease) RETURN n1 LIMIT 25""
    

    应该是:

    "MATCH (n1:Drug)-[x]-(n2:Disease) RETURN n1 LIMIT 25"
    

【讨论】:

  • 感谢大家的cmets!他们对我很有帮助!
  • 不客气。请记住Accept 最能帮助您解决其中一个问题的答案。
猜你喜欢
  • 2012-04-23
  • 2019-09-26
  • 1970-01-01
  • 2018-12-21
  • 2017-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多