From 1174a0596e5ec725ef4e8d5e60684a9d36adbac0 Mon Sep 17 00:00:00 2001 From: simon Date: Sat, 25 May 2019 08:46:19 -0400 Subject: [PATCH] Graph db endpoints tweaks --- .../simon987/musicgraph/entities/Release.java | 15 +++++++++++++- .../net/simon987/musicgraph/entities/Tag.java | 6 ++++-- .../simon987/musicgraph/io/MusicDatabase.java | 20 +++++++++++-------- .../musicgraph/webapi/ArtistController.java | 1 + 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/main/java/net/simon987/musicgraph/entities/Release.java b/src/main/java/net/simon987/musicgraph/entities/Release.java index e5d4d17..e8ac7f3 100644 --- a/src/main/java/net/simon987/musicgraph/entities/Release.java +++ b/src/main/java/net/simon987/musicgraph/entities/Release.java @@ -1,14 +1,27 @@ package net.simon987.musicgraph.entities; +import java.util.List; + public class Release { public String mbid; + public List labels; public String name; public long year; + public long id; - public Release(String mbid, String name, long year) { + public Release(List labels, String mbid, String name, long year) { + this.labels = labels; this.mbid = mbid; this.name = name; this.year = year; } + + public Release(List labels, String mbid, String name, long year, long id) { + this.labels = labels; + this.mbid = mbid; + this.name = name; + this.year = year; + this.id = id; + } } diff --git a/src/main/java/net/simon987/musicgraph/entities/Tag.java b/src/main/java/net/simon987/musicgraph/entities/Tag.java index 2d4be31..bfa4d42 100644 --- a/src/main/java/net/simon987/musicgraph/entities/Tag.java +++ b/src/main/java/net/simon987/musicgraph/entities/Tag.java @@ -2,10 +2,12 @@ package net.simon987.musicgraph.entities; public class Tag { public String name; - public long weight; + public double weight; + public long id; - public Tag(String name, long weight) { + public Tag(long id, String name, double weight) { + this.id = id; this.name = name; this.weight = weight; } diff --git a/src/main/java/net/simon987/musicgraph/io/MusicDatabase.java b/src/main/java/net/simon987/musicgraph/io/MusicDatabase.java index a760f9a..ffeb3d9 100644 --- a/src/main/java/net/simon987/musicgraph/io/MusicDatabase.java +++ b/src/main/java/net/simon987/musicgraph/io/MusicDatabase.java @@ -53,8 +53,8 @@ public class MusicDatabase extends AbstractBinder { params.put("mbid", mbid); StatementResult result = query(session, - "MATCH (a:Artist)-[r]-(b)\n" + - "WHERE a.id = $mbid AND NOT type(r) = \"IS_RELATED_TO\"\n" + + "MATCH (a:Artist)-[r:IS_MEMBER_OF]-(b:Artist) " + + "WHERE a.id = $mbid " + "RETURN a as artist, a {rels: collect(DISTINCT r), nodes: collect(DISTINCT b)} as rank1\n" + "LIMIT 1", params); @@ -79,9 +79,9 @@ public class MusicDatabase extends AbstractBinder { StatementResult result = query(session, "MATCH (a:Artist {id: $mbid})-[:CREDITED_FOR]->(r:Release)\n" + - "WITH collect({id:r.id, name:r.name, year:r.year}) as releases, a\n" + + "WITH collect({id: ID(r), mbid:r.id, name:r.name, year:r.year, labels:labels(r)}) as releases, a\n" + "OPTIONAL MATCH (a)-[r:IS_TAGGED]->(t:Tag)\n" + - "RETURN a {name:a.name, releases:releases, tags:collect({weight: r.weight, name: t.name})}\n" + + "RETURN a {name:a.name, releases:releases, tags:collect({weight: r.weight, name: t.name, id:ID(t)})}\n" + "LIMIT 1", params); @@ -97,9 +97,11 @@ public class MusicDatabase extends AbstractBinder { ((List) map.get("releases")) .stream() .map(x -> new Release( - (String) x.get("id"), + (List) x.get("labels"), + (String) x.get("mbid"), (String) x.get("name"), - (Long) x.get("year") + (Long) x.get("year"), + (Long) x.get("id") )).collect(Collectors.toList()) ); @@ -108,8 +110,9 @@ public class MusicDatabase extends AbstractBinder { .stream() .filter(x -> x.get("name") != null) .map(x -> new Tag( + (Long) x.get("id"), (String) x.get("name"), - (Long) x.get("weight") + (Double) x.get("weight") )) .collect(Collectors.toList()) ); @@ -239,7 +242,7 @@ public class MusicDatabase extends AbstractBinder { "MATCH (release:Release {id: $mbid})-[:CREDITED_FOR]-(a:Artist)\n" + "OPTIONAL MATCH (release)-[r:IS_TAGGED]->(t:Tag)\n" + "RETURN release {name:release.name, year:release.year," + - "tags:collect({weight:r.weight, name:t.name}), artist: a.name}\n" + + "tags:collect({weight:r.weight, name:t.name, id:ID(t)}), artist: a.name}\n" + "LIMIT 1", params); @@ -259,6 +262,7 @@ public class MusicDatabase extends AbstractBinder { .stream() .filter(x -> x.get("name") != null) .map(x -> new Tag( + (Long) x.get("id"), (String) x.get("name"), (Long) x.get("weight") )) diff --git a/src/main/java/net/simon987/musicgraph/webapi/ArtistController.java b/src/main/java/net/simon987/musicgraph/webapi/ArtistController.java index 9f1aa8a..64428be 100644 --- a/src/main/java/net/simon987/musicgraph/webapi/ArtistController.java +++ b/src/main/java/net/simon987/musicgraph/webapi/ArtistController.java @@ -44,6 +44,7 @@ public class ArtistController { @Produces(MediaType.APPLICATION_JSON) public SearchResult getRelatedByName(@PathParam("name") String name) { + name = name.replace('+', ' '); logger.info(String.format("Related for %s", name)); return db.getRelatedByName(name); }