[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;
+ }
}