Author: ssmiweve
Date: 2009-09-25 22:08:56 +0200 (Fri, 25 Sep 2009)
New Revision: 7293

Modified:
   
branches/2.18/generic.sesam/query-evaluation/src/main/java/no/sesat/search/query/token/FastQueryMatchingEvaluatorFactory.java
   
branches/2.18/generic.sesam/query-evaluation/src/main/java/no/sesat/search/query/token/VeryFastTokenEvaluator.java
Log:
performance smart: remember from initialisation if this evaluator will ever be 
used. allows the otherwise expensive isReponsible method to quickly return 
false in any instalation where FAST query evaluation against is not configured. 
(this is due to the FAST_LIST is inappropriately encapsulated within the 
VeryFastTokenEvaluator.java).

Modified: 
branches/2.18/generic.sesam/query-evaluation/src/main/java/no/sesat/search/query/token/FastQueryMatchingEvaluatorFactory.java
===================================================================
--- 
branches/2.18/generic.sesam/query-evaluation/src/main/java/no/sesat/search/query/token/FastQueryMatchingEvaluatorFactory.java
       2009-09-25 19:55:00 UTC (rev 7292)
+++ 
branches/2.18/generic.sesam/query-evaluation/src/main/java/no/sesat/search/query/token/FastQueryMatchingEvaluatorFactory.java
       2009-09-25 20:08:56 UTC (rev 7293)
@@ -1,4 +1,4 @@
-/* Copyright (2005-2008) Schibsted ASA
+/* Copyright (2005-2009) Schibsted ASA
  * This file is part of SESAT.
  *
  *   SESAT is free software: you can redistribute it and/or modify
@@ -18,9 +18,6 @@
 
 import javax.xml.parsers.ParserConfigurationException;
 import no.sesat.commons.ioc.ContextWrapper;
-import no.sesat.search.site.Site;
-import no.sesat.search.site.SiteContext;
-
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -53,6 +50,10 @@
 
     // Attributes -----------------------------------------------------
 
+    /** Because LIST_NAMES is encapsulated inside the VeryFastTokenEvaluator
+     * we keep a hint here in knowing if isReponsible() can simply and quickly 
always return false.
+     */
+    private final boolean everApplicable;
     private final Future fastEvaluatorCreator;
     private VeryFastTokenEvaluator fastEvaluator;
 
@@ -63,7 +64,7 @@
         super(cxt);
 
         try {
-            VeryFastTokenEvaluator.initImpl(cxt);
+            everApplicable = VeryFastTokenEvaluator.initImpl(cxt);
 
         }catch (ParserConfigurationException ex) {
             throw new 
SiteKeyedFactoryInstantiationException(ERR_FAILED_CONSTRUCTING_FAST_EVALUATOR, 
ex);
@@ -72,6 +73,7 @@
         fastEvaluatorCreator = EXECUTOR.submit(new FastEvaluatorCreator(cxt));
     }
 
+    @Override
     public TokenEvaluator getEvaluator(final TokenPredicate token) throws 
EvaluationException{
 
         final Context cxt = getContext();
@@ -98,7 +100,7 @@
 
         try {
 
-            return getFastEvaluator().isResponsibleFor(token);
+            return everApplicable && 
getFastEvaluator().isResponsibleFor(token);
 
         }catch (EvaluationException ex) {
             LOG.error("failed using VeryFastTokenEvaluator", ex);

Modified: 
branches/2.18/generic.sesam/query-evaluation/src/main/java/no/sesat/search/query/token/VeryFastTokenEvaluator.java
===================================================================
--- 
branches/2.18/generic.sesam/query-evaluation/src/main/java/no/sesat/search/query/token/VeryFastTokenEvaluator.java
  2009-09-25 19:55:00 UTC (rev 7292)
+++ 
branches/2.18/generic.sesam/query-evaluation/src/main/java/no/sesat/search/query/token/VeryFastTokenEvaluator.java
  2009-09-25 20:08:56 UTC (rev 7293)
@@ -1,4 +1,4 @@
-/* Copyright (2005-2008) Schibsted ASA
+/* Copyright (2005-2009) Schibsted ASA
  * This file is part of SESAT.
  *
  *   SESAT is free software: you can redistribute it and/or modify
@@ -40,15 +40,12 @@
 import no.sesat.commons.ioc.ContextWrapper;
 import no.sesat.search.site.config.SiteConfiguration;
 import no.sesat.search.site.config.DocumentLoader;
-
 import no.sesat.search.http.HTTPClient;
 import no.sesat.search.query.token.AbstractEvaluatorFactory.Context;
 import static no.sesat.search.query.parser.AbstractQueryParser.SKIP_REGEX;
 import static no.sesat.search.query.parser.AbstractQueryParser.OPERATOR_REGEX;
 import no.sesat.search.site.Site;
 import no.sesat.search.site.SiteContext;
-
-
 import org.apache.log4j.Logger;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -139,6 +136,7 @@
 
     // Public --------------------------------------------------------
 
+    @Override
     public boolean evaluateToken(final TokenPredicate token, final String 
term, final String query) {
 
         boolean evaluation = false;
@@ -180,6 +178,7 @@
         return evaluation;
     }
 
+    @Override
     public Set<String> getMatchValues(final TokenPredicate token, final String 
term) {
 
         final Set<String> values;
@@ -214,6 +213,7 @@
         return Collections.unmodifiableSet(values);
     }
 
+    @Override
     public boolean isQueryDependant(final TokenPredicate predicate) {
         return predicate.name().startsWith(EXACT_PREFIX.toUpperCase());
     }
@@ -239,7 +239,7 @@
         }
     }
 
-    static void initImpl(final Context cxt) throws 
ParserConfigurationException  {
+    static boolean initImpl(final Context cxt) throws 
ParserConfigurationException  {
 
         final Site site = cxt.getSite();
         final Site parent = site.getParent();
@@ -259,6 +259,7 @@
             initImpl(ContextWrapper.wrap(
                     AbstractEvaluatorFactory.Context.class,
                     new SiteContext(){
+                        @Override
                         public Site getSite(){
                             return parent;
                         }
@@ -318,8 +319,6 @@
                                 Arrays.sort(listNameArr, null);
                                 listNames.put(token, listNameArr);
                             }
-
-
                         }
                     }
                     LOG.info("Parsing " + VERYFAST_EVALUATOR_XMLFILE + " 
finished");
@@ -327,6 +326,25 @@
                 LIST_NAMES_LOCK.writeLock().unlock();
             }
         }
+        try{
+            LIST_NAMES_LOCK.readLock().lock();
+
+            Site s = site;
+            boolean evaluatorUsedAnywhere = false;
+
+            while(!evaluatorUsedAnywhere && null != s){
+
+                evaluatorUsedAnywhere |= 0 < LIST_NAMES.get(s).values().size();
+                if(!evaluatorUsedAnywhere){
+                    // prepare to go to parent
+                    s = s.getParent();
+                }
+            }
+            return evaluatorUsedAnywhere;
+
+        }finally{
+            LIST_NAMES_LOCK.readLock().unlock();
+        }
     }
 
     /**

_______________________________________________
Kernel-commits mailing list
Kernel-commits@sesat.no
http://sesat.no/mailman/listinfo/kernel-commits

Reply via email to