Neo4j通过apoc.load.xml创建的节点无法按属性值查询
问题原因及排查方案
- 最常见的原因是
apoc.load.xml读取的属性值带不可见字符或首尾空白。XML标签内的换行、制表符、首尾空格都会被保留到属性中,你在可视化界面看到的element1实际存储值可能是带空格、换行的内容,精确匹配时无法命中。
可执行以下查询验证:
确认后导入时对属性做清洗即可:MATCH(n:Element) RETURN n.name, trim(n.name), length(n.name) LIMIT 10merge(e:Element{name:trim(NAME), guid:trim(GUID)}) - 属性名大小写不匹配。Neo4j属性名大小写敏感,若导入时使用的属性名是
Name/NAME,查询时用n.name会无法匹配,可执行以下查询确认实际属性名:MATCH(n:Element) RETURN keys(n) LIMIT 5 - 属性值数据类型错误。如果导入时
NAME变量不是字符串类型,而是XML节点对象、数字等其他类型,用字符串"element1"匹配会返回空,可执行以下查询确认类型:MATCH(n:Element) RETURN n.name, apoc.meta.type(n.name) LIMIT 5 - 全半角/编码不匹配。如果属性值中的数字、字母是全角格式,或者存在编码兼容问题,也会导致匹配失败,可先用模糊查询验证:
MATCH(n:Element) WHERE n.name CONTAINS "element" RETURN n.name LIMIT 10
内容的提问来源于stack exchange,提问作者RR_514
相关产品推荐
相关产品推荐

