[mb-commits] r13637 - in search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet: . mmd1 mmd2

[email protected] Wed, 27 Feb 2013 15:44:08 +0000
Newsgroups gmane.comp.audio.musicbrainz.cvs
Message-ID <E1UAjAu-0004Ah-0L@wiley>
Author: ijabz
Date: 2013-02-27 15:42:53 +0000 (Wed, 27 Feb 2013)
New Revision: 13637

Modified:
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/AbstractSearchServer.java
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/Results.java
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/ResultsWriter.java
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/ArtistMmd1XmlWriter.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/mmd1/ReleaseGroupMmd1XmlWriter.java
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/ReleaseMmd1XmlWriter.java
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/TrackMmd1XmlWriter.java
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/AllWriter.java
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/AnnotationWriter.java
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ArtistWriter.java
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/CDStubWriter.java
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/FreeDBWriter.java
   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/RecordingWriter.java
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseGroupWriter.java
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseWriter.java
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ResultsWriter.java
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/TagWriter.java
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/WorkWriter.java
Log:
#SEARCH-77:Normalize results over each entity, rather than within each entity

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/AbstractSearchServer.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/AbstractSearchServer.java	2013-02-27 11:15:57 UTC (rev 13636)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/AbstractSearchServer.java	2013-02-27 15:42:53 UTC (rev 13637)
@@ -241,11 +241,11 @@
     results.offset = offset;
     results.totalHits = topDocs.totalHits;
     ScoreDoc docs[] = topDocs.scoreDocs;
-    float maxScore = topDocs.getMaxScore();
+    results.maxScore=topDocs.getMaxScore();
     for (int i = offset; i < docs.length; i++) {
-      Result result = new Result();
-      result.score = docs[i].score / maxScore;
-      result.doc = new MbDocument(searcher.doc(docs[i].doc));
+      Result result     = new Result();
+      result.score      = docs[i].score;
+      result.doc        = new MbDocument(searcher.doc(docs[i].doc));
       results.results.add(result);
     }
     return results;

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/Results.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/Results.java	2013-02-27 11:15:57 UTC (rev 13636)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/Results.java	2013-02-27 15:42:53 UTC (rev 13637)
@@ -31,8 +31,12 @@
 import java.util.LinkedList;
 import java.util.List;
 
-public class Results {
+/**
+ * Store the results of a search
+ */
+public class Results implements Comparable<Results>{
 
+    public float maxScore;
     public int offset;
     public int totalHits;
     public List<Result> results;
@@ -41,4 +45,9 @@
         results = new LinkedList<Result>();
     }
 
+    public int compareTo(Results results)
+    {
+        return Float.compare(maxScore,results.maxScore);
+    }
+
 }

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/ResultsWriter.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/ResultsWriter.java	2013-02-27 11:15:57 UTC (rev 13636)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/ResultsWriter.java	2013-02-27 15:42:53 UTC (rev 13637)
@@ -77,4 +77,10 @@
     {
         return serverLastUpdatedDate;
     }
+
+    protected String calculateNormalizedScore(Result result, float maxScore)
+    {
+        return String.valueOf((int)(((float)(result.score  / maxScore)) * 100));
+    }
+
 }

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/ArtistMmd1XmlWriter.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/ArtistMmd1XmlWriter.java	2013-02-27 11:15:57 UTC (rev 13636)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/ArtistMmd1XmlWriter.java	2013-02-27 15:42:53 UTC (rev 13637)
@@ -60,8 +60,9 @@
                 artist.setType(StringUtils.capitalize(artype));
             }
 
-            artist.getOtherAttributes().put(getScore(), String.valueOf((int) (result.score * 100)));
 
+            artist.getOtherAttributes().put(getScore(), calculateNormalizedScore(result, results.maxScore));
+
             String name = doc.get(ArtistIndexField.ARTIST);
             if (name != null) {
                 artist.setName(name);

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-02-27 11:15:57 UTC (rev 13636)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/LabelMmd1XmlWriter.java	2013-02-27 15:42:53 UTC (rev 13637)
@@ -57,7 +57,7 @@
                 label.setType(StringUtils.capitalize(doc.get(LabelIndexField.TYPE)));
             }
 
-            label.getOtherAttributes().put(getScore(), String.valueOf((int) (result.score * 100)));
+            label.getOtherAttributes().put(getScore(), calculateNormalizedScore(result, results.maxScore));
 
             String name = doc.get(LabelIndexField.LABEL);
             if (name != null) {

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/ReleaseGroupMmd1XmlWriter.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/ReleaseGroupMmd1XmlWriter.java	2013-02-27 11:15:57 UTC (rev 13636)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/ReleaseGroupMmd1XmlWriter.java	2013-02-27 15:42:53 UTC (rev 13637)
@@ -55,7 +55,7 @@
             ReleaseGroup releaseGroup = of.createReleaseGroup();
             releaseGroup.setId(doc.get(ReleaseGroupIndexField.RELEASEGROUP_ID));
 
-            releaseGroup.getOtherAttributes().put(getScore(), String.valueOf((int) (result.score * 100)));
+            releaseGroup.getOtherAttributes().put(getScore(), calculateNormalizedScore(result, results.maxScore));
 
             String name = doc.get(ReleaseGroupIndexField.RELEASEGROUP);
             if (name != null) {

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/ReleaseMmd1XmlWriter.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/ReleaseMmd1XmlWriter.java	2013-02-27 11:15:57 UTC (rev 13636)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/ReleaseMmd1XmlWriter.java	2013-02-27 15:42:53 UTC (rev 13637)
@@ -69,7 +69,7 @@
                 }
             }
 
-            release.getOtherAttributes().put(getScore(), String.valueOf((int) (result.score * 100)));
+            release.getOtherAttributes().put(getScore(), calculateNormalizedScore(result, results.maxScore));
 
             String name = doc.get(ReleaseIndexField.RELEASE);
             if (name != null) {

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/TrackMmd1XmlWriter.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/TrackMmd1XmlWriter.java	2013-02-27 11:15:57 UTC (rev 13636)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/TrackMmd1XmlWriter.java	2013-02-27 15:42:53 UTC (rev 13637)
@@ -58,7 +58,7 @@
 
             track.setId(doc.get(RecordingIndexField.RECORDING_ID));
             
-            track.getOtherAttributes().put(getScore(), String.valueOf((int) (result.score * 100)));
+            track.getOtherAttributes().put(getScore(), calculateNormalizedScore(result, results.maxScore));
 
             String name = doc.get(RecordingIndexField.RECORDING_OUTPUT);
 

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/AllWriter.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/AllWriter.java	2013-02-27 11:15:57 UTC (rev 13636)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/AllWriter.java	2013-02-27 15:42:53 UTC (rev 13637)
@@ -5,6 +5,9 @@
 import org.musicbrainz.search.servlet.Results;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 
 /**
  * Take the output from multiple results sets and merged into single output
@@ -37,7 +40,24 @@
     public void write(Metadata metadata, Results results) throws IOException {
     }
 
+
     public Metadata write(Results results) throws IOException {
+
+        //Sort by best max score, then set this as the max score for each entity
+        List<Results> resultsList = new ArrayList<Results>();
+        resultsList.add(artistResults);
+        resultsList.add(releaseResults);
+        resultsList.add(releaseGroupResults);
+        resultsList.add(labelResults);
+        resultsList.add(recordingResults);
+        resultsList.add(workResults);
+        Collections.sort(resultsList);
+        Collections.reverse(resultsList);
+        float bestMaxScore=resultsList.get(0).maxScore;
+        for(Results next:resultsList)
+        {
+            next.maxScore=bestMaxScore;
+        }
         ObjectFactory of  = new ObjectFactory();
         Metadata metadata = of.createMetadata();
 

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/AnnotationWriter.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/AnnotationWriter.java	2013-02-27 11:15:57 UTC (rev 13636)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/AnnotationWriter.java	2013-02-27 15:42:53 UTC (rev 13637)
@@ -57,7 +57,7 @@
             annotation.setText(doc.get(AnnotationIndexField.TEXT));
             annotation.setType(doc.get(AnnotationIndexField.TYPE));
             annotation.setEntity(doc.get(AnnotationIndexField.ENTITY));
-            annotation.setScore(String.valueOf((int)(result.score * 100)));
+            annotation.setScore(calculateNormalizedScore(result, results.maxScore));
             annotationList.getAnnotation().add(annotation);
 
         }

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ArtistWriter.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ArtistWriter.java	2013-02-27 11:15:57 UTC (rev 13636)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ArtistWriter.java	2013-02-27 15:42:53 UTC (rev 13637)
@@ -51,7 +51,7 @@
             Artist artist = of.createArtist();
 
             artist.setId(doc.get(ArtistIndexField.ARTIST_ID));
-            artist.setScore(String.valueOf((int) (result.score * 100)));
+            artist.setScore(calculateNormalizedScore(result, results.maxScore));
 
             String artype = doc.get(ArtistIndexField.TYPE);
             if (isNotUnknown(artype)) {

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/CDStubWriter.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/CDStubWriter.java	2013-02-27 11:15:57 UTC (rev 13636)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/CDStubWriter.java	2013-02-27 15:42:53 UTC (rev 13637)
@@ -103,8 +103,8 @@
                 cdstub.setTrackList(trackList);
             }
 
-            cdstub.setScore(String.valueOf((int)(result.score * 100)));
 
+            cdstub.setScore(calculateNormalizedScore(result, results.maxScore));
             cdstubList.getCdstub().add(cdstub);
 
         }

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/FreeDBWriter.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/FreeDBWriter.java	2013-02-27 11:15:57 UTC (rev 13636)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/FreeDBWriter.java	2013-02-27 15:42:53 UTC (rev 13637)
@@ -58,7 +58,7 @@
             freeDB.setId(doc.get(FreeDBIndexField.DISCID));
             freeDB.setCategory(doc.get(FreeDBIndexField.CATEGORY));
             freeDB.setYear(doc.get(FreeDBIndexField.YEAR));
-            freeDB.setScore(String.valueOf((int)(result.score * 100)));
+            freeDB.setScore(calculateNormalizedScore(result, results.maxScore));
 
             org.musicbrainz.mmd2.FreedbDisc.TrackList trackList = of.createFreedbDiscTrackList();
             trackList.setCount(new BigInteger(doc.get(FreeDBIndexField.TRACKS)));

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-02-27 11:15:57 UTC (rev 13636)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/LabelWriter.java	2013-02-27 15:42:53 UTC (rev 13637)
@@ -57,11 +57,11 @@
             if (isNotUnknown(type)){
                 label.setType(type);
             }
-            label.setScore(String.valueOf((int)(result.score * 100)));
+            label.setScore(calculateNormalizedScore(result, results.maxScore));
             String name = doc.get(LabelIndexField.LABEL);
             if (name != null) {
                 label.setName(name);
-}
+            }
 
             String[] ipiCodes = doc.getValues(LabelIndexField.IPI);
             if (ipiCodes.length > 0) {

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/RecordingWriter.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/RecordingWriter.java	2013-02-27 11:15:57 UTC (rev 13636)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/RecordingWriter.java	2013-02-27 15:42:53 UTC (rev 13637)
@@ -75,7 +75,7 @@
             Recording recording = of.createRecording();
 
             recording.setId(doc.get(RecordingIndexField.RECORDING_ID));
-            recording.setScore(String.valueOf((int)(result.score * 100)));
+            recording.setScore(calculateNormalizedScore(result, results.maxScore));
             String name = doc.get(RecordingIndexField.RECORDING_OUTPUT);
 
             if (name != null) {

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseGroupWriter.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseGroupWriter.java	2013-02-27 11:15:57 UTC (rev 13636)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseGroupWriter.java	2013-02-27 15:42:53 UTC (rev 13637)
@@ -49,7 +49,7 @@
             MbDocument doc = result.doc;
             ReleaseGroup releaseGroup = of.createReleaseGroup();
             releaseGroup.setId(doc.get(ReleaseGroupIndexField.RELEASEGROUP_ID));
-            releaseGroup.setScore(String.valueOf((int)(result.score * 100)));
+            releaseGroup.setScore(calculateNormalizedScore(result, results.maxScore));
             String name = doc.get(ReleaseGroupIndexField.RELEASEGROUP);
             if (name != null) {
                 releaseGroup.setTitle(name);

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseWriter.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseWriter.java	2013-02-27 11:15:57 UTC (rev 13636)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseWriter.java	2013-02-27 15:42:53 UTC (rev 13637)
@@ -56,7 +56,7 @@
             MbDocument doc = result.doc;
             Release release = of.createRelease();
             release.setId(doc.get(ReleaseIndexField.RELEASE_ID));
-            release.setScore(String.valueOf((int)(result.score * 100)));
+            release.setScore(calculateNormalizedScore(result, results.maxScore));
 
             String name = doc.get(ReleaseIndexField.RELEASE);
             if (name != null) {

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ResultsWriter.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ResultsWriter.java	2013-02-27 11:15:57 UTC (rev 13636)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ResultsWriter.java	2013-02-27 15:42:53 UTC (rev 13637)
@@ -38,6 +38,7 @@
 import org.musicbrainz.mmd2.Metadata;
 import org.musicbrainz.mmd2.ObjectFactory;
 import org.musicbrainz.search.servlet.ErrorMessage;
+import org.musicbrainz.search.servlet.Result;
 import org.musicbrainz.search.servlet.Results;
 import org.musicbrainz.search.servlet.SearchServerServlet;
 
@@ -216,4 +217,7 @@
         }
     }
 
+
+
+
 }
\ No newline at end of file

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/TagWriter.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/TagWriter.java	2013-02-27 11:15:57 UTC (rev 13636)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/TagWriter.java	2013-02-27 15:42:53 UTC (rev 13637)
@@ -50,7 +50,7 @@
             MbDocument doc = result.doc;
             Tag tag = of.createTag();
             tag.setName(doc.get(TagIndexField.TAG));;
-            tag.setScore(String.valueOf((int)(result.score * 100)));
+            tag.setScore(calculateNormalizedScore(result, results.maxScore));
             tagList.getTag().add(tag);
         }
         tagList.setCount(BigInteger.valueOf(results.totalHits));

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/WorkWriter.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/WorkWriter.java	2013-02-27 11:15:57 UTC (rev 13636)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/WorkWriter.java	2013-02-27 15:42:53 UTC (rev 13637)
@@ -49,7 +49,7 @@
             MbDocument doc = result.doc;
             Work work = of.createWork();
             work.setId(doc.get(WorkIndexField.WORK_ID));
-            work.setScore(String.valueOf((int)(result.score * 100)));
+            work.setScore(calculateNormalizedScore(result, results.maxScore));
 
             String name = doc.get(WorkIndexField.WORK);
             if (name != null) {