Database Reference
In-Depth Information
Seien Sie gewarnt, die Daten enthalten sehr viele Informationen zu Spielfil-
men, von Blockbustern über ausländische Filme bis hin zu, nun ja, Unterhal-
tung für Erwachsene. Die Ruby-Gems
json
und
faraday
müssen installiert
sein, um das Skript auszuführen.
neo4j/importer.rb
REST
_
URL =
'http://localhost:7474/'
HEADER = {
'Content-Type'
=>
'application/json'
}
%w{rubygems json cgi faraday}.each{|r| require r}
# Verbindung mit dem Neo4j REST-Server herstellen
conn = Faraday.new(:url => REST
_
URL)
do
|builder|
builder.adapter :net
_
http
end
# Existierenden Knoten über den Index abrufen oder neuen anlegen
def
get
_
or
_
create
_
node(conn, index, value)
# Knoten im Index nachschlagen
r = conn.get(
"/db/data/index/node/
#{index}
/name/
#{CGI.escape(value)}
"
)
node = (JSON.parse(r.body).first || {})[
'self'
]
if
r.status == 200
unless
node
# Indexierten Knoten nicht gefunden, also neuen anlegen
r = conn.post(
"/db/data/node"
, JSON.unparse({
"name"
=> value}), HEADER)
node = (JSON.parse(r.body) || {})[
'self'
]
if
[200, 201].include? r.status
# Neuen Knoten in den Index einfügen
node
_
data =
"{
\"
uri
\"
:
\"#{node}\"
,
\"
key
\"
:
\"
name
\"
,
\"
value
\"
:
\"#{CGI.escape(value)}\"
}"
conn.post(
"/db/data/index/node/
#{index}
"
, node
_
data, HEADER)
end
node
end
puts
"begin processing..."
count = 0
File.open(ARGV[0]).each
do
|line|
_
,
_
, actor, movie = line.split(
"
\t
"
)
next if
actor.empty? || movie.empty?
# Schauspieler- (actor) und Film-Knoten (movie) anlegen
actor
_
node = get
_
or
_
create
_
node(conn,
'actors'
, actor)
movie
_
node = get
_
or
_
create
_
node(conn,
'movies'
, movie)
# Beziehung zwischen Schauspieler und Film herstellen
conn.post(
"
#{actor
_
node}
/relationships"
,
JSON.unparse({ :to => movie
_
node, :type =>
'ACTED
_
IN'
}), HEADER)
puts
"
#{count}
relationships loaded"
if
(count += 1) % 100 == 0
end
puts
"done!"
Sobald alles vorbereitet ist, führen Sie das Skript aus und übergeben den
Pfad an die heruntergeladene
performance.tsv
-Datei.