[mb-commits] r13710 - in search_server/trunk: index/src/main/java/org/musicbrainz/search/index index/src/test/java/org/musicbrainz/search/index servlet/src/main/java/org/musicbrainz/search/servlet/mmd2 servlet/src/test/java/org/musicbrainz/search/servlet
[email protected] Wed, 02 Oct 2013 10:30:14 +0000
| Newsgroups | gmane.comp.audio.musicbrainz.cvs |
|---|---|
| Message-ID | <E1VRJh8-0001zs-7o@wiley> |
Author: ijabz
Date: 2013-10-02 10:29:56 +0000 (Wed, 02 Oct 2013)
New Revision: 13710
Modified:
search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ArtistCreditHelper.java
search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ArtistIndex.java
search_server/trunk/index/src/main/java/org/musicbrainz/search/index/CommonTables.java
search_server/trunk/index/src/main/java/org/musicbrainz/search/index/RecordingIndex.java
search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseGroupIndex.java
search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseIndex.java
search_server/trunk/index/src/test/java/org/musicbrainz/search/index/RecordingIndexTest.java
search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ReleaseGroupIndexTest.java
search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ReleaseIndexTest.java
search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseGroupWriter.java
search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindReleaseGroupTest.java
Log:
SEARCH-321:Recording, release and release-group search results incomplete artist aliases
Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ArtistCreditHelper.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ArtistCreditHelper.java 2013-09-30 13:43:50 UTC (rev 13709)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ArtistCreditHelper.java 2013-10-02 10:29:56 UTC (rev 13710)
@@ -19,12 +19,16 @@
package org.musicbrainz.search.index;
+import com.google.common.base.Strings;
import org.musicbrainz.mmd2.*;
import org.musicbrainz.search.MbDocument;
+import java.io.IOException;
+import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
@@ -72,19 +76,17 @@
* @param rs
* @param entityKey
* @param artistCreditId
- *@param aliasName @return
* @throws SQLException
*/
public static Map<Integer, ArtistCreditWrapper> completeArtistCreditFromDbResults(ResultSet rs,
- String entityKey,
- String artistCreditId,
- String artistId,
- String artistName,
- String artistSortName,
- String comment,
- String joinPhrase,
- String artistCreditName,
- String aliasName) throws SQLException {
+ String entityKey,
+ String artistCreditId,
+ String artistId,
+ String artistName,
+ String artistSortName,
+ String comment,
+ String joinPhrase,
+ String artistCreditName) throws SQLException {
Map<Integer, ArtistCreditWrapper> artistCredits = new HashMap<Integer, ArtistCreditWrapper>();
ObjectFactory of = new ObjectFactory();
ArtistCreditWrapper acw;
@@ -112,15 +114,6 @@
artist.setDisambiguation(disamb);
}
- String engAlias = rs.getString(aliasName);
- if(engAlias!=null && engAlias.length()>0)
- {
- Alias alias =of.createAlias();
- alias.setContent(engAlias);
- AliasList al =of.createAliasList();
- al.getAlias().add(alias);
- artist.setAliasList(al);
- }
nc.setArtist(artist);
String jp=rs.getString(joinPhrase);
if(jp!=null && !jp.isEmpty()) {
@@ -136,6 +129,74 @@
}
/**
+ * Add aliases for the artist credits from the database
+ *
+ * @param artistCredits
+ * @param entityKey
+ * @param rs
+ * @return
+ * @throws SQLException
+ * @throws IOException
+ */
+ public static Map<Integer, ArtistCreditWrapper> updateArtistCreditWithAliases(
+ Map<Integer, ArtistCreditWrapper> artistCredits,
+ String entityKey,
+ ResultSet rs)
+ throws SQLException, IOException {
+
+ ObjectFactory of = new ObjectFactory();
+
+ int entityId = -1;
+ int position = -1;
+ NameCredit nc = null;
+ while (rs.next()) {
+ int currEntityId = rs.getInt(entityKey);
+ int currPosition = rs.getInt("pos");
+ if(currEntityId!=entityId || currPosition!=position)
+ {
+ ArtistCreditWrapper acw = artistCredits.get(currEntityId);
+ nc = acw.getArtistCredit().getNameCredit().get(currPosition);
+ entityId = currEntityId;
+ position = currPosition;
+ }
+
+ if(nc.getArtist().getAliasList()==null)
+ {
+ nc.getArtist().setAliasList(of.createAliasList());
+ }
+ List<Alias> aliasList = nc.getArtist().getAliasList().getAlias();
+ Alias alias = of.createAlias();
+ alias.setContent(rs.getString("name"));
+ alias.setSortName(rs.getString("sort_name"));
+ boolean isPrimary = rs.getBoolean("primary_for_locale");
+ if(isPrimary) {
+ alias.setPrimary("primary");
+ }
+ String locale = rs.getString("locale");
+ if(locale!=null) {
+ alias.setLocale(locale);
+ }
+ String type = rs.getString("type");
+ if(type!=null) {
+ alias.setType(type);
+ }
+
+ String begin = Utils.formatDate(rs.getInt("begin_date_year"), rs.getInt("begin_date_month"), rs.getInt("begin_date_day"));
+ if(!Strings.isNullOrEmpty(begin)) {
+ alias.setBeginDate(begin);
+ }
+
+ String end = Utils.formatDate(rs.getInt("end_date_year"), rs.getInt("end_date_month"), rs.getInt("end_date_day"));
+ if(!Strings.isNullOrEmpty(end)) {
+ alias.setEndDate(end);
+ }
+ aliasList.add(alias);
+ }
+ rs.close();
+ return artistCredits;
+ }
+
+ /**
* Populate all artist credit fields from Lucene index fields from ArtistCredit instance
*
* @param doc
@@ -177,9 +238,16 @@
//If there is an english locale based alias we add this to help when looking up releases
//by artists who name is in non-latin script
- if(nc.getArtist().getAliasList()!=null)
+ if(nc.getArtist().getAliasList()!=null && nc.getArtist().getAliasList().getAlias().size()>0)
{
- doc.addField(artistName,(String)nc.getArtist().getAliasList().getAlias().get(0).getContent());
+ for(Alias alias:nc.getArtist().getAliasList().getAlias())
+ {
+ if(alias.getLocale()!=null && alias.getLocale().equals("en"))
+ {
+ doc.addField(artistName,nc.getArtist().getAliasList().getAlias().get(0).getContent());
+ break;
+ }
+ }
}
}
@@ -219,11 +287,20 @@
//If there is an english locale based alias we add this to help when looking up releases
//by artists who name is in non-latin script
- if(nc.getArtist().getAliasList()!=null)
+ if(nc.getArtist().getAliasList()!=null && nc.getArtist().getAliasList().getAlias().size()>0)
{
- doc.addField(artistName,(String)nc.getArtist().getAliasList().getAlias().get(0).getContent());
+ for(Alias alias:nc.getArtist().getAliasList().getAlias())
+ {
+ if(alias.getLocale()!=null && alias.getLocale().equals("en"))
+ {
+ doc.addField(artistName, nc.getArtist().getAliasList().getAlias().get(0).getContent());
+ break;
+ }
+ }
}
}
}
}
+
+
}
Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ArtistIndex.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ArtistIndex.java 2013-09-30 13:43:50 UTC (rev 13709)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ArtistIndex.java 2013-10-02 10:29:56 UTC (rev 13710)
@@ -42,8 +42,11 @@
public static final String INDEX_NAME = "artist";
- //Special purpose Artist
- private static final String DELETED_ARTIST_MBID = "c06aa285-520e-40c0-b776-83d2c9e8a6d1";
+ //Special purpose Artists
+ public static final String DELETED_ARTIST_MBID = "c06aa285-520e-40c0-b776-83d2c9e8a6d1";
+ public static final String VARIOUS_ARTIST_MBID = "89ad4ac3-39f7-470e-963a-56509c546377";
+ public static final String UNKNOWN_ARTIST_MBID = "125ec42a-7229-4250-afc5-e057484327fe";
+
private static final String PERSON = "Person";
private CharsetEncoder latinEncoder;
Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/CommonTables.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/CommonTables.java 2013-09-30 13:43:50 UTC (rev 13709)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/CommonTables.java 2013-10-02 10:29:56 UTC (rev 13710)
@@ -54,7 +54,7 @@
/**
* Create table showing all artist credits, then create index
- * for the table.
+ * for the table, a merge of required artist credit_name & artist information
*
* @throws SQLException
*/
@@ -68,19 +68,14 @@
"SELECT acn.artist_credit as artist_credit, " +
" acn.position as pos, " +
" acn.join_phrase as joinphrase, " +
+ " a.id," +
" a.gid as artistId, " +
" a.comment as comment, " +
" a.name as artistName, " +
" acn.name as artistCreditName, " +
- " a.sort_name as artistSortName, " +
- " aa1.aliasName " +
+ " a.sort_name as artistSortName " +
" FROM artist_credit_name acn " +
" INNER JOIN artist a ON a.id=acn.artist " +
- " LEFT JOIN ( SELECT aa.artist, MAX(aa.name) AS aliasName FROM" +
- " artist_alias aa " +
- " WHERE aa.locale='" + ENGLISH_ISO_CODE + "'" +
- " GROUP BY aa.artist) AS aa1" +
- " ON a.id=aa1.artist " +
" ORDER BY acn.artist_credit,acn.position ");
clock.stop();
System.out.println("tmp_artistcredit:Finished:"+ Utils.formatClock(clock));
Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/RecordingIndex.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/RecordingIndex.java 2013-09-30 13:43:50 UTC (rev 13709)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/RecordingIndex.java 2013-10-02 10:29:56 UTC (rev 13710)
@@ -154,13 +154,37 @@
" a.comment, " +
" a.artistName, " +
" a.artistCreditName, " +
- " a.artistSortName, " +
- " a.aliasName " +
+ " a.artistSortName " +
" FROM recording AS r " +
" INNER JOIN tmp_artistcredit a ON r.artist_credit=a.artist_credit " +
" WHERE r.id BETWEEN ? AND ? " +
" ORDER BY r.id, a.pos");
+ addPreparedStatement("ARTISTCREDITALIASES",
+ "SELECT r.id as recordingId," +
+ " a.artist_credit, " +
+ " a.pos, " +
+ " aa.name," +
+ " aa.sort_name," +
+ " aa.primary_for_locale," +
+ " aa.locale," +
+ " aa.begin_date_year," +
+ " aa.begin_date_month," +
+ " aa.begin_date_day," +
+ " aa.end_date_year," +
+ " aa.end_date_month," +
+ " aa.end_date_day," +
+ " att.name as type" +
+ " FROM recording AS r " +
+ " INNER JOIN tmp_artistcredit a ON r.artist_credit=a.artist_credit " +
+ " INNER JOIN artist_alias aa ON a.id=aa.artist" +
+ " LEFT JOIN artist_alias_type att on (aa.type=att.id)" +
+ " WHERE r.id BETWEEN ? AND ? " +
+ " AND a.artistId!='" + ArtistIndex.VARIOUS_ARTIST_MBID +"'" +
+ " AND a.artistId!='" + ArtistIndex.UNKNOWN_ARTIST_MBID +"'" +
+ " ORDER BY r.id, a.pos, aa.name");
+
+
addPreparedStatement("TRACKARTISTCREDITS",
"SELECT t.id as id, " +
" a.artist_credit, " +
@@ -170,13 +194,35 @@
" a.comment, " +
" a.artistName, " +
" a.artistCreditName, " +
- " a.artistSortName, " +
- " a.aliasName " +
+ " a.artistSortName " +
" FROM track AS t " +
" INNER JOIN tmp_artistcredit a ON t.artist_credit=a.artist_credit " +
" WHERE t.recording BETWEEN ? AND ? " +
" ORDER BY t.recording, a.pos");
+ addPreparedStatement("TRACKARTISTCREDITALIASES",
+ "SELECT r.id as recordingId," +
+ " a.artist_credit, " +
+ " a.pos, " +
+ " aa.name," +
+ " aa.sort_name," +
+ " aa.primary_for_locale," +
+ " aa.locale," +
+ " aa.begin_date_year," +
+ " aa.begin_date_month," +
+ " aa.begin_date_day," +
+ " aa.end_date_year," +
+ " aa.end_date_month," +
+ " aa.end_date_day," +
+ " att.name as type" +
+ " FROM track AS r " +
+ " INNER JOIN tmp_artistcredit a ON r.artist_credit=a.artist_credit " +
+ " INNER JOIN artist_alias aa ON a.id=aa.artist" +
+ " LEFT JOIN artist_alias_type att on (aa.type=att.id)" +
+ " WHERE r.recording BETWEEN ? AND ? " +
+ " AND a.artistId!='" + ArtistIndex.VARIOUS_ARTIST_MBID +"'" +
+ " AND a.artistId!='" + ArtistIndex.UNKNOWN_ARTIST_MBID +"'" +
+ " ORDER BY r.id, a.pos, aa.name");
releases =
"SELECT " +
" id as releaseKey, gid as releaseid, name as releasename, type, " +
@@ -301,13 +347,41 @@
"artistSortName",
"comment",
"joinphrase",
- "artistCreditName",
- "aliasName");
+ "artistCreditName"
+ );
rs.close();
artistClock.suspend();
return artistCredits;
}
+ private Map<Integer, ArtistCreditWrapper> updateArtistCreditWithAliases(
+ Map<Integer, ArtistCreditWrapper> artistCredits,
+ int min,
+ int max)
+ throws SQLException, IOException {
+
+ //Artist Credit Aliases
+ PreparedStatement st = getPreparedStatement("ARTISTCREDITALIASES");
+ st.setInt(1, min);
+ st.setInt(2, max);
+ ResultSet rs = st.executeQuery();
+ return ArtistCreditHelper.updateArtistCreditWithAliases(artistCredits,"recordingId", rs);
+ }
+
+ private Map<Integer, ArtistCreditWrapper> updateTrackArtistCreditWithAliases(
+ Map<Integer, ArtistCreditWrapper> artistCredits,
+ int min,
+ int max)
+ throws SQLException, IOException {
+
+ //Artist Credit Aliases
+ PreparedStatement st = getPreparedStatement("TRACKARTISTCREDITALIASES");
+ st.setInt(1, min);
+ st.setInt(2, max);
+ ResultSet rs = st.executeQuery();
+ return ArtistCreditHelper.updateArtistCreditWithAliases(artistCredits,"recordingId", rs);
+ }
+
/**
* Get Track Artist Credit
*
@@ -335,8 +409,8 @@
"artistSortName",
"comment",
"joinphrase",
- "artistCreditName",
- "aliasName");
+ "artistCreditName"
+ );
rs.close();
trackArtistClock.suspend();
return artistCredits;
@@ -587,12 +661,12 @@
public void indexData(IndexWriter indexWriter, int min, int max) throws SQLException, IOException {
- Map<Integer, List<Tag>> tags = loadTags(min, max);
- Map<Integer, List<String>> isrcs = loadISRCs(min, max);
- Map<Integer, ArtistCreditWrapper> artistCredits = loadArtists(min, max);
- Map<Integer, ArtistCreditWrapper> trackArtistCredits = loadTrackArtists(min, max);
- Map<Integer, List<TrackWrapper>> tracks = loadTracks(min, max);
- Map<Integer, Release> releases = loadReleases(tracks);
+ Map<Integer, List<Tag>> tags = loadTags(min, max);
+ Map<Integer, List<String>> isrcs = loadISRCs(min, max);
+ Map<Integer, ArtistCreditWrapper> artistCredits = updateArtistCreditWithAliases(loadArtists(min, max), min, max);
+ Map<Integer, ArtistCreditWrapper> trackArtistCredits = updateTrackArtistCreditWithAliases(loadTrackArtists(min, max), min, max);
+ Map<Integer, List<TrackWrapper>> tracks = loadTracks(min, max);
+ Map<Integer, Release> releases = loadReleases(tracks);
PreparedStatement st = getPreparedStatement("RECORDINGS");
st.setInt(1, min);
Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseGroupIndex.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseGroupIndex.java 2013-09-30 13:43:50 UTC (rev 13709)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseGroupIndex.java 2013-10-02 10:29:56 UTC (rev 13710)
@@ -32,7 +32,7 @@
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.search.similarities.Similarity;
-import org.musicbrainz.mmd2.Tag;
+import org.musicbrainz.mmd2.*;
import org.musicbrainz.search.MbDocument;
import org.musicbrainz.search.analysis.ReleaseGroupSimilarity;
@@ -113,13 +113,36 @@
" a.comment, " +
" a.artistName, " +
" a.artistCreditName, " +
- " a.artistSortName, " +
- " a.aliasName " +
+ " a.artistSortName " +
" FROM release_group AS r " +
" INNER JOIN tmp_artistcredit a ON r.artist_credit=a.artist_credit " +
" WHERE r.id BETWEEN ? AND ? " +
" ORDER BY r.id, a.pos");
+ addPreparedStatement("ARTISTCREDITALIASES",
+ "SELECT r.id as releaseGroupId," +
+ " a.artist_credit, " +
+ " a.pos, " +
+ " aa.name," +
+ " aa.sort_name," +
+ " aa.primary_for_locale," +
+ " aa.locale," +
+ " aa.begin_date_year," +
+ " aa.begin_date_month," +
+ " aa.begin_date_day," +
+ " aa.end_date_year," +
+ " aa.end_date_month," +
+ " aa.end_date_day," +
+ " att.name as type" +
+ " FROM release_group AS r " +
+ " INNER JOIN tmp_artistcredit a ON r.artist_credit=a.artist_credit " +
+ " INNER JOIN artist_alias aa ON a.id=aa.artist" +
+ " LEFT JOIN artist_alias_type att on (aa.type=att.id)" +
+ " WHERE r.id BETWEEN ? AND ? " +
+ " AND a.artistId!='" + ArtistIndex.VARIOUS_ARTIST_MBID +"'" +
+ " AND a.artistId!='" + ArtistIndex.UNKNOWN_ARTIST_MBID +"'" +
+ " ORDER BY r.id, a.pos, aa.name");
+
addPreparedStatement("SECONDARYTYPES",
"SELECT rg.name as type, rgj.release_group as release_group " +
" FROM release_group_secondary_type_join rgj " +
@@ -138,10 +161,10 @@
public void indexData(IndexWriter indexWriter, int min, int max) throws SQLException, IOException {
- Map<Integer, List<Tag>> tags = loadTags(min, max);
- Map<Integer, List<ReleaseWrapper>> releases = loadReleases(min, max);
- Map<Integer, ArtistCreditWrapper> artistCredits = loadArtistCredits(min, max);
- Map<Integer, List<String>> secondaryTypes = loadSecondaryTypes(min, max);
+ Map<Integer, List<Tag>> tags = loadTags(min, max);
+ Map<Integer, List<ReleaseWrapper>> releases = loadReleases(min, max);
+ Map<Integer, ArtistCreditWrapper> artistCredits = updateArtistCreditWithAliases(loadArtistCredits(min, max),min, max);
+ Map<Integer, List<String>> secondaryTypes = loadSecondaryTypes(min, max);
//ReleaseGroups
PreparedStatement st = getPreparedStatement("RELEASEGROUPS");
st.setInt(1, min);
@@ -239,12 +262,26 @@
"artistSortName",
"comment",
"joinphrase",
- "artistCreditName",
- "aliasName");
+ "artistCreditName"
+ );
rs.close();
return artistCredits;
}
+ private Map<Integer, ArtistCreditWrapper> updateArtistCreditWithAliases(
+ Map<Integer, ArtistCreditWrapper> artistCredits,
+ int min,
+ int max)
+ throws SQLException, IOException {
+
+ //Artist Credit Aliases
+ PreparedStatement st = getPreparedStatement("ARTISTCREDITALIASES");
+ st.setInt(1, min);
+ st.setInt(2, max);
+ ResultSet rs = st.executeQuery();
+ return ArtistCreditHelper.updateArtistCreditWithAliases(artistCredits,"releaseGroupId", rs);
+ }
+
/**
* Load work iswcs
*
Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseIndex.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseIndex.java 2013-09-30 13:43:50 UTC (rev 13709)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseIndex.java 2013-10-02 10:29:56 UTC (rev 13710)
@@ -131,13 +131,36 @@
" a.comment, " +
" a.artistName, " +
" a.artistCreditName, " +
- " a.artistSortName, " +
- " a.aliasName " +
+ " a.artistSortName " +
" FROM release AS r " +
" INNER JOIN tmp_artistcredit a ON r.artist_credit=a.artist_credit " +
" WHERE r.id BETWEEN ? AND ? " +
" ORDER BY r.id, a.pos");
+ addPreparedStatement("ARTISTCREDITALIASES",
+ "SELECT r.id as releaseId," +
+ " a.artist_credit, " +
+ " a.pos, " +
+ " aa.name," +
+ " aa.sort_name," +
+ " aa.primary_for_locale," +
+ " aa.locale," +
+ " aa.begin_date_year," +
+ " aa.begin_date_month," +
+ " aa.begin_date_day," +
+ " aa.end_date_year," +
+ " aa.end_date_month," +
+ " aa.end_date_day," +
+ " att.name as type" +
+ " FROM release AS r " +
+ " INNER JOIN tmp_artistcredit a ON r.artist_credit=a.artist_credit " +
+ " INNER JOIN artist_alias aa ON a.id=aa.artist" +
+ " LEFT JOIN artist_alias_type att on (aa.type=att.id)" +
+ " WHERE r.id BETWEEN ? AND ? " +
+ " AND a.artistId!='" + ArtistIndex.VARIOUS_ARTIST_MBID +"'" +
+ " AND a.artistId!='" + ArtistIndex.UNKNOWN_ARTIST_MBID +"'" +
+ " ORDER BY r.id, a.pos, aa.name");
+
addPreparedStatement("SECONDARYTYPES",
"SELECT rg.name as type, r.id as rid" +
" FROM tmp_release r " +
@@ -317,23 +340,7 @@
//Artist Credits
artistClock.resume();
- st = getPreparedStatement("ARTISTCREDITS");
- st.setInt(1, min);
- st.setInt(2, max);
- rs = st.executeQuery();
- Map<Integer, ArtistCreditWrapper> artistCredits
- = ArtistCreditHelper.completeArtistCreditFromDbResults
- (rs,
- "releaseId",
- "artist_Credit",
- "artistId",
- "artistName",
- "artistSortName",
- "comment",
- "joinphrase",
- "artistCreditName",
- "aliasName");
- rs.close();
+ Map<Integer, ArtistCreditWrapper> artistCredits = updateArtistCreditWithAliases(loadArtistCredits(min, max),min, max);
artistClock.suspend();
Map<Integer, List<String>> secondaryTypes = loadSecondaryTypes(min, max);
@@ -349,6 +356,53 @@
rs.close();
}
+ /**
+ * Load Artist Credits
+ *
+ * @param min
+ * @param max
+ * @return
+ * @throws SQLException
+ * @throws IOException
+ */
+ private Map<Integer, ArtistCreditWrapper> loadArtistCredits(int min, int max) throws SQLException, IOException {
+
+ //Artist Credits
+ PreparedStatement st = getPreparedStatement("ARTISTCREDITS");
+ st.setInt(1, min);
+ st.setInt(2, max);
+ ResultSet rs = st.executeQuery();
+ Map<Integer, ArtistCreditWrapper> artistCredits
+ = ArtistCreditHelper.completeArtistCreditFromDbResults
+ (rs,
+ "releaseId",
+ "artist_Credit",
+ "artistId",
+ "artistName",
+ "artistSortName",
+ "comment",
+ "joinphrase",
+ "artistCreditName"
+ );
+ rs.close();
+ return artistCredits;
+ }
+
+ private Map<Integer, ArtistCreditWrapper> updateArtistCreditWithAliases(
+ Map<Integer, ArtistCreditWrapper> artistCredits,
+ int min,
+ int max)
+ throws SQLException, IOException {
+
+ //Artist Credit Aliases
+ PreparedStatement st = getPreparedStatement("ARTISTCREDITALIASES");
+ st.setInt(1, min);
+ st.setInt(2, max);
+ ResultSet rs = st.executeQuery();
+ return ArtistCreditHelper.updateArtistCreditWithAliases(artistCredits,"releaseId", rs);
+ }
+
+
public Document documentFromResultSet(ResultSet rs,
Map<Integer, List<String>> secondaryTypes,
Map<Integer, List<Tag>> tags,
Modified: search_server/trunk/index/src/test/java/org/musicbrainz/search/index/RecordingIndexTest.java
===================================================================
--- search_server/trunk/index/src/test/java/org/musicbrainz/search/index/RecordingIndexTest.java 2013-09-30 13:43:50 UTC (rev 13709)
+++ search_server/trunk/index/src/test/java/org/musicbrainz/search/index/RecordingIndexTest.java 2013-10-02 10:29:56 UTC (rev 13710)
@@ -45,6 +45,8 @@
stmt.addBatch("INSERT INTO artist (id, gid, name, sort_name, comment)" +
" VALUES (16153, 'ccd4879c-5e88-4385-b131-bf65296bf245', 'Echo & The Bunnymen', 'Echo and The Bunnymen','')");
+ stmt.addBatch("INSERT INTO artist_alias(id, artist, name, sort_name, locale, edits_pending, last_updated) VALUES (1, 16153, 'Echo & Bunneymen','Bunneymen & Echo', 'en',1,null)");
+
stmt.addBatch("INSERT INTO artist_credit (id, name, artist_count, ref_count) VALUES (1, 'Echo & The Bunnymen', 1, 1)");
stmt.addBatch("INSERT INTO artist_credit_name (artist_credit, position, artist, name, join_phrase) " +
" VALUES (1, 0, 16153, 'Echo & The Bunnymen', '')");
@@ -779,6 +781,10 @@
assertEquals("2f250ed2-6285-40f1-aa2a-14f1c05e9765", recording.getId());
assertEquals("Do It Clean", recording.getTitle());
+ ArtistCredit ac = recording.getArtistCredit();
+ assertEquals("Echo & Bunneymen", ac.getNameCredit().get(0).getArtist().getAliasList().getAlias().get(0).getContent());
+ assertEquals("Bunneymen & Echo", ac.getNameCredit().get(0).getArtist().getAliasList().getAlias().get(0).getSortName());
+
ReleaseList releaseList = recording.getReleaseList();
Release release = releaseList.getRelease().get(0);
assertNotNull(release);
Modified: search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ReleaseGroupIndexTest.java
===================================================================
--- search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ReleaseGroupIndexTest.java 2013-09-30 13:43:50 UTC (rev 13709)
+++ search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ReleaseGroupIndexTest.java 2013-10-02 10:29:56 UTC (rev 13710)
@@ -132,15 +132,19 @@
stmt.addBatch("INSERT INTO artist (id, gid, name, sort_name, comment)" +
" VALUES (1, '99845d0c-f239-4051-a6b1-4b5e9f7ede0b', 'Erich Kunzel', 'Kunzel, Eric', 'a comment')");
+ stmt.addBatch("INSERT INTO artist_alias(id, artist, name, sort_name, locale, edits_pending, last_updated) VALUES (1, 1, 'Erich Kunzstel','Kunzstel, Erich', 'en',1,null)");
+ stmt.addBatch("INSERT INTO artist_alias(id, artist, name, sort_name, locale, edits_pending, last_updated) VALUES (2, 1, 'Erich Kunzstelein','Kunzstelein, Erich', 'de',1,null)");
+
stmt.addBatch("INSERT INTO artist (id, gid, name, sort_name, comment)" +
" VALUES (2, 'd8fbd94c-cd06-4e8b-a559-761ad969d07e', 'The Cincinnati Pops Orchestra', 'Cincinnati Pops Orchestra, The', 'a comment')");
+
stmt.addBatch("INSERT INTO artist_credit (id, name, artist_count, ref_count) VALUES (1, 'Erich Kunzel and Kunzel, Eric', 1, 1)");
stmt.addBatch("INSERT INTO artist_credit_name (artist_credit, position, artist, name, join_phrase)" +
" VALUES (1, 0, 1, 'Erich Kunzel', ' and ')");
stmt.addBatch("INSERT INTO artist_credit_name (artist_credit, position, artist, name, join_phrase)" +
" VALUES (1, 1, 2, 'Cincinnati Pops','')");
-
+
stmt.addBatch("INSERT INTO release_group (id, gid, name, artist_credit, type)" +
" VALUES (1, 'efd2ace2-b3b9-305f-8a53-9803595c0e37', 'Epics', 1, 1)");
@@ -366,6 +370,8 @@
tr.next();
assertEquals("kunzel", tr.term().utf8ToString());
tr.next();
+ assertEquals("kunzstel", tr.term().utf8ToString());
+ tr.next();
assertEquals("orchestra", tr.term().utf8ToString());
tr.next();
assertEquals("pops", tr.term().utf8ToString());
@@ -401,6 +407,15 @@
assertEquals("Erich Kunzel", ac.getNameCredit().get(0).getArtist().getName());
assertEquals("Cincinnati Pops", ac.getNameCredit().get(1).getName());
assertEquals("The Cincinnati Pops Orchestra", ac.getNameCredit().get(1).getArtist().getName());
+ assertEquals(2, ac.getNameCredit().get(0).getArtist().getAliasList().getAlias().size());
+ assertNull(ac.getNameCredit().get(1).getArtist().getAliasList());
+ assertEquals("Erich Kunzstel", ac.getNameCredit().get(0).getArtist().getAliasList().getAlias().get(0).getContent());
+ assertEquals("Erich Kunzstelein", ac.getNameCredit().get(0).getArtist().getAliasList().getAlias().get(1).getContent());
+ assertEquals("Kunzstel, Erich", ac.getNameCredit().get(0).getArtist().getAliasList().getAlias().get(0).getSortName());
+ assertEquals("Kunzstelein, Erich", ac.getNameCredit().get(0).getArtist().getAliasList().getAlias().get(1).getSortName());
+ assertEquals("en", ac.getNameCredit().get(0).getArtist().getAliasList().getAlias().get(0).getLocale());
+ assertEquals("de", ac.getNameCredit().get(0).getArtist().getAliasList().getAlias().get(1).getLocale());
+
}
ir.close();
Modified: search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ReleaseIndexTest.java
===================================================================
--- search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ReleaseIndexTest.java 2013-09-30 13:43:50 UTC (rev 13709)
+++ search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ReleaseIndexTest.java 2013-10-02 10:29:56 UTC (rev 13710)
@@ -115,6 +115,8 @@
stmt.addBatch("INSERT INTO artist (id, gid, name, sort_name, comment)" +
" VALUES (16153, 'ccd4879c-5e88-4385-b131-bf65296bf245', 'Echo & The Bunnymen', 'Echo and The Bunnymen', 'a comment')");
+ stmt.addBatch("INSERT INTO artist_alias(id, artist, name, sort_name, locale, edits_pending, last_updated) VALUES (1, 16153, 'Echo & Bunneymen','Bunneymen & Echo', 'en',1,null)");
+
stmt.addBatch("INSERT INTO artist_credit (id, name, artist_count, ref_count) VALUES (1, 'Echo & The Bunnymen', 1, 1)");
stmt.addBatch("INSERT INTO artist_credit_name (artist_credit, position, artist, name, join_phrase) " +
" VALUES (1, 0, 16153, 'Echo & The Bunnymen', '')");
@@ -864,6 +866,10 @@
assertEquals(1,release.getMediumList().getCount().intValue());
assertEquals(10,release.getMediumList().getTrackCount().intValue());
+ ArtistCredit ac = release.getArtistCredit();
+ assertEquals("Echo & Bunneymen", ac.getNameCredit().get(0).getArtist().getAliasList().getAlias().get(0).getContent());
+ assertEquals("Bunneymen & Echo", ac.getNameCredit().get(0).getArtist().getAliasList().getAlias().get(0).getSortName());
+
ReleaseEventList rel = release.getReleaseEventList();
assertNotNull(rel);
assertEquals(4,rel.getReleaseEvent().size());
Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseGroupWriter.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseGroupWriter.java 2013-09-30 13:43:50 UTC (rev 13709)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseGroupWriter.java 2013-10-02 10:29:56 UTC (rev 13710)
@@ -148,4 +148,37 @@
}
list.add(releaseGroup);
}
+
+ /**
+ * Overridden to ensure all attributes are set for each alias
+ *
+ * @param metadata
+ */
+ @Override
+ public void adjustForJson(Metadata metadata) {
+
+ if (metadata.getReleaseGroupList().getReleaseGroup().size()>0) {
+ for(ReleaseGroup releaseGroup:metadata.getReleaseGroupList().getReleaseGroup()) {
+ if(releaseGroup.getArtistCredit()!=null) {
+ for (NameCredit nc :releaseGroup.getArtistCredit().getNameCredit())
+ {
+ if(nc.getArtist()!=null && nc.getArtist().getAliasList()!=null)
+ {
+ for (Alias alias : nc.getArtist().getAliasList().getAlias()) {
+ //On Xml output as primary, but in json they have changed to true/false
+ if (alias.getPrimary() == null) {
+ alias.setPrimary("false");
+ }
+ else {
+ alias.setPrimary("true");
+ }
+ }
+ }
+ }
+
+ }
+ }
+ }
+
+ }
}
\ No newline at end of file
Modified: search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindReleaseGroupTest.java
===================================================================
--- search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindReleaseGroupTest.java 2013-09-30 13:43:50 UTC (rev 13709)
+++ search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindReleaseGroupTest.java 2013-10-02 10:29:56 UTC (rev 13710)
@@ -14,10 +14,7 @@
import org.apache.lucene.store.RAMDirectory;
import org.junit.Before;
import org.junit.Test;
-import org.musicbrainz.mmd2.Artist;
-import org.musicbrainz.mmd2.ArtistCredit;
-import org.musicbrainz.mmd2.NameCredit;
-import org.musicbrainz.mmd2.ObjectFactory;
+import org.musicbrainz.mmd2.*;
import org.musicbrainz.search.LuceneVersion;
import org.musicbrainz.search.MbDocument;
import org.musicbrainz.search.index.DatabaseIndex;
@@ -67,12 +64,18 @@
doc.addField(ReleaseGroupIndexField.ARTIST_NAMECREDIT, "The Wedding Present");
doc.addNumericField(ReleaseGroupIndexField.NUM_RELEASES,1);
+ Alias alias = of.createAlias();
+ alias.setContent("The Weddoes");
+ alias.setSortName("Weddoes, The");
+ AliasList aliasList = of.createAliasList();
+ aliasList.getAlias().add(alias);
ArtistCredit ac = of.createArtistCredit();
NameCredit nc = of.createNameCredit();
Artist artist = of.createArtist();
artist.setId("707622da-475f-48e1-905d-248718df6521");
artist.setName("The Wedding Present");
artist.setSortName("Wedding Present, The");
+ artist.setAliasList(aliasList);
nc.setArtist(artist);
ac.getNameCredit().add(nc);
doc.addField(ReleaseGroupIndexField.ARTIST_CREDIT, MMDSerializer.serialize(ac));