[mb-commits] r13681 - 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/mmd1 servlet/src/main/java/org/musicbrainz/search/servlet/mmd2 servlet/src/test/java/org/musicbrainz/search/servlet

[email protected] Thu, 09 May 2013 14:50:05 +0000
Newsgroups gmane.comp.audio.musicbrainz.cvs
Message-ID <E1UaSAX-0000tr-Rh@wiley>
Author: ijabz
Date: 2013-05-09 14:50:05 +0000 (Thu, 09 May 2013)
New Revision: 13681

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/LabelIndex.java
   search_server/trunk/index/src/main/java/org/musicbrainz/search/index/LabelIndexField.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/AbstractIndexTest.java
   search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ArtistIndexTest.java
   search_server/trunk/index/src/test/java/org/musicbrainz/search/index/LabelIndexTest.java
   search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ReleaseIndexTest.java
   search_server/trunk/index/src/test/java/org/musicbrainz/search/index/WorkIndexTest.java
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/LabelMmd1XmlWriter.java
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/LabelWriter.java
   search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindLabelTest.java
   search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/SearchAll2Test.java
Log:
SEARCH-268:Add extended alias info to the ws search results for labels.

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-05-09 11:15:51 UTC (rev 13680)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ArtistIndex.java	2013-05-09 14:50:05 UTC (rev 13681)
@@ -307,7 +307,7 @@
             lifespan.setBegin(begin);
         }
         if(!Strings.isNullOrEmpty(end)) {
-            lifespan.setBegin(end);
+            lifespan.setEnd(end);
         }
         lifespan.setEnded(Boolean.toString(ended));
 
@@ -322,6 +322,7 @@
         if (!Strings.isNullOrEmpty(country)) {
             artist.setCountry(country.toUpperCase(Locale.US));
         }
+
         String gender = rs.getString("gender");
         if (gender != null) {
             doc.addField(ArtistIndexField.GENDER, gender);

Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/LabelIndex.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/LabelIndex.java	2013-05-09 11:15:51 UTC (rev 13680)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/LabelIndex.java	2013-05-09 14:50:05 UTC (rev 13681)
@@ -19,20 +19,19 @@
 
 package org.musicbrainz.search.index;
 
+import com.google.common.base.Strings;
 import org.apache.lucene.analysis.Analyzer;
 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.MusicbrainzSimilarity;
 
 import java.io.IOException;
+import java.math.BigInteger;
 import java.sql.*;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 public class LabelIndex extends DatabaseIndex {
 
@@ -93,14 +92,17 @@
                 "  INNER JOIN tag ON tag=id " +
                 " WHERE label between ? AND ?");
 
+        addPreparedStatement("ALIASES",
+                "SELECT a.label as label, n.name as alias, sn.name as alias_sortname, a.primary_for_locale, a.locale, att.name as type," +
+                        "a.begin_date_year, a.begin_date_month, a.begin_date_day, a.end_date_year, a.end_date_month, a.end_date_day" +
+                        " FROM label_alias a" +
+                        "  JOIN label_name n ON (a.name = n.id) " +
+                        "  JOIN label_name sn ON (a.sort_name = sn.id) " +
+                        "  LEFT JOIN label_alias_type att on (a.type=att.id)" +
+                        " WHERE label BETWEEN ? AND ?" +
+                        " ORDER BY label, alias, alias_sortname");
 
-        addPreparedStatement("ALIASES", 
-                "SELECT label_alias.label as label, n.name as alias " +
-                " FROM label_alias " +
-                "  JOIN label_name n ON (label_alias.name = n.id) " +
-                " WHERE label BETWEEN ? AND ?");
 
-
         addPreparedStatement("LABELS",
                 "SELECT label.id, gid, n0.name as name, n1.name as sort_name, " +
                 "  label_type.name as type, begin_date_year, begin_date_month, begin_date_day, " +
@@ -146,6 +148,8 @@
 
     public void indexData(IndexWriter indexWriter, int min, int max) throws SQLException, IOException {
 
+        ObjectFactory of = new ObjectFactory();
+
         // Get Tags
         PreparedStatement st = getPreparedStatement("TAGS");
         st.setInt(1, min);
@@ -159,22 +163,47 @@
 
 
         // Get labels aliases
-        Map<Integer, List<String>> aliases = new HashMap<Integer, List<String>>();
+        //Aliases
+        Map<Integer, Set<Alias>> aliases = new HashMap<Integer, Set<Alias>>();
         st = getPreparedStatement("ALIASES");
         st.setInt(1, min);
         st.setInt(2, max);
         rs = st.executeQuery();
         while (rs.next()) {
-            int labelId = rs.getInt("label");
-
-            List<String> list;
-            if (!aliases.containsKey(labelId)) {
-                list = new LinkedList<String>();
-                aliases.put(labelId, list);
+            int artistId = rs.getInt("label");
+            Set<Alias> list;
+            if (!aliases.containsKey(artistId)) {
+                list = new LinkedHashSet<Alias>();
+                aliases.put(artistId, list);
             } else {
-                list = aliases.get(labelId);
+                list = aliases.get(artistId);
             }
-            list.add(rs.getString("alias"));
+            Alias alias = of.createAlias();
+            alias.setContent(rs.getString("alias"));
+            alias.setSortName(rs.getString("alias_sortname"));
+            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);
+            }
+            list.add(alias);
         }
         rs.close();
 
@@ -197,65 +226,116 @@
     public Document documentFromResultSet(ResultSet rs,
                                           Map<Integer,List<Tag>> tags,
                                           Map<Integer, List<String>> ipiCodes,
-                                          Map<Integer, List<String>> aliases) throws SQLException {
+                                          Map<Integer, Set<Alias>> aliases) throws SQLException {
 
         MbDocument doc = new MbDocument();
+
+        ObjectFactory of = new ObjectFactory();
+        Label label = of.createLabel();
+
         int labelId = rs.getInt("id");
         String labelGuid = rs.getString("gid");
         doc.addField(LabelIndexField.LABEL_ID, labelGuid);
+        label.setId(labelGuid);
+
         String name=rs.getString("name");
         doc.addField(LabelIndexField.LABEL,name );
+        label.setName(name);
 
         //Accented artist
         doc.addField(LabelIndexField.LABEL_ACCENT, name );
 
-        doc.addField(LabelIndexField.SORTNAME, rs.getString("sort_name"));
-        doc.addFieldOrUnknown(LabelIndexField.TYPE, rs.getString("type"));
-        doc.addFieldOrNoValue(LabelIndexField.COMMENT, rs.getString("comment"));
-        doc.addFieldOrUnknown(LabelIndexField.COUNTRY, rs.getString("country"));
+        String sortName = rs.getString("sort_name");
+        doc.addField(LabelIndexField.SORTNAME, sortName);
+        label.setSortName(sortName);
 
 
-        if(rs.getBoolean("ended")) {
-            doc.addFieldOrUnknown(LabelIndexField.ENDED, "true");
+        String type = rs.getString("type");
+        doc.addFieldOrUnknown(LabelIndexField.TYPE, type);
+        if (!Strings.isNullOrEmpty(type)) {
+            label.setType(type);
         }
-        else {
-            doc.addFieldOrUnknown(LabelIndexField.ENDED, "false");
+
+        String comment = rs.getString("comment");
+        doc.addFieldOrNoValue(LabelIndexField.COMMENT, comment);
+        if (!Strings.isNullOrEmpty(comment)) {
+            label.setDisambiguation(comment);
         }
 
-        doc.addNonEmptyField(LabelIndexField.BEGIN,
-                Utils.formatDate(rs.getInt("begin_date_year"), rs.getInt("begin_date_month"), rs.getInt("begin_date_day")));
+        String country = rs.getString("country");
+        doc.addFieldOrUnknown(LabelIndexField.COUNTRY, country);
+        if (!Strings.isNullOrEmpty(country)) {
+            label.setCountry(country.toUpperCase(Locale.US));
+        }
 
-        doc.addNonEmptyField(LabelIndexField.END,
-                Utils.formatDate(rs.getInt("end_date_year"), rs.getInt("end_date_month"), rs.getInt("end_date_day")));
+        boolean ended = rs.getBoolean("ended");
+        doc.addFieldOrUnknown(LabelIndexField.ENDED, Boolean.toString(ended));
 
+        String begin = Utils.formatDate(rs.getInt("begin_date_year"), rs.getInt("begin_date_month"), rs.getInt("begin_date_day"));
+        doc.addNonEmptyField(LabelIndexField.BEGIN, begin);
+
+        String end = Utils.formatDate(rs.getInt("end_date_year"), rs.getInt("end_date_month"), rs.getInt("end_date_day"));
+        doc.addNonEmptyField(LabelIndexField.END, end);
+
+        LifeSpan lifespan = of.createLifeSpan();
+        label.setLifeSpan(lifespan);
+        if(!Strings.isNullOrEmpty(begin)) {
+            lifespan.setBegin(begin);
+        }
+        if(!Strings.isNullOrEmpty(end)) {
+            lifespan.setEnd(end);
+        }
+        lifespan.setEnded(Boolean.toString(ended));
+
+
         int labelcode = rs.getInt("label_code");
         if (labelcode > 0) {
             doc.addField(LabelIndexField.CODE, labelcode);
+            label.setLabelCode(BigInteger.valueOf(labelcode));
         }
         else {
             doc.addField(LabelIndexField.CODE,Index.NO_VALUE);
         }
 
         if (aliases.containsKey(labelId)) {
-            for (String alias : aliases.get(labelId)) {
-                doc.addField(LabelIndexField.ALIAS, alias);
+            AliasList aliasList = of.createAliasList();
+            for (Alias nextAlias : aliases.get(labelId)) {
+                doc.addField(LabelIndexField.ALIAS, nextAlias.getContent());
+                if(!nextAlias.getSortName().equals(nextAlias.getContent())) {
+                    doc.addField(LabelIndexField.ALIAS, nextAlias.getSortName());
+                }
+                aliasList.getAlias().add(nextAlias);
             }
+            label.setAliasList(aliasList);
         }
 
+
         if (tags.containsKey(labelId)) {
-            for (Tag tag : tags.get(labelId)) {
-                doc.addField(LabelIndexField.TAG, tag.getName());
-                doc.addField(LabelIndexField.TAGCOUNT, tag.getCount().toString());
+            TagList tagList = of.createTagList();
+            for (Tag nextTag : tags.get(labelId)) {
+                Tag tag = of.createTag();
+                doc.addField(LabelIndexField.TAG, nextTag.getName());
+                tag.setName(nextTag.getName());
+                tag.setCount(new BigInteger(nextTag.getCount().toString()));
+                tagList.getTag().add(tag);
             }
+           label.setTagList(tagList);
         }
 
         if (ipiCodes.containsKey(labelId)) {
+            IpiList ipiList = of.createIpiList();
             for (String ipiCode : ipiCodes.get(labelId)) {
                 doc.addField(LabelIndexField.IPI, ipiCode);
+                ipiList.getIpi().add(ipiCode);
             }
+            label.setIpiList(ipiList);
         }
 
         LabelBoostDoc.boost(labelGuid, doc);
+
+        String store = MMDSerializer.serialize(label);
+        doc.addField(LabelIndexField.LABEL_STORE, store);
+
         return doc.getLuceneDocument();
     }
 

Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/LabelIndexField.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/LabelIndexField.java	2013-05-09 11:15:51 UTC (rev 13680)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/LabelIndexField.java	2013-05-09 14:50:05 UTC (rev 13681)
@@ -39,21 +39,21 @@
 public enum LabelIndexField implements IndexField {
 
 	ID			("_id",			MusicBrainzFieldTypes.TEXT_STORED_NOT_ANALYZED_NO_NORMS, new KeywordAnalyzer()),
-    ALIAS		("alias",		MusicBrainzFieldTypes.TEXT_STORED_ANALYZED, new MusicbrainzWithPosGapAnalyzer()),
-    BEGIN		("begin",		MusicBrainzFieldTypes.TEXT_STORED_NOT_ANALYZED_NO_NORMS, new KeywordAnalyzer()),
-    COMMENT		("comment",		MusicBrainzFieldTypes.TEXT_STORED_ANALYZED),
-    CODE		("code",		MusicBrainzFieldTypes.TEXT_STORED_ANALYZED, new StripLeadingZeroesAnalyzer()),
-    COUNTRY		("country",		MusicBrainzFieldTypes.TEXT_STORED_ANALYZED),
-    END			("end",			MusicBrainzFieldTypes.TEXT_STORED_NOT_ANALYZED_NO_NORMS, new KeywordAnalyzer()),
-    ENDED       ("ended",       MusicBrainzFieldTypes.TEXT_STORED_ANALYZED_NO_NORMS, new CaseInsensitiveKeywordAnalyzer()),
-    IPI         ("ipi",         MusicBrainzFieldTypes.TEXT_STORED_ANALYZED_NO_NORMS, new CaseInsensitiveKeywordAnalyzer()),
+    ALIAS		("alias",		MusicBrainzFieldTypes.TEXT_NOT_STORED_ANALYZED, new MusicbrainzWithPosGapAnalyzer()),
+    BEGIN		("begin",		MusicBrainzFieldTypes.TEXT_NOT_STORED_NOT_ANALYZED_NO_NORMS, new KeywordAnalyzer()),
+    COMMENT		("comment",		MusicBrainzFieldTypes.TEXT_NOT_STORED_ANALYZED),
+    CODE		("code",		MusicBrainzFieldTypes.TEXT_NOT_STORED_ANALYZED, new StripLeadingZeroesAnalyzer()),
+    COUNTRY		("country",		MusicBrainzFieldTypes.TEXT_NOT_STORED_ANALYZED),
+    END			("end",			MusicBrainzFieldTypes.TEXT_NOT_STORED_NOT_ANALYZED_NO_NORMS, new KeywordAnalyzer()),
+    ENDED       ("ended",       MusicBrainzFieldTypes.TEXT_NOT_STORED_ANALYZED_NO_NORMS, new CaseInsensitiveKeywordAnalyzer()),
+    IPI         ("ipi",         MusicBrainzFieldTypes.TEXT_NOT_STORED_ANALYZED_NO_NORMS, new CaseInsensitiveKeywordAnalyzer()),
     LABEL		("label",		MusicBrainzFieldTypes.TEXT_STORED_ANALYZED, new MusicbrainzAnalyzer()),
     LABEL_ACCENT("labelaccent", MusicBrainzFieldTypes.TEXT_NOT_STORED_ANALYZED, new MusicbrainzKeepAccentsAnalyzer()),
     LABEL_ID	("laid",		MusicBrainzFieldTypes.TEXT_STORED_NOT_ANALYZED_NO_NORMS, new KeywordAnalyzer()),
-    SORTNAME	("sortname",	MusicBrainzFieldTypes.TEXT_STORED_ANALYZED),
-    TYPE		("type",		MusicBrainzFieldTypes.TEXT_STORED_ANALYZED_NO_NORMS, new CaseInsensitiveKeywordAnalyzer()),
-    TAG		    ("tag",		    MusicBrainzFieldTypes.TEXT_STORED_ANALYZED, new MusicbrainzWithPosGapAnalyzer()),
-    TAGCOUNT    ("tagcount",	MusicBrainzFieldTypes.TEXT_STORED_NOT_INDEXED),
+    SORTNAME	("sortname",	MusicBrainzFieldTypes.TEXT_NOT_STORED_ANALYZED),
+    TAG		    ("tag",		    MusicBrainzFieldTypes.TEXT_NOT_STORED_ANALYZED, new MusicbrainzWithPosGapAnalyzer()),
+    TYPE		("type",		MusicBrainzFieldTypes.TEXT_NOT_STORED_ANALYZED_NO_NORMS, new CaseInsensitiveKeywordAnalyzer()),
+    LABEL_STORE ("labelstore",  MusicBrainzFieldTypes.TEXT_STORED_NOT_INDEXED),
     ;
 
     private String name;

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-05-09 11:15:51 UTC (rev 13680)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseIndex.java	2013-05-09 14:50:05 UTC (rev 13681)
@@ -563,7 +563,7 @@
                 medium.setDiscList(discList);
 
                 mediumList.getMedium().add(medium);
-
+                release.setMediumList(mediumList);
             }
 
             //Num of mediums on the release

Modified: search_server/trunk/index/src/test/java/org/musicbrainz/search/index/AbstractIndexTest.java
===================================================================
--- search_server/trunk/index/src/test/java/org/musicbrainz/search/index/AbstractIndexTest.java	2013-05-09 11:15:51 UTC (rev 13680)
+++ search_server/trunk/index/src/test/java/org/musicbrainz/search/index/AbstractIndexTest.java	2013-05-09 14:50:05 UTC (rev 13681)
@@ -420,16 +420,18 @@
                 "  id serial NOT NULL," +
                 "  label integer NOT NULL," +
                 "  name integer NOT NULL," +
-                "  sort_name INTEGER," +
+                "  locale text," +
+                "  last_updated timestamp," +
+                "  edits_pending integer NOT NULL DEFAULT 0," +
                 "  type                INTEGER," +
+                "  sort_name           INTEGER NOT NULL," +
                 "  begin_date_year     SMALLINT," +
                 "  begin_date_month    SMALLINT," +
                 "  begin_date_day      SMALLINT," +
                 "  end_date_year       SMALLINT," +
                 "  end_date_month      SMALLINT," +
                 "  end_date_day        SMALLINT," +
-                "  last_updated timestamp," +
-                "  edits_pending integer NOT NULL DEFAULT 0" +
+                "  primary_for_locale  BOOLEAN"   +
                 ")");
 
         stmt.addBatch("CREATE TABLE label_alias_type (" +

Modified: search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ArtistIndexTest.java
===================================================================
--- search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ArtistIndexTest.java	2013-05-09 11:15:51 UTC (rev 13680)
+++ search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ArtistIndexTest.java	2013-05-09 14:50:05 UTC (rev 13681)
@@ -199,7 +199,6 @@
                 assertEquals(2, ir.numDocs());
                 {
                     checkTerm(ir, ArtistIndexField.IPI, "10001");
-                    Document doc = ir.document(1);
                 }
                 ir.close();
             }

Modified: search_server/trunk/index/src/test/java/org/musicbrainz/search/index/LabelIndexTest.java
===================================================================
--- search_server/trunk/index/src/test/java/org/musicbrainz/search/index/LabelIndexTest.java	2013-05-09 11:15:51 UTC (rev 13680)
+++ search_server/trunk/index/src/test/java/org/musicbrainz/search/index/LabelIndexTest.java	2013-05-09 14:50:05 UTC (rev 13681)
@@ -8,11 +8,16 @@
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.NumericUtils;
 import org.junit.Test;
+import org.musicbrainz.mmd2.Artist;
+import org.musicbrainz.mmd2.Label;
+import org.musicbrainz.mmd2.LifeSpan;
 
 import java.math.BigInteger;
 import java.sql.Statement;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 
 public class LabelIndexTest extends AbstractIndexTest {
 
@@ -39,13 +44,13 @@
 
         Statement stmt = conn.createStatement();
 
-	stmt.addBatch("INSERT INTO label_name (id, name) VALUES (1, '4AD')");
-	stmt.addBatch("INSERT INTO label_name (id, name) VALUES (2, '4AD US')");
+	    stmt.addBatch("INSERT INTO label_name (id, name) VALUES (1, '4AD')");
+	    stmt.addBatch("INSERT INTO label_name (id, name) VALUES (2, '4AD US')");
 		
         stmt.addBatch("INSERT INTO label (id, gid, name, sort_name, type, label_code, begin_date_year, ended) " +
 					"VALUES (1, 'a539bb1e-f2e1-4b45-9db8-8053841e7503', 1, 1, 4, 5807, 1979, true)");
         stmt.addBatch("INSERT INTO label_ipi (label, ipi) values(1,'1001')");
-        stmt.addBatch("INSERT INTO label_alias (label, name) VALUES (1, 2)");
+        stmt.addBatch("INSERT INTO label_alias (label, name, sort_name) VALUES (1, 2, 2)");
 
         stmt.executeBatch();
         stmt.close();
@@ -90,7 +95,7 @@
 		
         stmt.addBatch("INSERT INTO label (id, gid, name, sort_name, area, ended)" +
 					"VALUES (3, 'a539bb1e-f2e1-4b45-9db8-8053841e7503', 1, 1, 1, true)");
-        stmt.addBatch("INSERT INTO label_alias (label, name) VALUES (3, 2)");
+        stmt.addBatch("INSERT INTO label_alias (label, name,sort_name) VALUES (3, 2, 2)");
 
         stmt.addBatch("INSERT INTO tag (id, name, ref_count) VALUES (1, 'Goth', 2);");
         stmt.addBatch("INSERT INTO label_tag (label, tag, count) VALUES (3, 1, 10)");
@@ -109,11 +114,8 @@
            IndexReader ir = DirectoryReader.open(ramDir);
            assertEquals(2, ir.numDocs());
            {
-               Document doc = ir.document(1);
-               assertEquals(1, doc.getFields(LabelIndexField.LABEL_ID.getName()).length);
-               assertEquals("a539bb1e-f2e1-4b45-9db8-8053841e7503", doc.getField(LabelIndexField.LABEL_ID.getName()).stringValue());               
-               assertEquals(1, doc.getFields(LabelIndexField.COUNTRY.getName()).length);
-               assertEquals("af", doc.getField(LabelIndexField.COUNTRY.getName()).stringValue());
+               checkTerm(ir, LabelIndexField.LABEL_ID, "a539bb1e-f2e1-4b45-9db8-8053841e7503");
+               checkTerm(ir, LabelIndexField.COUNTRY, "af");
            }
            ir.close();
 
@@ -130,9 +132,7 @@
         IndexReader ir = DirectoryReader.open(ramDir);
         assertEquals(2, ir.numDocs());
         {
-            Document doc = ir.document(1);
-            assertEquals(1, doc.getFields(LabelIndexField.COUNTRY.getName()).length);
-            assertEquals("unknown", doc.getField(LabelIndexField.COUNTRY.getName()).stringValue());
+           checkTerm(ir, LabelIndexField.COUNTRY, "unknown");
         }
         ir.close();
 
@@ -148,9 +148,7 @@
         IndexReader ir = DirectoryReader.open(ramDir);
         assertEquals(2, ir.numDocs());
         {
-            Document doc = ir.document(1);
-            assertEquals(1, doc.getFields(LabelIndexField.COUNTRY.getName()).length);
-            assertEquals("af", doc.getField(LabelIndexField.COUNTRY.getName()).stringValue());
+            checkTerm(ir, LabelIndexField.COUNTRY, "af");
         }
         ir.close();
 
@@ -166,9 +164,7 @@
         IndexReader ir = DirectoryReader.open(ramDir);
         assertEquals(2, ir.numDocs());
         {
-            Document doc = ir.document(1);
-            assertEquals(1, doc.getFields(LabelIndexField.IPI.getName()).length);
-            assertEquals("1001", doc.getField(LabelIndexField.IPI.getName()).stringValue());
+            checkTerm(ir, LabelIndexField.IPI, "1001");
         }
         ir.close();
 
@@ -184,9 +180,7 @@
         IndexReader ir = DirectoryReader.open(ramDir);
         assertEquals(2, ir.numDocs());
         {
-            Document doc = ir.document(1);
-            assertEquals(1, doc.getFields(LabelIndexField.COMMENT.getName()).length);
-            assertEquals("-", doc.getField(LabelIndexField.COMMENT.getName()).stringValue());
+            checkTerm(ir, LabelIndexField.COMMENT, "-");
         }
         ir.close();
     }
@@ -201,9 +195,10 @@
         IndexReader ir = DirectoryReader.open(ramDir);
         assertEquals(2, ir.numDocs());
         {
-            Document doc = ir.document(1);
-            assertEquals(1, doc.getFields(LabelIndexField.COMMENT.getName()).length);
-            assertEquals("DO NOT EDIT THIS LABEL", doc.getField(LabelIndexField.COMMENT.getName()).stringValue());
+            checkTerm(ir, LabelIndexField.COMMENT, "do");
+            checkTermX(ir, LabelIndexField.COMMENT, "edit", 1);
+            checkTermX(ir, LabelIndexField.COMMENT, "label",2);
+            checkTermX(ir, LabelIndexField.COMMENT, "not",3);
         }
         ir.close();
     }
@@ -219,9 +214,7 @@
         IndexReader ir = DirectoryReader.open(ramDir);
         assertEquals(2, ir.numDocs());
         {
-            Document doc = ir.document(1);
-            assertEquals(1, doc.getFields(LabelIndexField.CODE.getName()).length);
-            assertEquals("-", doc.getField(LabelIndexField.CODE.getName()).stringValue());
+            checkTerm(ir, LabelIndexField.CODE, "-");
         }
         ir.close();
     }
@@ -236,9 +229,7 @@
         IndexReader ir = DirectoryReader.open(ramDir);
         assertEquals(2, ir.numDocs());
         {
-            Document doc = ir.document(1);
-            assertEquals(1, doc.getFields(LabelIndexField.CODE.getName()).length);
-            assertEquals("5807", doc.get(LabelIndexField.CODE.getName()));
+            checkTerm(ir, LabelIndexField.CODE, "5807");
         }
         ir.close();
     }
@@ -253,9 +244,7 @@
         IndexReader ir = DirectoryReader.open(ramDir);
         assertEquals(2, ir.numDocs());
         {
-            Document doc = ir.document(1);
-            assertEquals(1, doc.getFields(LabelIndexField.CODE.getName()).length);
-            assertEquals("99998", doc.get(LabelIndexField.CODE.getName()));
+            checkTerm(ir, LabelIndexField.CODE, "99998");
         }
         ir.close();
     }
@@ -275,8 +264,7 @@
         IndexReader ir = DirectoryReader.open(ramDir);
         assertEquals(2, ir.numDocs());
         {
-            Document doc = ir.document(1);
-            assertEquals(1, doc.getFields(LabelIndexField.ALIAS.getName()).length);
+            checkTerm(ir, LabelIndexField.ALIAS, "4ad");
         }
         ir.close();
     }
@@ -296,9 +284,7 @@
         IndexReader ir = DirectoryReader.open(ramDir);
         assertEquals(2, ir.numDocs());
         {
-            Document doc = ir.document(1);
-            assertEquals(1, doc.getFields(LabelIndexField.BEGIN.getName()).length);
-            assertEquals("1979", doc.getField(LabelIndexField.BEGIN.getName()).stringValue());
+            checkTerm(ir, LabelIndexField.BEGIN, "1979");
         }
         ir.close();
     }
@@ -314,9 +300,7 @@
         IndexReader ir = DirectoryReader.open(ramDir);
         assertEquals(2, ir.numDocs());
         {
-            Document doc = ir.document(1);
-            assertEquals(1, doc.getFields(LabelIndexField.ENDED.getName()).length);
-            assertEquals("true", doc.getField(LabelIndexField.ENDED.getName()).stringValue());
+            checkTerm(ir, LabelIndexField.ENDED, "true");
         }
         ir.close();
     }
@@ -332,9 +316,7 @@
         IndexReader ir = DirectoryReader.open(ramDir);
         assertEquals(2, ir.numDocs());
         {
-            Document doc = ir.document(1);
-            assertEquals(1, doc.getFields(LabelIndexField.ENDED.getName()).length);
-            assertEquals("false", doc.getField(LabelIndexField.ENDED.getName()).stringValue());
+            checkTerm(ir, LabelIndexField.ENDED, "false");
         }
         ir.close();
     }
@@ -374,9 +356,7 @@
         IndexReader ir = DirectoryReader.open(ramDir);
         assertEquals(2, ir.numDocs());
         {
-            Document doc = ir.document(1);
-            assertEquals(1, doc.getFields(LabelIndexField.END.getName()).length);
-            assertEquals("2009-04", doc.getField(LabelIndexField.END.getName()).stringValue());
+            checkTerm(ir, LabelIndexField.END, "2009-04");
         }
         ir.close();
     }
@@ -413,9 +393,7 @@
         IndexReader ir = DirectoryReader.open(ramDir);
         assertEquals(2, ir.numDocs());
         {
-            Document doc = ir.document(1);
-            assertEquals(1, doc.getFields(LabelIndexField.TYPE.getName()).length);
-            assertEquals("Original Production", doc.getField(LabelIndexField.TYPE.getName()).stringValue());
+            checkTerm(ir, LabelIndexField.TYPE, "original production");
         }
         ir.close();
     }
@@ -435,17 +413,72 @@
         IndexReader ir = DirectoryReader.open(ramDir);
         assertEquals(2, ir.numDocs());
         {
+            checkTerm(ir, LabelIndexField.TAG, "goth");
+        }
+        ir.close();
+    }
+
+    /**
+     * @throws Exception exception
+     */
+    @Test
+    public void testStoredLabel1() throws Exception {
+
+        addLabelOne();
+        RAMDirectory ramDir = new RAMDirectory();
+        createIndex(ramDir);
+
+        IndexReader ir = DirectoryReader.open(ramDir);
+        assertEquals(2, ir.numDocs());
+        {
+
             Document doc = ir.document(1);
-            assertEquals(1, doc.getFields(LabelIndexField.LABEL.getName()).length);
-            assertEquals(1, doc.getFields(LabelIndexField.TAG.getName()).length);
-            assertEquals("Goth", doc.getField(LabelIndexField.TAG.getName()).stringValue());
-            assertEquals(1, doc.getFields(LabelIndexField.TAGCOUNT.getName()).length);
-            assertEquals("10", doc.getField(LabelIndexField.TAGCOUNT.getName()).stringValue());
+            Label label = (Label) MMDSerializer.unserialize(doc.get(LabelIndexField.LABEL_STORE.getName()), Label.class);
+            assertEquals("a539bb1e-f2e1-4b45-9db8-8053841e7503", label.getId());
+            assertEquals("4AD", label.getName());
+            assertNull(label.getCountry());
+            assertEquals("4AD", label.getSortName());
+            assertNull(label.getDisambiguation());
+            assertEquals("Original Production",label.getType());
+            assertEquals("4AD",label.getSortName());
         }
         ir.close();
     }
 
+    /**
+     * @throws Exception exception
+     */
+    @Test
+    public void testStoredLabel2() throws Exception {
 
+        addLabelTwo();
+        RAMDirectory ramDir = new RAMDirectory();
+        createIndex(ramDir);
+
+        IndexReader ir = DirectoryReader.open(ramDir);
+        assertEquals(2, ir.numDocs());
+        {
+
+            Document doc = ir.document(1);
+            Label label = (Label) MMDSerializer.unserialize(doc.get(LabelIndexField.LABEL_STORE.getName()), Label.class);
+            assertEquals("d8caa692-704d-412b-a410-4fbcf5b9c796", label.getId());
+            assertEquals("MusicBrainz Data Testing Label", label.getName());
+            assertEquals("CA", label.getCountry());
+            assertEquals("Data Testing Label, MusicBrainz",label.getSortName());
+            assertEquals("DO NOT EDIT THIS LABEL", label.getDisambiguation());
+            assertEquals("Distributor",label.getType());
+            assertEquals("Data Testing Label, MusicBrainz",label.getSortName());
+            LifeSpan lifespan = label.getLifeSpan();
+            assertNotNull(lifespan);
+            assertEquals("2009-01-01",lifespan.getBegin());
+            assertEquals("false",lifespan.getEnded());
+            assertEquals("2009-04",lifespan.getEnd());
+
+        }
+        ir.close();
+    }
+
+
 //    /**
 //     * Checks record with type = null is set to unknown
 //     *

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-05-09 11:15:51 UTC (rev 13680)
+++ search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ReleaseIndexTest.java	2013-05-09 14:50:05 UTC (rev 13681)
@@ -883,6 +883,7 @@
             assertEquals("c3b8dbc9-c1ff-4743-9015-8d762819134e", release.getId());
             assertEquals("Crocodiles (bonus disc)", release.getTitle());
             assertEquals("B00005NTQ7", release.getAsin());
+            assertNotNull(release.getMediumList());
 
 
         }
@@ -908,6 +909,7 @@
             assertEquals("c3b8dbc9-c1ff-4743-9015-8d762819134e", release.getId());
             assertEquals("Crocodiles (bonus disc)", release.getTitle());
             assertEquals("B00005NTQ7", release.getAsin());
+            assertNotNull(release.getMediumList());
             ReleaseEventList rel = release.getReleaseEventList();
             assertNotNull(rel);
             assertEquals(4,rel.getReleaseEvent().size());

Modified: search_server/trunk/index/src/test/java/org/musicbrainz/search/index/WorkIndexTest.java
===================================================================
--- search_server/trunk/index/src/test/java/org/musicbrainz/search/index/WorkIndexTest.java	2013-05-09 11:15:51 UTC (rev 13680)
+++ search_server/trunk/index/src/test/java/org/musicbrainz/search/index/WorkIndexTest.java	2013-05-09 14:50:05 UTC (rev 13681)
@@ -311,7 +311,7 @@
             assertEquals(1, doc.getFields(WorkIndexField.TAG.getName()).length);
             assertEquals("Classical", doc.getField(WorkIndexField.TAG.getName()).stringValue());
             assertEquals(1, doc.getFields(WorkIndexField.TAGCOUNT.getName()).length);
-            assertEquals("10", doc.getField(LabelIndexField.TAGCOUNT.getName()).stringValue());
+            assertEquals("10", doc.getField(WorkIndexField.TAGCOUNT.getName()).stringValue());
         }
         ir.close();
     }

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/LabelMmd1XmlWriter.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/LabelMmd1XmlWriter.java	2013-05-09 11:15:51 UTC (rev 13680)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/LabelMmd1XmlWriter.java	2013-05-09 14:50:05 UTC (rev 13681)
@@ -28,10 +28,12 @@
 
 package org.musicbrainz.search.servlet.mmd1;
 
+import com.google.common.base.Strings;
 import com.jthink.brainz.mmd.*;
 import org.apache.commons.lang.StringUtils;
 import org.musicbrainz.search.MbDocument;
 import org.musicbrainz.search.index.LabelIndexField;
+import org.musicbrainz.search.index.MMDSerializer;
 import org.musicbrainz.search.servlet.Result;
 import org.musicbrainz.search.servlet.Results;
 
@@ -40,6 +42,7 @@
 
 public class LabelMmd1XmlWriter extends Mmd1XmlWriter {
     public Metadata write(Results results) throws IOException {
+
         ObjectFactory of = new ObjectFactory();
 
         Metadata metadata = of.createMetadata();
@@ -48,50 +51,45 @@
         for (Result result : results.results) {
             MbDocument doc = result.getDoc();
             Label label = of.createLabel();
-            label.setId(doc.get(LabelIndexField.LABEL_ID));
 
-            String type = doc.get(LabelIndexField.TYPE);
-            if (isNotUnknown(type)) {
-                label.setType(StringUtils.capitalize(doc.get(LabelIndexField.TYPE)));
-            }
-
             result.setNormalizedScore(results.getMaxScore());
             label.getOtherAttributes().put(getScore(), String.valueOf(result.getNormalizedScore()));
 
-            String name = doc.get(LabelIndexField.LABEL);
-            if (name != null) {
-                label.setName(name);
+            org.musicbrainz.mmd2.Label labelv2
+                    = (org.musicbrainz.mmd2.Label) MMDSerializer.unserialize(doc.get(LabelIndexField.LABEL_STORE), org.musicbrainz.mmd2.Label.class);
+            label.setId(labelv2.getId());
+            label.setType(StringUtils.capitalize(labelv2.getType()));
+            label.setName(labelv2.getName());
+
+            if(!Strings.isNullOrEmpty(labelv2.getSortName())) {
+                label.setSortName(labelv2.getSortName());
             }
 
-            String code = doc.get(LabelIndexField.CODE);
-            if (isNotNoValue(code)) {
-                label.setLabelCode(new BigInteger(code));
+            if(labelv2.getLabelCode()!=null) {
+                label.setLabelCode(labelv2.getLabelCode());
             }
 
-            String sortname = doc.get(LabelIndexField.SORTNAME);
-            if (sortname != null) {
-                label.setSortName(sortname);
-        }
+            if(!Strings.isNullOrEmpty(labelv2.getDisambiguation())) {
+                label.setDisambiguation(labelv2.getDisambiguation());
+            }
 
-            String begin = doc.get(LabelIndexField.BEGIN);
-            String end = doc.get(LabelIndexField.END);
-            if (begin != null || end != null) {
-                LifeSpan lifespan = of.createLifeSpan();
-                if (begin != null) {
-                    lifespan.setBegin(begin);
+            if(labelv2.getLifeSpan()!=null) {
+                String begin = labelv2.getLifeSpan().getBegin();
+                String end = labelv2.getLifeSpan().getEnd();
+                if (begin != null || end != null) {
+                    LifeSpan lifespan = of.createLifeSpan();
+                    if (begin != null) {
+                        lifespan.setBegin(begin);
 
-                }
-                if (end != null) {
-                    lifespan.setEnd(end);
+                    }
+                    if (end != null) {
+                        lifespan.setEnd(end);
 
+                    }
+                    label.setLifeSpan(lifespan);
                 }
-                label.setLifeSpan(lifespan);
             }
 
-            String comment = doc.get(LabelIndexField.COMMENT);
-            if (isNotNoValue(comment)) {
-                label.setDisambiguation(comment);
-            }
             labelList.getLabel().add(label);
 
         }

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/LabelWriter.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/LabelWriter.java	2013-05-09 11:15:51 UTC (rev 13680)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/LabelWriter.java	2013-05-09 14:50:05 UTC (rev 13681)
@@ -32,13 +32,13 @@
 import org.musicbrainz.mmd2.*;
 import org.musicbrainz.search.MbDocument;
 import org.musicbrainz.search.index.LabelIndexField;
+import org.musicbrainz.search.index.MMDSerializer;
 import org.musicbrainz.search.servlet.Result;
 import org.musicbrainz.search.servlet.Results;
 
 import java.io.IOException;
 import java.math.BigInteger;
 import java.util.List;
-import java.util.Locale;
 
 /**
  * Write Label Output
@@ -81,96 +81,53 @@
     }
 
     /**
-     * Write result and add to the list
-     *
      * @param list
      * @param result
      * @throws IOException
      */
     public void write(List list, Result result) throws IOException {
-        ObjectFactory of = new ObjectFactory();
         MbDocument doc = result.getDoc();
-        Label label = of.createLabel();
-        label.setId(doc.get(LabelIndexField.LABEL_ID));
-        String type = doc.get(LabelIndexField.TYPE);
-        if (isNotUnknown(type)) {
-            label.setType(type);
-        }
+        Label label = (Label) MMDSerializer.unserialize(doc.get(LabelIndexField.LABEL_STORE), Label.class);
         label.setScore(String.valueOf(result.getNormalizedScore()));
-        String name = doc.get(LabelIndexField.LABEL);
-        if (name != null) {
-            label.setName(name);
-        }
+        list.add(label);
+    }
 
-        String[] ipiCodes = doc.getValues(LabelIndexField.IPI);
-        if (ipiCodes.length > 0) {
-            IpiList ipiList = of.createIpiList();
-            for (int i = 0; i < ipiCodes.length; i++) {
-                ipiList.getIpi().add(ipiCodes[i]);
-            }
-            label.setIpiList(ipiList);
-        }
+    /**
+     * Overriden to ensure all attributes are set for each alias
+     *
+     * @param metadata
+     */
+    @Override
+    public void adjustForJson(Metadata metadata) {
 
-        String code = doc.get(LabelIndexField.CODE);
-        if (isNotNoValue(code)) {
-            label.setLabelCode(new BigInteger(code));
-        }
+        if (metadata.getLabelList().getLabel().size()>0) {
+            for(Label label:metadata.getLabelList().getLabel()) {
+                if(label.getAliasList()!=null) {
+                    for (Alias alias : label.getAliasList().getAlias()) {
 
-        String countryCode = doc.get(LabelIndexField.COUNTRY);
-        if (isNotUnknown(countryCode)) {
-            label.setCountry(countryCode.toUpperCase(Locale.US));
-        }
-
-        String sortname = doc.get(LabelIndexField.SORTNAME);
-        if (sortname != null) {
-            label.setSortName(sortname);
-        }
-
-        String begin = doc.get(LabelIndexField.BEGIN);
-        String end = doc.get(LabelIndexField.END);
-        String ended = doc.get(LabelIndexField.ENDED);
-
-        LifeSpan lifespan = of.createLifeSpan();
-        label.setLifeSpan(lifespan);
-
-        if (begin != null) {
-            lifespan.setBegin(begin);
-        }
-
-        if (end != null) {
-            lifespan.setEnd(end);
-        }
-        lifespan.setEnded(ended);
-
-        String comment = doc.get(LabelIndexField.COMMENT);
-        if (isNotNoValue(comment)) {
-            label.setDisambiguation(comment);
-        }
-
-        String[] aliases = doc.getValues(LabelIndexField.ALIAS);
-        if (aliases.length > 0) {
-            AliasList aliasList = of.createAliasList();
-            for (int i = 0; i < aliases.length; i++) {
-                Alias alias = of.createAlias();
-                alias.setContent(aliases[i]);
-                aliasList.getAlias().add(alias);
+                        if (alias.getBeginDate() == null) {
+                            alias.setBeginDate("");
+                        }
+                        if (alias.getEndDate() == null) {
+                            alias.setEndDate("");
+                        }
+                        if (alias.getType() == null) {
+                            alias.setType("");
+                        }
+                        if (alias.getLocale() == null) {
+                            alias.setLocale("");
+                        }
+                        //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");
+                        }
+                    }
+                }
             }
-            label.setAliasList(aliasList);
         }
 
-        String[] tags = doc.getValues(LabelIndexField.TAG);
-        String[] tagCounts = doc.getValues(LabelIndexField.TAGCOUNT);
-        if (tags.length > 0) {
-            TagList tagList = of.createTagList();
-            for (int i = 0; i < tags.length; i++) {
-                Tag tag = of.createTag();
-                tag.setName(tags[i]);
-                tag.setCount(new BigInteger(tagCounts[i]));
-                tagList.getTag().add(tag);
-            }
-            label.setTagList(tagList);
-        }
-        list.add(label);
-
     }
 }
\ No newline at end of file

Modified: search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindLabelTest.java
===================================================================
--- search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindLabelTest.java	2013-05-09 11:15:51 UTC (rev 13680)
+++ search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindLabelTest.java	2013-05-09 14:50:05 UTC (rev 13681)
@@ -1,14 +1,5 @@
 package org.musicbrainz.search.servlet;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.Date;
-
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexWriterConfig;
@@ -16,149 +7,176 @@
 import org.apache.lucene.store.RAMDirectory;
 import org.junit.Before;
 import org.junit.Test;
+import org.musicbrainz.mmd2.*;
 import org.musicbrainz.search.LuceneVersion;
 import org.musicbrainz.search.MbDocument;
 import org.musicbrainz.search.analysis.MusicbrainzSimilarity;
-import org.musicbrainz.search.index.DatabaseIndex;
-import org.musicbrainz.search.index.Index;
-import org.musicbrainz.search.index.LabelIndexField;
-import org.musicbrainz.search.index.MetaIndexField;
+import org.musicbrainz.search.index.*;
 import org.musicbrainz.search.servlet.mmd1.LabelMmd1XmlWriter;
 import org.musicbrainz.search.servlet.mmd1.LabelType;
 import org.musicbrainz.search.servlet.mmd2.LabelWriter;
 
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.math.BigInteger;
+import java.util.Date;
+
+import static org.junit.Assert.*;
+
 /**
  * Assumes an index has been built stored and in the data folder, I've picked a fairly obscure bside so hopefully
  * will not get added to another release
  */
 public class FindLabelTest {
 
-  private AbstractSearchServer ss;
-  private AbstractDismaxSearchServer sd;
+    private AbstractSearchServer ss;
+    private AbstractDismaxSearchServer sd;
 
 
-  @Before
-  public void setUp() throws Exception {
-    RAMDirectory ramDir = new RAMDirectory();
-    Analyzer analyzer = DatabaseIndex.getAnalyzer(LabelIndexField.class);
-    IndexWriterConfig writerConfig = new IndexWriterConfig(LuceneVersion.LUCENE_VERSION, analyzer);
-    writerConfig.setSimilarity(new MusicbrainzSimilarity());
-    IndexWriter writer = new IndexWriter(ramDir, writerConfig);
+    @Before
+    public void setUp() throws Exception {
+        ObjectFactory of = new ObjectFactory();
+        RAMDirectory ramDir = new RAMDirectory();
+        Analyzer analyzer = DatabaseIndex.getAnalyzer(LabelIndexField.class);
+        IndexWriterConfig writerConfig = new IndexWriterConfig(LuceneVersion.LUCENE_VERSION, analyzer);
+        writerConfig.setSimilarity(new MusicbrainzSimilarity());
+        IndexWriter writer = new IndexWriter(ramDir, writerConfig);
 
-    {
-      MbDocument doc = new MbDocument();
-      doc.addField(LabelIndexField.LABEL_ID, "ff571ff4-04cb-4b9c-8a1c-354c330f863c");
-      doc.addField(LabelIndexField.LABEL, "Jockey Slut");
-      doc.addField(LabelIndexField.SORTNAME, "Slut, Jockey");
-      doc.addField(LabelIndexField.ALIAS, "Jockeys");
-      doc.addField(LabelIndexField.CODE, 1234);
-      doc.addField(LabelIndexField.BEGIN, "1993");
-      doc.addField(LabelIndexField.END, "2004");
-      doc.addField(LabelIndexField.ENDED, "true");
-      doc.addField(LabelIndexField.TYPE, "Production");
-      doc.addField(LabelIndexField.COUNTRY, "GB");
-      doc.addField(LabelIndexField.TAG, "dance");
-      doc.addField(LabelIndexField.TAGCOUNT, "22");
-      doc.addField(LabelIndexField.IPI, "1001");
+        {
+            MbDocument doc = new MbDocument();
 
-      writer.addDocument(doc.getLuceneDocument());
-    }
+            Label label = of.createLabel();
+            doc.addField(LabelIndexField.LABEL_ID, "ff571ff4-04cb-4b9c-8a1c-354c330f863c");
+            label.setId("ff571ff4-04cb-4b9c-8a1c-354c330f863c");
 
-    {
-      MbDocument doc = new MbDocument();
-      doc.addField(LabelIndexField.LABEL_ID, "a539bb1e-f2e1-4b45-9db8-8053841e7503");
-      doc.addField(LabelIndexField.LABEL, "4AD");
-      doc.addField(LabelIndexField.SORTNAME, "4AD");
-      doc.addField(LabelIndexField.BEGIN, "1979");
-      doc.addField(LabelIndexField.CODE, 5807);
-      doc.addField(LabelIndexField.TYPE, LabelType.PRODUCTION.getName());
-      doc.addField(LabelIndexField.COUNTRY, "unknown");
+            doc.addField(LabelIndexField.LABEL, "Jockey Slut");
+            label.setName("Jockey Slut");
 
-      writer.addDocument(doc.getLuceneDocument());
-    }
+            doc.addField(LabelIndexField.SORTNAME, "Slut, Jockey");
+            label.setSortName("Slut, Jockey");
 
-    {
-      MbDocument doc = new MbDocument();
-      doc.addField(LabelIndexField.LABEL_ID, "a539bb1e-f2e1-4b45-9db8-8053841e7504");
-      doc.addField(LabelIndexField.LABEL, "Dark Prism");
-      doc.addField(LabelIndexField.SORTNAME, "Dark Prism");
-      doc.addField(LabelIndexField.CODE, Index.NO_VALUE);
-      doc.addField(LabelIndexField.TYPE, LabelType.HOLDING.getName());
-      writer.addDocument(doc.getLuceneDocument());
-    }
+            doc.addField(LabelIndexField.ALIAS, "Jockeys");
+            AliasList aliasList = of.createAliasList();
+            Alias alias = of.createAlias();
+            aliasList.getAlias().add(alias);
+            alias.setContent("Jockeys");
+            label.setAliasList(aliasList);
 
-    {
-      MbDocument doc = new MbDocument();
-      doc.addField(LabelIndexField.LABEL_ID, "b539bb1e-f2e1-4b45-9db8-8053841e7504");
-      doc.addField(LabelIndexField.LABEL, "blob");
-      doc.addField(LabelIndexField.SORTNAME, "blob");
-      doc.addField(LabelIndexField.TYPE, "unknown");
-      writer.addDocument(doc.getLuceneDocument());
-    }
+            doc.addField(LabelIndexField.CODE, 1234);
+            label.setLabelCode(BigInteger.valueOf(1234));
 
-    {
-      MbDocument doc = new MbDocument();
-      doc.addField(MetaIndexField.META, MetaIndexField.META_VALUE);
-      doc.addNumericField(MetaIndexField.LAST_UPDATED, new Date().getTime());
-      writer.addDocument(doc.getLuceneDocument());
-    }
+            doc.addField(LabelIndexField.BEGIN, "1993");
+            doc.addField(LabelIndexField.END, "2004");
+            doc.addField(LabelIndexField.ENDED, "true");
+            LifeSpan lifespan = of.createLifeSpan();
+            label.setLifeSpan(lifespan);
+            lifespan.setBegin("1993");
+            lifespan.setEnd("2004");
+            lifespan.setEnded("true");
 
+            doc.addField(LabelIndexField.TYPE, "Production");
+            label.setType("Production");
 
-    writer.close();
-    SearcherManager searcherManager = new SearcherManager(ramDir, new MusicBrainzSearcherFactory(ResourceType.LABEL));
-    ss = new LabelSearch(searcherManager);
-    sd = new LabelDismaxSearch(ss);
-  }
+            doc.addField(LabelIndexField.COUNTRY, "GB");
+            label.setCountry("GB");
 
-  @Test
-  public void testFindLabelById() throws Exception {
-    Results res = ss.search("laid:\"ff571ff4-04cb-4b9c-8a1c-354c330f863c\"", 0, 10);
-    assertEquals(1, res.getTotalHits());
-    Result result = res.results.get(0);
-    MbDocument doc = result.getDoc();
-    assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
-    assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
-    assertEquals("1993", doc.get(LabelIndexField.BEGIN));
-    assertEquals("2004", doc.get(LabelIndexField.END));
-    assertEquals("Jockeys", doc.get(LabelIndexField.ALIAS));
-    assertNull(doc.get(LabelIndexField.COMMENT));
-    assertEquals("Slut, Jockey", doc.get(LabelIndexField.SORTNAME));
-    assertEquals("Production", doc.get(LabelIndexField.TYPE));
-  }
+            doc.addField(LabelIndexField.TAG, "dance");
+            TagList tagList = of.createTagList();
+            Tag tag = of.createTag();
+            tag.setName("dance");
+            tag.setCount(BigInteger.valueOf(22));
+            tagList.getTag().add(tag);
+            label.setTagList(tagList);
 
-  @Test
-  public void testFindLabelByName() throws Exception {
-    Results res = ss.search("label:\"Jockey Slut\"", 0, 10);
-    assertEquals(1, res.getTotalHits());
-    Result result = res.results.get(0);
-    MbDocument doc = result.getDoc();
-    assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
-    assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
-  }
+            doc.addField(LabelIndexField.IPI, "1001");
+            IpiList ipiList = of.createIpiList();
+            ipiList.getIpi().add("1001");
+            label.setIpiList(ipiList);
 
-  @Test
-  public void testFindLabelByDismax1() throws Exception {
-    Results res = sd.search("Jockey Slut", 0, 10);
-    assertEquals(1, res.getTotalHits());
-    Result result = res.results.get(0);
-    MbDocument doc = result.getDoc();
-    assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
-    assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
-  }
+            doc.addField(LabelIndexField.LABEL_STORE, MMDSerializer.serialize(label));
+            writer.addDocument(doc.getLuceneDocument());
+        }
 
-  @Test
-  public void testFindLabelByDismax2() throws Exception {
-    Results res = sd.search("Jockey", 0, 10);
-    assertEquals(1, res.getTotalHits());
-    Result result = res.results.get(0);
-    MbDocument doc = result.getDoc();
-    assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
-    assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
-  }
+        {
+            MbDocument doc = new MbDocument();
+            Label label = of.createLabel();
+            doc.addField(LabelIndexField.LABEL_ID, "a539bb1e-f2e1-4b45-9db8-8053841e7503");
+            label.setId("a539bb1e-f2e1-4b45-9db8-8053841e7503");
 
+            doc.addField(LabelIndexField.LABEL, "4AD");
+            label.setName("4AD");
+
+            doc.addField(LabelIndexField.SORTNAME, "4AD");
+            label.setSortName("4AD");
+
+            doc.addField(LabelIndexField.BEGIN, "1979");
+            doc.addField(LabelIndexField.CODE, 5807);
+            label.setLabelCode(BigInteger.valueOf(5807));
+
+            doc.addField(LabelIndexField.TYPE, "Production");
+            label.setType("Production");
+
+            doc.addField(LabelIndexField.COUNTRY, "unknown");
+            doc.addField(LabelIndexField.LABEL_STORE, MMDSerializer.serialize(label));
+            writer.addDocument(doc.getLuceneDocument());
+        }
+
+        {
+            MbDocument doc = new MbDocument();
+            Label label = of.createLabel();
+            doc.addField(LabelIndexField.LABEL_ID, "a539bb1e-f2e1-4b45-9db8-8053841e7504");
+            label.setId("a539bb1e-f2e1-4b45-9db8-8053841e7504");
+
+            doc.addField(LabelIndexField.LABEL, "Dark Prism");
+            label.setName("Dark Prism");
+
+            doc.addField(LabelIndexField.SORTNAME, "Dark Prism");
+            label.setSortName("Dark Prism");
+
+            doc.addField(LabelIndexField.CODE, Index.NO_VALUE);
+            doc.addField(LabelIndexField.TYPE, LabelType.HOLDING.getName());
+            label.setType("Holding");
+
+            doc.addField(LabelIndexField.LABEL_STORE, MMDSerializer.serialize(label));
+            writer.addDocument(doc.getLuceneDocument());
+        }
+
+        {
+            MbDocument doc = new MbDocument();
+            Label label = of.createLabel();
+            doc.addField(LabelIndexField.LABEL_ID, "b539bb1e-f2e1-4b45-9db8-8053841e7504");
+            label.setId("b539bb1e-f2e1-4b45-9db8-8053841e7504");
+
+            doc.addField(LabelIndexField.LABEL, "blob");
+            label.setName("blob");
+
+            doc.addField(LabelIndexField.SORTNAME, "blob");
+            label.setSortName("blob");
+
+            doc.addField(LabelIndexField.TYPE, "unknown");
+            doc.addField(LabelIndexField.LABEL_STORE, MMDSerializer.serialize(label));
+            writer.addDocument(doc.getLuceneDocument());
+        }
+
+        {
+            MbDocument doc = new MbDocument();
+            Label label = of.createLabel();
+            doc.addField(MetaIndexField.META, MetaIndexField.META_VALUE);
+            doc.addNumericField(MetaIndexField.LAST_UPDATED, new Date().getTime());
+            doc.addField(LabelIndexField.LABEL_STORE, MMDSerializer.serialize(label));
+            writer.addDocument(doc.getLuceneDocument());
+        }
+
+
+        writer.close();
+        SearcherManager searcherManager = new SearcherManager(ramDir, new MusicBrainzSearcherFactory(ResourceType.LABEL));
+        ss = new LabelSearch(searcherManager);
+        sd = new LabelDismaxSearch(ss);
+    }
+
     @Test
-    public void testFindLabelByDismax3() throws Exception {
-        Results res = sd.search("1234", 0, 10);
+    public void testFindLabelById() throws Exception {
+        Results res = ss.search("laid:\"ff571ff4-04cb-4b9c-8a1c-354c330f863c\"", 0, 10);
         assertEquals(1, res.getTotalHits());
         Result result = res.results.get(0);
         MbDocument doc = result.getDoc();
@@ -166,382 +184,420 @@
         assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
     }
 
-  @Test
-  public void testFindLabelByDefault() throws Exception {
+    @Test
+    public void testFindLabelByName() throws Exception {
+        Results res = ss.search("label:\"Jockey Slut\"", 0, 10);
+        assertEquals(1, res.getTotalHits());
+        Result result = res.results.get(0);
+        MbDocument doc = result.getDoc();
+        assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
+        assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
+    }
 
-    {
-      Results res = ss.search("\"Jockey Slut\"", 0, 10);
-      assertEquals(1, res.getTotalHits());
-      Result result = res.results.get(0);
-      MbDocument doc = result.getDoc();
-      assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
-      assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
+    @Test
+    public void testFindLabelByDismax1() throws Exception {
+        Results res = sd.search("Jockey Slut", 0, 10);
+        assertEquals(1, res.getTotalHits());
+        Result result = res.results.get(0);
+        MbDocument doc = result.getDoc();
+        assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
+        assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
     }
 
-    {
-      Results res = ss.search("\"Slut Jockey\"", 0, 10);
-      assertEquals(1, res.getTotalHits());
-      Result result = res.results.get(0);
-      MbDocument doc = result.getDoc();
-      assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
-      assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
+    @Test
+    public void testFindLabelByDismax2() throws Exception {
+        Results res = sd.search("Jockey", 0, 10);
+        assertEquals(1, res.getTotalHits());
+        Result result = res.results.get(0);
+        MbDocument doc = result.getDoc();
+        assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
+        assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
     }
 
-    {
-      Results res = ss.search("\"Jockeys\"", 0, 10);
-      assertEquals(1, res.getTotalHits());
-      Result result = res.results.get(0);
-      MbDocument doc = result.getDoc();
-      assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
-      assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
+    @Test
+    public void testFindLabelByDismax3() throws Exception {
+        Results res = sd.search("1234", 0, 10);
+        assertEquals(1, res.getTotalHits());
+        Result result = res.results.get(0);
+        MbDocument doc = result.getDoc();
+        assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
+        assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
     }
-  }
 
-  @Test
-  public void testFindLabelByType() throws Exception {
-    Results res = ss.search("type:\"production\"", 0, 10);
-    assertEquals(2, res.getTotalHits());
-    Result result = res.results.get(0);
-    MbDocument doc = result.getDoc();
+    @Test
+    public void testFindLabelByDefault() throws Exception {
 
-    //(This will always come first because searcher sots by score and then docno, and this doc added first)
-    assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
-    assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
-  }
+        {
+            Results res = ss.search("\"Jockey Slut\"", 0, 10);
+            assertEquals(1, res.getTotalHits());
+            Result result = res.results.get(0);
+            MbDocument doc = result.getDoc();
+            assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
+            assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
+        }
 
-  @Test
-  public void testFindLabelByIpi() throws Exception {
-    Results res = ss.search("ipi:1001", 0, 10);
-    assertEquals(1, res.getTotalHits());
-    Result result = res.results.get(0);
-    MbDocument doc = result.getDoc();
+        {
+            Results res = ss.search("\"Slut Jockey\"", 0, 10);
+            assertEquals(1, res.getTotalHits());
+            Result result = res.results.get(0);
+            MbDocument doc = result.getDoc();
+            assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
+            assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
+        }
 
-    //(This will always come first because searcher sots by score and then docno, and this doc added first)
-    assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
-    assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
-  }
+        {
+            Results res = ss.search("\"Jockeys\"", 0, 10);
+            assertEquals(1, res.getTotalHits());
+            Result result = res.results.get(0);
+            MbDocument doc = result.getDoc();
+            assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
+            assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
+        }
+    }
 
-  @Test
-  public void testFindLabelByNumericType() throws Exception {
-    Results res = ss.search("type:3", 0, 10);
-    assertEquals(2, res.getTotalHits());
-    Result result = res.results.get(0);
-    MbDocument doc = result.getDoc();
+    @Test
+    public void testFindLabelByType() throws Exception {
+        Results res = ss.search("type:\"production\"", 0, 10);
+        assertEquals(2, res.getTotalHits());
+        Result result = res.results.get(0);
+        MbDocument doc = result.getDoc();
 
-    //(This will always come first because searcher sots by score and then docno, and this doc added first)
-    assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
-    assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
-  }
+        //(This will always come first because searcher sots by score and then docno, and this doc added first)
+        assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
+        assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
+    }
 
-  @Test
-  public void testFindLabelBySortname() throws Exception {
-    Results res = ss.search("sortname:\"Slut, Jockey\"", 0, 10);
-    assertEquals(1, res.getTotalHits());
-    Result result = res.results.get(0);
-    MbDocument doc = result.getDoc();
-    assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
-    assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
-  }
+    @Test
+    public void testFindLabelByIpi() throws Exception {
+        Results res = ss.search("ipi:1001", 0, 10);
+        assertEquals(1, res.getTotalHits());
+        Result result = res.results.get(0);
+        MbDocument doc = result.getDoc();
 
-  @Test
-  public void testFindLabelByCountry() throws Exception {
-    Results res = ss.search("country:\"gb\"", 0, 10);
-    assertEquals(1, res.getTotalHits());
-    Result result = res.results.get(0);
-    MbDocument doc = result.getDoc();
-    assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
-    assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
-  }
+        //(This will always come first because searcher sots by score and then docno, and this doc added first)
+        assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
+        assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
+    }
 
-  @Test
-  public void testFindLabelByUnknownCountry() throws Exception {
-    Results res = ss.search("country:\"unknown\"", 0, 10);
-    assertEquals(1, res.getTotalHits());
-    Result result = res.results.get(0);
-    MbDocument doc = result.getDoc();
-    assertEquals("a539bb1e-f2e1-4b45-9db8-8053841e7503", doc.get(LabelIndexField.LABEL_ID));
-  }
+    @Test
+    public void testFindLabelByNumericType() throws Exception {
+        Results res = ss.search("type:3", 0, 10);
+        assertEquals(2, res.getTotalHits());
+        Result result = res.results.get(0);
+        MbDocument doc = result.getDoc();
 
-  @Test
-  public void testFindLabelByCountryUpercase() throws Exception {
-    Results res = ss.search("country:\"GB\"", 0, 10);
-    assertEquals(1, res.getTotalHits());
-    Result result = res.results.get(0);
-    MbDocument doc = result.getDoc();
-    assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
-    assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
-  }
+        //(This will always come first because searcher sots by score and then docno, and this doc added first)
+        assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
+        assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
+    }
 
-  @Test
-  public void testFindLabelByCode() throws Exception {
-    Results res = ss.search("code:5807", 0, 10);
-    assertEquals(1, res.getTotalHits());
-    Result result = res.results.get(0);
-    MbDocument doc = result.getDoc();
-    assertEquals("a539bb1e-f2e1-4b45-9db8-8053841e7503", doc.get(LabelIndexField.LABEL_ID));
-    assertEquals("4AD", doc.get(LabelIndexField.LABEL));
-  }
+    @Test
+    public void testFindLabelBySortname() throws Exception {
+        Results res = ss.search("sortname:\"Slut, Jockey\"", 0, 10);
+        assertEquals(1, res.getTotalHits());
+        Result result = res.results.get(0);
+        MbDocument doc = result.getDoc();
+        assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
+        assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
+    }
 
-  @Test
-  public void testFindLabelByCode2() throws Exception {
-    Results res = ss.search("code:05807", 0, 10);
-    assertEquals(1, res.getTotalHits());
-    Result result = res.results.get(0);
-    MbDocument doc = result.getDoc();
-    assertEquals("a539bb1e-f2e1-4b45-9db8-8053841e7503", doc.get(LabelIndexField.LABEL_ID));
-    assertEquals("4AD", doc.get(LabelIndexField.LABEL));
-  }
+    @Test
+    public void testFindLabelByCountry() throws Exception {
+        Results res = ss.search("country:\"gb\"", 0, 10);
+        assertEquals(1, res.getTotalHits());
+        Result result = res.results.get(0);
+        MbDocument doc = result.getDoc();
+        assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
+        assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
+    }
 
-  @Test
-  public void testFindLabelByCode3() throws Exception {
-    Results res = ss.search("code:005807", 0, 10);
-    assertEquals(1, res.getTotalHits());
-    Result result = res.results.get(0);
-    MbDocument doc = result.getDoc();
-    assertEquals("a539bb1e-f2e1-4b45-9db8-8053841e7503", doc.get(LabelIndexField.LABEL_ID));
-    assertEquals("4AD", doc.get(LabelIndexField.LABEL));
-  }
+    @Test
+    public void testFindLabelByUnknownCountry() throws Exception {
+        Results res = ss.search("country:\"unknown\"", 0, 10);
+        assertEquals(1, res.getTotalHits());
+        Result result = res.results.get(0);
+        MbDocument doc = result.getDoc();
+        assertEquals("a539bb1e-f2e1-4b45-9db8-8053841e7503", doc.get(LabelIndexField.LABEL_ID));
+    }
 
-  @Test
-  public void testFindLabelByCodeRange() throws Exception {
-      try {
-    Results res = ss.search("code:[5806 TO 5807]", 0, 10);
-    assertEquals(1, res.getTotalHits());
-    Result result = res.results.get(0);
-    MbDocument doc = result.getDoc();
-    assertEquals("a539bb1e-f2e1-4b45-9db8-8053841e7503", doc.get(LabelIndexField.LABEL_ID));
-    assertEquals("4AD", doc.get(LabelIndexField.LABEL));
-      }
-      catch(Exception ex)
-      {
-          ex.printStackTrace();
-      }
-  }
+    @Test
+    public void testFindLabelByCountryUpercase() throws Exception {
+        Results res = ss.search("country:\"GB\"", 0, 10);
+        assertEquals(1, res.getTotalHits());
+        Result result = res.results.get(0);
+        MbDocument doc = result.getDoc();
+        assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
+        assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
+    }
 
-  @Test
-  public void testFindLabelByZeroedCode() throws Exception {
-    Results res = ss.search("code:\"05807\"", 0, 10);
-    assertEquals(1, res.getTotalHits());
-    Result result = res.results.get(0);
-    MbDocument doc = result.getDoc();
-    assertEquals("a539bb1e-f2e1-4b45-9db8-8053841e7503", doc.get(LabelIndexField.LABEL_ID));
-    assertEquals("4AD", doc.get(LabelIndexField.LABEL));
-  }
+    @Test
+    public void testFindLabelByCode() throws Exception {
+        Results res = ss.search("code:5807", 0, 10);
+        assertEquals(1, res.getTotalHits());
+        Result result = res.results.get(0);
+        MbDocument doc = result.getDoc();
+        assertEquals("a539bb1e-f2e1-4b45-9db8-8053841e7503", doc.get(LabelIndexField.LABEL_ID));
+        assertEquals("4AD", doc.get(LabelIndexField.LABEL));
+    }
 
-  @Test
-  public void testFindLabelByTag() throws Exception {
-    Results res = ss.search("tag:dance", 0, 10);
-    assertEquals(1, res.getTotalHits());
-    Result result = res.results.get(0);
-    MbDocument doc = result.getDoc();
-    assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
-    assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
-  }
+    @Test
+    public void testFindLabelByCode2() throws Exception {
+        Results res = ss.search("code:05807", 0, 10);
+        assertEquals(1, res.getTotalHits());
+        Result result = res.results.get(0);
+        MbDocument doc = result.getDoc();
+        assertEquals("a539bb1e-f2e1-4b45-9db8-8053841e7503", doc.get(LabelIndexField.LABEL_ID));
+        assertEquals("4AD", doc.get(LabelIndexField.LABEL));
+    }
 
-  @Test
-  public void testFindLabelByEnded() throws Exception {
-    Results res = ss.search("ended:\"true\"", 0, 10);
-    assertEquals(1, res.getTotalHits());
-    Result result = res.results.get(0);
-    MbDocument doc = result.getDoc();
-    assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
-  }
+    @Test
+    public void testFindLabelByCode3() throws Exception {
+        Results res = ss.search("code:005807", 0, 10);
+        assertEquals(1, res.getTotalHits());
+        Result result = res.results.get(0);
+        MbDocument doc = result.getDoc();
+        assertEquals("a539bb1e-f2e1-4b45-9db8-8053841e7503", doc.get(LabelIndexField.LABEL_ID));
+        assertEquals("4AD", doc.get(LabelIndexField.LABEL));
+    }
 
+    @Test
+    public void testFindLabelByCodeRange() throws Exception {
+        try {
+            Results res = ss.search("code:[5806 TO 5807]", 0, 10);
+            assertEquals(1, res.getTotalHits());
+            Result result = res.results.get(0);
+            MbDocument doc = result.getDoc();
+            assertEquals("a539bb1e-f2e1-4b45-9db8-8053841e7503", doc.get(LabelIndexField.LABEL_ID));
+            assertEquals("4AD", doc.get(LabelIndexField.LABEL));
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
 
-  public void testIssue66() throws Exception {
-    Results res = ss.search("dark", 0, 10);
-    assertEquals(1, res.getTotalHits());
-    ResultsWriter writer = new LabelMmd1XmlWriter();
-    StringWriter sw = new StringWriter();
-    PrintWriter pr = new PrintWriter(sw);
-    writer.write(pr, res);
-    pr.close();
-    String output = sw.toString();
-    assertTrue(output.contains("<name>Dark Prism</name>"));
+    @Test
+    public void testFindLabelByZeroedCode() throws Exception {
+        Results res = ss.search("code:\"05807\"", 0, 10);
+        assertEquals(1, res.getTotalHits());
+        Result result = res.results.get(0);
+        MbDocument doc = result.getDoc();
+        assertEquals("a539bb1e-f2e1-4b45-9db8-8053841e7503", doc.get(LabelIndexField.LABEL_ID));
+        assertEquals("4AD", doc.get(LabelIndexField.LABEL));
+    }
 
-    writer = new LabelWriter();
-    sw = new StringWriter();
-    pr = new PrintWriter(sw);
-    writer.write(pr, res);
-    pr.close();
-    assertTrue(output.contains("<name>Dark Prism</name>"));
+    @Test
+    public void testFindLabelByTag() throws Exception {
+        Results res = ss.search("tag:dance", 0, 10);
+        assertEquals(1, res.getTotalHits());
+        Result result = res.results.get(0);
+        MbDocument doc = result.getDoc();
+        assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
+        assertEquals("Jockey Slut", doc.get(LabelIndexField.LABEL));
+    }
 
-  }
+    @Test
+    public void testFindLabelByEnded() throws Exception {
+        Results res = ss.search("ended:\"true\"", 0, 10);
+        assertEquals(1, res.getTotalHits());
+        Result result = res.results.get(0);
+        MbDocument doc = result.getDoc();
+        assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(LabelIndexField.LABEL_ID));
+    }
 
 
-  /**
-   * Tests get same results as
-   * http://musicbrainz.org/ws/1/label/?type=xml&query=%22Jockey%20Slut%22
-   *
-   * @throws Exception exeption
-   */
-  @Test
-  public void testOutputAsMmd1Xml() throws Exception {
+    public void testIssue66() throws Exception {
+        Results res = ss.search("dark", 0, 10);
+        assertEquals(1, res.getTotalHits());
+        ResultsWriter writer = new LabelMmd1XmlWriter();
+        StringWriter sw = new StringWriter();
+        PrintWriter pr = new PrintWriter(sw);
+        writer.write(pr, res);
+        pr.close();
+        String output = sw.toString();
+        assertTrue(output.contains("<name>Dark Prism</name>"));
 
-    Results res = ss.search("label:\"Jockey Slut\"", 0, 1);
-    ResultsWriter writer = new LabelMmd1XmlWriter();
-    StringWriter sw = new StringWriter();
-    PrintWriter pr = new PrintWriter(sw);
-    writer.write(pr, res);
-    pr.close();
-    String output = sw.toString();
-    //System.out.println("Xml is" + output);
-    assertTrue(output.contains("count=\"1\""));
-    assertTrue(output.contains("offset=\"0\""));
-    assertTrue(output.contains("id=\"ff571ff4-04cb-4b9c-8a1c-354c330f863c\""));
-    assertTrue(output.contains("type=\"Production\""));
-    assertTrue(output.contains("<name>Jockey Slut</name>"));
-    assertTrue(output.contains("<sort-name>Slut, Jockey</sort-name>"));
-    assertTrue(output.contains("begin=\"1993\""));
-    assertTrue(output.contains("end=\"2004\""));
-  }
+        writer = new LabelWriter();
+        sw = new StringWriter();
+        pr = new PrintWriter(sw);
+        writer.write(pr, res);
+        pr.close();
+        assertTrue(output.contains("<name>Dark Prism</name>"));
 
-  /**
-   * Tests get same results as
-   * http://musicbrainz.org/ws/1/label/?type=xml&query=%22Jockey%20Slut%22
-   *
-   * @throws Exception exception
-   */
-  @Test
-  public void testOutputAsXml() throws Exception {
+    }
 
-    Results res = ss.search("label:\"Jockey Slut\"", 0, 1);
-    ResultsWriter writer = ss.getMmd2Writer();
-    StringWriter sw = new StringWriter();
-    PrintWriter pr = new PrintWriter(sw);
-    writer.write(pr, res);
-    pr.close();
-    String output = sw.toString();
-    System.out.println("Xml is" + output);
-    assertTrue(output.contains("count=\"1\""));
-    assertTrue(output.contains("offset=\"0\""));
-    assertTrue(output.contains("xmlns:ext=\"http://musicbrainz.org/ns/ext#-2.0\""));
-    assertTrue(output.contains("id=\"ff571ff4-04cb-4b9c-8a1c-354c330f863c\""));
-    assertTrue(output.contains("type=\"Production\""));
-    assertTrue(output.contains("<name>Jockey Slut</name>"));
-    assertTrue(output.contains("<sort-name>Slut, Jockey</sort-name>"));
-    assertTrue(output.contains("<alias>Jockeys</alias>"));
-    assertTrue(output.contains("<begin>1993</begin"));
-    assertTrue(output.contains("<end>2004</end>"));
-    assertTrue(output.contains("<label-code>1234</label-code>"));
-    assertTrue(output.contains("<country>GB</country>"));
-    assertTrue(output.contains("<ended>true</ended>"));
-    assertTrue(output.contains("dance</name>"));
-    assertTrue(output.contains("<ipi-list><ipi>1001</ipi></ipi-list>"));
-  }
 
-  @Test
-  public void testOutputAsXmlWithUnknownCountry() throws Exception {
+    /**
+     * Tests get same results as
+     * http://musicbrainz.org/ws/1/label/?type=xml&query=%22Jockey%20Slut%22
+     *
+     * @throws Exception exeption
+     */
+    @Test
+    public void testOutputAsMmd1Xml() throws Exception {
 
-    Results res = ss.search("laid:a539bb1e-f2e1-4b45-9db8-8053841e7503", 0, 1);
-    ResultsWriter writer = ss.getMmd2Writer();
-    StringWriter sw = new StringWriter();
-    PrintWriter pr = new PrintWriter(sw);
-    writer.write(pr, res);
-    pr.close();
-    String output = sw.toString();
-    System.out.println("Xml is" + output);
-    assertTrue(output.contains("count=\"1\""));
-    assertTrue(output.contains("offset=\"0\""));
-    assertTrue(output.contains("xmlns:ext=\"http://musicbrainz.org/ns/ext#-2.0\""));
-    assertTrue(output.contains("id=\"a539bb1e-f2e1-4b45-9db8-8053841e7503\""));
-    assertFalse(output.contains("<country>"));
-  }
+        Results res = ss.search("label:\"Jockey Slut\"", 0, 1);
+        ResultsWriter writer = new LabelMmd1XmlWriter();
+        StringWriter sw = new StringWriter();
+        PrintWriter pr = new PrintWriter(sw);
+        writer.write(pr, res);
+        pr.close();
+        String output = sw.toString();
+        //System.out.println("Xml is" + output);
+        assertTrue(output.contains("count=\"1\""));
+        assertTrue(output.contains("offset=\"0\""));
+        assertTrue(output.contains("id=\"ff571ff4-04cb-4b9c-8a1c-354c330f863c\""));
+        assertTrue(output.contains("type=\"Production\""));
+        assertTrue(output.contains("<name>Jockey Slut</name>"));
+        assertTrue(output.contains("<sort-name>Slut, Jockey</sort-name>"));
+        assertTrue(output.contains("begin=\"1993\""));
+        assertTrue(output.contains("end=\"2004\""));
+    }
 
-  @Test
-  public void testOutputAsMMd1XmlWithUnknownType() throws Exception {
+    /**
+     * Tests get same results as
+     * http://musicbrainz.org/ws/1/label/?type=xml&query=%22Jockey%20Slut%22
+     *
+     * @throws Exception exception
+     */
+    @Test
+    public void testOutputAsXml() throws Exception {
 
-    Results res = ss.search("blob", 0, 1);
-    ResultsWriter writer = new LabelMmd1XmlWriter();
-    StringWriter sw = new StringWriter();
-    PrintWriter pr = new PrintWriter(sw);
-    writer.write(pr, res);
-    pr.close();
-    String output = sw.toString();
-    System.out.println("Xml is" + output);
-    assertTrue(output.contains("count=\"1\""));
-    assertTrue(output.contains("offset=\"0\""));
-    assertFalse(output.contains("label type"));
-  }
+        Results res = ss.search("label:\"Jockey Slut\"", 0, 1);
+        ResultsWriter writer = ss.getMmd2Writer();
+        StringWriter sw = new StringWriter();
+        PrintWriter pr = new PrintWriter(sw);
+        writer.write(pr, res);
+        pr.close();
+        String output = sw.toString();
+        System.out.println("Xml is" + output);
+        assertTrue(output.contains("count=\"1\""));
+        assertTrue(output.contains("offset=\"0\""));
+        assertTrue(output.contains("xmlns:ext=\"http://musicbrainz.org/ns/ext#-2.0\""));
+        assertTrue(output.contains("id=\"ff571ff4-04cb-4b9c-8a1c-354c330f863c\""));
+        assertTrue(output.contains("type=\"Production\""));
+        assertTrue(output.contains("<name>Jockey Slut</name>"));
+        assertTrue(output.contains("<sort-name>Slut, Jockey</sort-name>"));
+        assertTrue(output.contains("<alias>Jockeys</alias>"));
+        assertTrue(output.contains("<begin>1993</begin"));
+        assertTrue(output.contains("<end>2004</end>"));
+        assertTrue(output.contains("<label-code>1234</label-code>"));
+        assertTrue(output.contains("<country>GB</country>"));
+        assertTrue(output.contains("<ended>true</ended>"));
+        assertTrue(output.contains("dance</name>"));
+        assertTrue(output.contains("<ipi-list><ipi>1001</ipi></ipi-list>"));
+    }
 
-  /**
-   * @throws Exception exception
-   */
-  @Test
-  public void testOutputJson() throws Exception {
+    @Test
+    public void testOutputAsXmlWithUnknownCountry() throws Exception {
 
-    Results res = ss.search("label:\"Jockey Slut\"", 0, 10);
-    org.musicbrainz.search.servlet.mmd2.ResultsWriter writer = ss.getMmd2Writer();
-    StringWriter sw = new StringWriter();
-    PrintWriter pr = new PrintWriter(sw);
-    writer.write(pr, res, SearchServerServlet.RESPONSE_JSON);
-    pr.close();
+        Results res = ss.search("laid:a539bb1e-f2e1-4b45-9db8-8053841e7503", 0, 1);
+        ResultsWriter writer = ss.getMmd2Writer();
+        StringWriter sw = new StringWriter();
+        PrintWriter pr = new PrintWriter(sw);
+        writer.write(pr, res);
+        pr.close();
+        String output = sw.toString();
+        System.out.println("Xml is" + output);
+        assertTrue(output.contains("count=\"1\""));
+        assertTrue(output.contains("offset=\"0\""));
+        assertTrue(output.contains("xmlns:ext=\"http://musicbrainz.org/ns/ext#-2.0\""));
+        assertTrue(output.contains("id=\"a539bb1e-f2e1-4b45-9db8-8053841e7503\""));
+        assertFalse(output.contains("<country>"));
+    }
 
-    String output = sw.toString();
-    System.out.println("Json is" + output);
+    @Test
+    public void testOutputAsMMd1XmlWithUnknownType() throws Exception {
 
-    assertTrue(output.contains("id\":\"ff571ff4-04cb-4b9c-8a1c-354c330f863c\""));
-    assertTrue(output.contains("\"count\":1"));
-    assertTrue(output.contains("\"offset\":0,"));
-    assertTrue(output.contains("\"type\":\"Production\""));
-    assertTrue(output.contains("name\":\"Jockey Slut\""));
-    assertTrue(output.contains("\"sort-name\":\"Slut, Jockey\""));
-    assertTrue(output.contains("life-span\":{\"begin\":\"1993\""));
-    assertTrue(output.contains("\"label-code\":1234"));
-    assertTrue(output.contains("\"country\":\"GB\""));
-    assertTrue(output.contains("tag-list\":{\"tag\":[{\"count\":22,\"name\":\"dance\"}"));
-    assertTrue(output.contains("\"ended\":\"true\""));
-  }
+        Results res = ss.search("blob", 0, 1);
+        ResultsWriter writer = new LabelMmd1XmlWriter();
+        StringWriter sw = new StringWriter();
+        PrintWriter pr = new PrintWriter(sw);
+        writer.write(pr, res);
+        pr.close();
+        String output = sw.toString();
+        System.out.println("Xml is" + output);
+        assertTrue(output.contains("count=\"1\""));
+        assertTrue(output.contains("offset=\"0\""));
+        assertFalse(output.contains("label type"));
+    }
 
-  /**
-   * @throws Exception exception
-   */
-  @Test
-  public void testOutputJsonNew() throws Exception {
+    /**
+     * @throws Exception exception
+     */
+    @Test
+    public void testOutputJson() throws Exception {
 
-    Results res = ss.search("label:\"Jockey Slut\"", 0, 10);
-    org.musicbrainz.search.servlet.mmd2.ResultsWriter writer = ss.getMmd2Writer();
-    StringWriter sw = new StringWriter();
-    PrintWriter pr = new PrintWriter(sw);
-    writer.write(pr, res, SearchServerServlet.RESPONSE_JSON_NEW);
-    pr.close();
+        Results res = ss.search("label:\"Jockey Slut\"", 0, 10);
+        org.musicbrainz.search.servlet.mmd2.ResultsWriter writer = ss.getMmd2Writer();
+        StringWriter sw = new StringWriter();
+        PrintWriter pr = new PrintWriter(sw);
+        writer.write(pr, res, SearchServerServlet.RESPONSE_JSON);
+        pr.close();
 
-    String output = sw.toString();
-    System.out.println("Json New is" + output);
+        String output = sw.toString();
+        System.out.println("Json is" + output);
 
-    assertTrue(output.contains("id\":\"ff571ff4-04cb-4b9c-8a1c-354c330f863c\""));
-    assertTrue(output.contains("\"type\":\"Production\""));
-    assertTrue(output.contains("name\":\"Jockey Slut\""));
-    assertTrue(output.contains("\"sort-name\":\"Slut, Jockey\""));
-    assertTrue(output.contains("life-span\":{\"begin\":\"1993\""));
-    assertTrue(output.contains("\"country\":\"GB\""));
-    assertTrue(output.contains("\"tags\":[{\"count\":22,\"name\":\"dance\"}]"));
-    assertTrue(output.contains("\"ended\":true"));
-    assertTrue(output.contains("\"ipis\":[\"1001\""));
-    assertTrue(output.contains("\"aliases\":[\"Jockeys\"]"));
-    assertTrue(output.contains("\"end\":\"2004\""));
-    assertTrue(output.contains("\"label-code\":1234"));
-    assertTrue(output.contains("\"count\":1"));
-    assertTrue(output.contains("\"offset\":0,"));
+        assertTrue(output.contains("id\":\"ff571ff4-04cb-4b9c-8a1c-354c330f863c\""));
+        assertTrue(output.contains("\"count\":1"));
+        assertTrue(output.contains("\"offset\":0,"));
+        assertTrue(output.contains("\"type\":\"Production\""));
+        assertTrue(output.contains("name\":\"Jockey Slut\""));
+        assertTrue(output.contains("\"sort-name\":\"Slut, Jockey\""));
+        assertTrue(output.contains("life-span\":{\"begin\":\"1993\""));
+        assertTrue(output.contains("\"label-code\":1234"));
+        assertTrue(output.contains("\"country\":\"GB\""));
+        assertTrue(output.contains("tag-list\":{\"tag\":[{\"count\":22,\"name\":\"dance\"}"));
+        assertTrue(output.contains("\"ended\":\"true\""));
+    }
 
-  }
+    /**
+     * @throws Exception exception
+     */
+    @Test
+    public void testOutputJsonNew() throws Exception {
 
-  /**
-   * @throws Exception exception
-   */
-  @Test
-  public void testOutputJsonNewIdent() throws Exception {
+        Results res = ss.search("label:\"Jockey Slut\"", 0, 10);
+        org.musicbrainz.search.servlet.mmd2.ResultsWriter writer = ss.getMmd2Writer();
+        StringWriter sw = new StringWriter();
+        PrintWriter pr = new PrintWriter(sw);
+        writer.write(pr, res, SearchServerServlet.RESPONSE_JSON_NEW);
+        pr.close();
 
-    Results res = ss.search("label:\"Jockey Slut\"", 0, 10);
-    org.musicbrainz.search.servlet.mmd2.ResultsWriter writer = ss.getMmd2Writer();
-    StringWriter sw = new StringWriter();
-    PrintWriter pr = new PrintWriter(sw);
-    writer.write(pr, res, SearchServerServlet.RESPONSE_JSON_NEW,true);
-    pr.close();
+        String output = sw.toString();
+        System.out.println("Json New is" + output);
 
-    String output = sw.toString();
-    System.out.println("Json New Ident is" + output);
-    assertTrue(output.contains("\"offset\" : 0"));
+        assertTrue(output.contains("id\":\"ff571ff4-04cb-4b9c-8a1c-354c330f863c\""));
+        assertTrue(output.contains("\"type\":\"Production\""));
+        assertTrue(output.contains("name\":\"Jockey Slut\""));
+        assertTrue(output.contains("\"sort-name\":\"Slut, Jockey\""));
+        assertTrue(output.contains("life-span\":{\"begin\":\"1993\""));
+        assertTrue(output.contains("\"country\":\"GB\""));
+        assertTrue(output.contains("\"tags\":[{\"count\":22,\"name\":\"dance\"}]"));
+        assertTrue(output.contains("\"ended\":true"));
+        assertTrue(output.contains("\"ipis\":[\"1001\""));
+        assertTrue(output.contains("\"aliases\":[{\"locale\":\"\",\"type\":\"\",\"primary\":\"false\",\"begin-date\":\"\",\"end-date\":\"\",\"value\":\"Jockeys\"}]"));
+        assertTrue(output.contains("\"end\":\"2004\""));
+        assertTrue(output.contains("\"label-code\":1234"));
+        assertTrue(output.contains("\"count\":1"));
+        assertTrue(output.contains("\"offset\":0,"));
 
-  }
+    }
+
+    /**
+     * @throws Exception exception
+     */
+    @Test
+    public void testOutputJsonNewIdent() throws Exception {
+
+        Results res = ss.search("label:\"Jockey Slut\"", 0, 10);
+        org.musicbrainz.search.servlet.mmd2.ResultsWriter writer = ss.getMmd2Writer();
+        StringWriter sw = new StringWriter();
+        PrintWriter pr = new PrintWriter(sw);
+        writer.write(pr, res, SearchServerServlet.RESPONSE_JSON_NEW, true);
+        pr.close();
+
+        String output = sw.toString();
+        System.out.println("Json New Ident is" + output);
+        assertTrue(output.contains("\"offset\" : 0"));
+
+    }
 }
\ No newline at end of file

Modified: search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/SearchAll2Test.java
===================================================================
--- search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/SearchAll2Test.java	2013-05-09 11:15:51 UTC (rev 13680)
+++ search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/SearchAll2Test.java	2013-05-09 14:50:05 UTC (rev 13681)
@@ -60,52 +60,117 @@
 
             {
                 MbDocument doc = new MbDocument();
+
+                Label label = of.createLabel();
                 doc.addField(LabelIndexField.LABEL_ID, "ff571ff4-04cb-4b9c-8a1c-354c330f863c");
+                label.setId("ff571ff4-04cb-4b9c-8a1c-354c330f863c");
+
                 doc.addField(LabelIndexField.LABEL, "Jockey Slut");
+                label.setName("Jockey Slut");
+
                 doc.addField(LabelIndexField.SORTNAME, "Slut, Jockey");
+                label.setSortName("Slut, Jockey");
+
                 doc.addField(LabelIndexField.ALIAS, "Jockeys");
+                AliasList aliasList = of.createAliasList();
+                Alias alias = of.createAlias();
+                aliasList.getAlias().add(alias);
+                alias.setContent("Jockeys");
+                label.setAliasList(aliasList);
+
                 doc.addField(LabelIndexField.CODE, 1234);
+                label.setLabelCode(BigInteger.valueOf(1234));
+
                 doc.addField(LabelIndexField.BEGIN, "1993");
                 doc.addField(LabelIndexField.END, "2004");
                 doc.addField(LabelIndexField.ENDED, "true");
+                LifeSpan lifespan = of.createLifeSpan();
+                label.setLifeSpan(lifespan);
+                lifespan.setBegin("1993");
+                lifespan.setEnd("2004");
+                lifespan.setEnded("true");
+
                 doc.addField(LabelIndexField.TYPE, "Production");
+                label.setType("Production");
+
                 doc.addField(LabelIndexField.COUNTRY, "GB");
+                label.setCountry("GB");
+
                 doc.addField(LabelIndexField.TAG, "dance");
-                doc.addField(LabelIndexField.TAGCOUNT, "22");
+                TagList tagList = of.createTagList();
+                Tag tag = of.createTag();
+                tag.setName("dance");
+                tag.setCount(BigInteger.valueOf(22));
+                tagList.getTag().add(tag);
+                label.setTagList(tagList);
+
                 doc.addField(LabelIndexField.IPI, "1001");
+                IpiList ipiList = of.createIpiList();
+                ipiList.getIpi().add("1001");
+                label.setIpiList(ipiList);
 
+                doc.addField(LabelIndexField.LABEL_STORE, MMDSerializer.serialize(label));
                 writer.addDocument(doc.getLuceneDocument());
             }
 
             {
                 MbDocument doc = new MbDocument();
+                Label label = of.createLabel();
                 doc.addField(LabelIndexField.LABEL_ID, "a539bb1e-f2e1-4b45-9db8-8053841e7503");
+                label.setId("a539bb1e-f2e1-4b45-9db8-8053841e7503");
+
                 doc.addField(LabelIndexField.LABEL, "4AD");
+                label.setName("4AD");
+
                 doc.addField(LabelIndexField.SORTNAME, "4AD");
+                label.setSortName("4AD");
+
                 doc.addField(LabelIndexField.BEGIN, "1979");
                 doc.addField(LabelIndexField.CODE, 5807);
-                doc.addField(LabelIndexField.TYPE, LabelType.PRODUCTION.getName());
+                label.setLabelCode(BigInteger.valueOf(5807));
+
+                doc.addField(LabelIndexField.TYPE, "Production");
+                label.setType("Production");
+
                 doc.addField(LabelIndexField.COUNTRY, "unknown");
-
+                doc.addField(LabelIndexField.LABEL_STORE, MMDSerializer.serialize(label));
                 writer.addDocument(doc.getLuceneDocument());
             }
 
             {
                 MbDocument doc = new MbDocument();
+                Label label = of.createLabel();
                 doc.addField(LabelIndexField.LABEL_ID, "a539bb1e-f2e1-4b45-9db8-8053841e7504");
+                label.setId("a539bb1e-f2e1-4b45-9db8-8053841e7504");
+
                 doc.addField(LabelIndexField.LABEL, "Dark Prism");
+                label.setName("Dark Prism");
+
                 doc.addField(LabelIndexField.SORTNAME, "Dark Prism");
+                label.setSortName("Dark Prism");
+
                 doc.addField(LabelIndexField.CODE, Index.NO_VALUE);
                 doc.addField(LabelIndexField.TYPE, LabelType.HOLDING.getName());
+                label.setType("holding");
+
+                doc.addField(LabelIndexField.LABEL_STORE, MMDSerializer.serialize(label));
                 writer.addDocument(doc.getLuceneDocument());
             }
 
             {
                 MbDocument doc = new MbDocument();
+                Label label = of.createLabel();
                 doc.addField(LabelIndexField.LABEL_ID, "b539bb1e-f2e1-4b45-9db8-8053841e7504");
+                label.setId("b539bb1e-f2e1-4b45-9db8-8053841e7504");
+
                 doc.addField(LabelIndexField.LABEL, "blob");
+                label.setName("blob");
+
                 doc.addField(LabelIndexField.SORTNAME, "blob");
+                label.setSortName("blob");
+
                 doc.addField(LabelIndexField.TYPE, "unknown");
+                doc.addField(LabelIndexField.LABEL_STORE, MMDSerializer.serialize(label));
                 writer.addDocument(doc.getLuceneDocument());
             }