导入WordNet 2.0 RDF至Neo4J时遇JAXP00010001实体扩展限制问题
解决WordNet RDF导入Neo4J时的JDK实体扩展限制问题
嘿,这个问题我之前帮人处理过,本质是JDK默认的XML实体扩展安全限制在搞鬼——WordNet的RDF文件里实体引用太多,超过了JDK默认的64000上限,所以才会半路报错,只导入了约5万条记录。给你几个靠谱的解决办法:
方法一:调整JVM启动参数(最省事高效)
直接给Neo4J的JVM加个参数,把实体扩展的上限调高就行:
- 找到Neo4J安装目录下
conf文件夹里的neo4j.conf配置文件 - 在文件中添加或修改以下参数(如果已有
dbms.jvm.additional项,就把这个参数追加进去):
我这里设成100万,完全能覆盖WordNet的实体数量,要是还不够你可以再往上调整数值。dbms.jvm.additional=-DentityExpansionLimit=1000000 - 重启Neo4J服务,然后重新尝试导入操作。
方法二:预处理RDF文件(可选,适合熟悉XML操作的用户)
要是不想修改JVM参数,你可以尝试预处理WordNet的RDF文件,把里面的实体引用替换成实际内容,这样就能减少实体扩展的需求。不过这个方法需要用到XML处理工具(比如XSLT转换),步骤相对繁琐,不如改参数省事,适合有特殊需求的场景。
方法三:切换到Neo4J官方批量导入工具
如果上面的方法都不适用,试试Neo4J官方的neo4j-admin import工具。不过需要先把RDF数据转换成CSV格式,这个工具对大文件的处理效率更高,而且不会触发JDK的实体扩展限制,只是前期需要做格式转换的准备工作。
补充说明:JDK设置这个64000的限制是为了防止XML实体扩展攻击,所以调整数值的时候不用设得过大,够用就好。
内容的提问来源于stack exchange,提问作者Morse
相关产品推荐
相关产品推荐

