[mb-commits] r13622 - search_server/trunk/index/src/main/java/org/musicbrainz/search/analysis

[email protected] Tue, 26 Feb 2013 08:21:30 +0000
Newsgroups gmane.comp.audio.musicbrainz.cvs
Message-ID <E1UAFn0-0006rE-Ls@wiley>
Author: ijabz
Date: 2013-02-26 08:21:30 +0000 (Tue, 26 Feb 2013)
New Revision: 13622

Modified:
   search_server/trunk/index/src/main/java/org/musicbrainz/search/analysis/RecordingSimilarity.java
Log:
Fixed file that was messed up in my sourcecode tree

Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/analysis/RecordingSimilarity.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/analysis/RecordingSimilarity.java	2013-02-26 07:51:31 UTC (rev 13621)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/analysis/RecordingSimilarity.java	2013-02-26 08:21:30 UTC (rev 13622)
@@ -30,7 +30,7 @@
 package org.musicbrainz.search.analysis;
 
 import org.apache.lucene.index.FieldInvertState;
-import org.apache.lucene.search.DefaultSimilarity;
+import org.apache.lucene.search.similarities.DefaultSimilarity;
 import org.musicbrainz.search.index.RecordingIndex;
 import org.musicbrainz.search.index.RecordingIndexField;
 
@@ -49,21 +49,35 @@
      *
      * @return score component
      */
-    public float computeNorm(String field, FieldInvertState state) {
-        if (field.equals(RecordingIndexField.RELEASE)) {
+    /**
+     * Calculates a value which is inversely proportional to the number of terms in the field. When multiple
+     * releases are added to a release group it is seen as one field, so release groups  with many releases can be
+     * disadvantaged against.
+     *
+     * But we don't want to just disable norms for release field as the number of terms in a release name
+     * should effect scoring
+     *
+     * @param state
+     * @return
+     */
+    @Override
+    public float lengthNorm(FieldInvertState state) {
 
+        if (state.getName().equals(RecordingIndexField.RELEASE.getName()))
+        {
             if(state.getLength()>=6) {
                 //Same result as normal calc if field had six terms, based on the view that most common release title
                 //is 5 terms
                 return state.getBoost() * 0.408f;
             }
-            else {
-                return super.computeNorm(field,state);
+            else
+            {
+                return super.lengthNorm(state);
             }
         }
         else
         {
-            return super.computeNorm(field,state);
+            return super.lengthNorm(state);
         }
     }