Robert Muir created LUCENE-4926:
-----------------------------------

             Summary: speed up disjunctionmaxscorer
                 Key: LUCENE-4926
                 URL: https://issues.apache.org/jira/browse/LUCENE-4926
             Project: Lucene - Core
          Issue Type: Improvement
            Reporter: Robert Muir


Applying the same approach as LUCENE-4923 gives ~ 30% improvement according to 
luceneutil.

{noformat}
                    Task   QPS trunk      StdDev   QPS patch      StdDev        
        Pct diff
           OrMaxHighHigh       17.94      (2.7%)       23.23      (3.1%)   
29.5% (  23% -   36%)
            OrMaxHighLow       28.08      (2.6%)       37.11      (3.9%)   
32.1% (  25% -   39%)
            OrMaxHighMed       16.80      (2.7%)       22.25      (3.9%)   
32.5% (  25% -   40%)
{noformat}

{noformat}
diff -r e0ea40cf243c perf/TaskParser.java
--- a/perf/TaskParser.java      Mon Apr 01 14:49:08 2013 +0200
+++ b/perf/TaskParser.java      Wed Apr 10 22:35:40 2013 -0400
@@ -31,6 +31,7 @@
 import org.apache.lucene.search.BooleanClause;
 import org.apache.lucene.search.BooleanQuery;
 import org.apache.lucene.search.CachingWrapperFilter;
+import org.apache.lucene.search.DisjunctionMaxQuery;
 import org.apache.lucene.search.Filter;
 import org.apache.lucene.search.NumericRangeQuery;
 import org.apache.lucene.search.Query;
@@ -169,6 +170,17 @@
                                   true);
         sort = null;
         group = null;
+      } else if (text.startsWith("disjunctionMax//")) {
+        final int spot3 = text.indexOf(' ');
+        if (spot3 == -1) {
+          throw new RuntimeException("failed to parse query=" + text);
+        }
+        DisjunctionMaxQuery dismax = new DisjunctionMaxQuery(1f);
+        dismax.add(new TermQuery(new Term(fieldName, text.substring(16, 
spot3))));
+        dismax.add(new TermQuery(new Term(fieldName, 
text.substring(spot3+1).trim())));
+        query = dismax;
+        sort = null;
+        group = null;
       } else if (text.startsWith("nrq//")) {
         // field start end
         final int spot3 = text.indexOf(' ');


cat wikimedium.10M.nostopwords.tasks | grep "^Or" | sed -e 
"s/Or\([a-zA-Z]*\)\:\ /OrMax\1\:\ disjunctionMax\/\//g" > dismax.tasks
{noformat}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to