解析大文件并填充 Neo4j 数据库
Parse a big file and populate a Neo4j database
我正在 Ruby Rails 项目上工作,该项目将读取和解析较大的文本文件(大约 10 万行)并构建 Neo4j 节点(我正在使用 Neography)有了那个数据。
这是我编写的代码的 Neo4j 相关部分:
d= Neography::Rest.new.execute_query("MATCH (n:`Label`) WHERE (n.`name`='#{id}') RETURN n")
d= Neography::Node.load(d, @neo)
p= Neography::Rest.new.create_node("name" => "#{id}")
Neography::Rest.new.add_label(p, "LabelSample")
d=Neography::Rest.new.get_node(d)
Neography::Rest.new.create_relationship("belongs_to", p, d)
所以,我想做的是:在已经填充的数据库中搜索与解析数据具有相同 "name" 字段的节点,为该数据创建一个新节点,最后创建一个关系他们两人之间。
很明显,这段代码执行起来花费了太多时间。
所以我尝试使用 Neography 的批处理,但我 运行 遇到了一些问题。
p = Neography::Rest.new.batch [:create_node, {"name" => "#{id}"}]
在
中给了我一个"undefined method `split' for nil:NilClass"
id["self"].split('/').last
d=Neography::Rest.new.batch [:get_node, d]
给我 Neography::UnknownBatchOptionException get_node
我什至不确定这是否会节省我足够的时间。
我也尝试了不同的方法来做到这一点,例如使用 Batch Import,但我找不到从数据库中获取我需要的已创建节点的方法。
如您所见,我对此有点陌生,因此我们将不胜感激。
提前致谢。
您也许可以使用纯密码(或新文字生成的密码)来做到这一点。可能是这样的:
MATCH (n:Label) WHERE n.name={id}
WITH n
CREATE (p:LabelSample {name: n.name})-[:belongs_to]->n
并不是说我正在使用 CREATE,但如果您不想创建重复的 LabelSample
节点,您可以这样做:
MATCH (n:Label) WHERE n.name={id}
WITH n
MERGE (p:LabelSample {name: n.name})
CREATE p-[:belongs_to]->n
请注意,我使用的是参数,通常建议使用它来提高性能(虽然这只是一个查询,所以没什么大不了的)
我正在 Ruby Rails 项目上工作,该项目将读取和解析较大的文本文件(大约 10 万行)并构建 Neo4j 节点(我正在使用 Neography)有了那个数据。 这是我编写的代码的 Neo4j 相关部分:
d= Neography::Rest.new.execute_query("MATCH (n:`Label`) WHERE (n.`name`='#{id}') RETURN n")
d= Neography::Node.load(d, @neo)
p= Neography::Rest.new.create_node("name" => "#{id}")
Neography::Rest.new.add_label(p, "LabelSample")
d=Neography::Rest.new.get_node(d)
Neography::Rest.new.create_relationship("belongs_to", p, d)
所以,我想做的是:在已经填充的数据库中搜索与解析数据具有相同 "name" 字段的节点,为该数据创建一个新节点,最后创建一个关系他们两人之间。 很明显,这段代码执行起来花费了太多时间。 所以我尝试使用 Neography 的批处理,但我 运行 遇到了一些问题。
p = Neography::Rest.new.batch [:create_node, {"name" => "#{id}"}]
在
中给了我一个"undefined method `split' for nil:NilClass"id["self"].split('/').last
d=Neography::Rest.new.batch [:get_node, d]
给我 Neography::UnknownBatchOptionException get_node
我什至不确定这是否会节省我足够的时间。
我也尝试了不同的方法来做到这一点,例如使用 Batch Import,但我找不到从数据库中获取我需要的已创建节点的方法。 如您所见,我对此有点陌生,因此我们将不胜感激。 提前致谢。
您也许可以使用纯密码(或新文字生成的密码)来做到这一点。可能是这样的:
MATCH (n:Label) WHERE n.name={id}
WITH n
CREATE (p:LabelSample {name: n.name})-[:belongs_to]->n
并不是说我正在使用 CREATE,但如果您不想创建重复的 LabelSample
节点,您可以这样做:
MATCH (n:Label) WHERE n.name={id}
WITH n
MERGE (p:LabelSample {name: n.name})
CREATE p-[:belongs_to]->n
请注意,我使用的是参数,通常建议使用它来提高性能(虽然这只是一个查询,所以没什么大不了的)