[mb-commits] r13654 - search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet

[email protected] Thu, 04 Apr 2013 10:46:54 +0000
Newsgroups gmane.comp.audio.musicbrainz.cvs
Message-ID <E1UNhh0-0001JR-2n@wiley>
Author: ijabz
Date: 2013-04-04 10:46:53 +0000 (Thu, 04 Apr 2013)
New Revision: 13654

Modified:
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/DismaxQueryParser.java
Log:
SEARCH-280:Fixed prefix searches scoring better than exact matches.

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/DismaxQueryParser.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/DismaxQueryParser.java	2013-04-04 09:53:55 UTC (rev 13653)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/DismaxQueryParser.java	2013-04-04 10:46:53 UTC (rev 13654)
@@ -54,8 +54,6 @@
 
     public DismaxQueryParser(org.apache.lucene.analysis.Analyzer analyzer) {
         dqp = new DisjunctionQueryParser(IMPOSSIBLE_FIELD_NAME, analyzer);
-        //TODO FIXME
-        //dqp.setMultiTermRewriteMethod(new FuzzyTermRewrite(100));
     }
 
     /**
@@ -264,35 +262,17 @@
      * We set the idf the same as an exact match so that a wildcard match to a term which happens to be rarer than
      * the exact term we were searching for does not get an unfairly high idf.
      *
-     * @param <Q>
      */
-    public static class PrefixTermRewrite<Q extends DisjunctionMaxQuery> extends TopTermsRewrite<Query> {
+    public static class PrefixTermRewrite extends MultiTermQuery.RewriteMethod {
 
-        private final TFIDFSimilarity similarity;
+        private TFIDFSimilarity     similarity;
+        private FuzzyTermRewrite    rewrite;
 
         public PrefixTermRewrite(int size) {
-            super(size);
+            this.rewrite    = new FuzzyTermRewrite(size);
             this.similarity = new DefaultSimilarity();
-
         }
 
-        @Override
-        protected int getMaxSize() {
-            return BooleanQuery.getMaxClauseCount();
-        }
-
-        @Override
-        protected DisjunctionMaxQuery getTopLevelQuery() {
-            return new DisjunctionMaxQuery(0.1f);
-        }
-
-        @Override
-        protected void addClause(Query topLevel, Term term, int docCount, float boost, TermContext states) {
-            final Query tq = new ConstantScoreQuery(new TermQuery(term, states));
-            tq.setBoost(boost);
-            ((DisjunctionMaxQuery)topLevel).add(tq);
-        }
-
         protected float getQueryBoost(final IndexReader reader, final MultiTermQuery query)
                 throws IOException {
             float idf = 1f;
@@ -307,21 +287,19 @@
             return idf;
         }
 
-        /*
+
         @Override
         public Query rewrite(final IndexReader reader, final MultiTermQuery query) throws IOException {
-            DisjunctionMaxQuery  bq = (DisjunctionMaxQuery)super.rewrite(reader, query);
-
+            DisjunctionMaxQuery  dmq = (DisjunctionMaxQuery)rewrite.rewrite(reader, query);
             float idfBoost = getQueryBoost(reader, query);
-            Iterator<Query> iterator = bq.iterator();
+            Iterator<Query> iterator = dmq.iterator();
             while(iterator.hasNext())
             {
                 Query next = iterator.next();
                 next.setBoost(next.getBoost() * idfBoost);
             }
-            return bq;
-        } */
-
+            return dmq;
+        }
     }