move Lucene query cache to Context for some persistence

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/430a7427
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/430a7427
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/430a7427

Branch: refs/heads/JENA-507
Commit: 430a7427c3cb240af26db405999e1beb63f44d4c
Parents: 9149a1d
Author: Osma Suominen <[email protected]>
Authored: Tue Jan 5 22:05:31 2016 +0200
Committer: Osma Suominen <[email protected]>
Committed: Mon Jan 11 09:27:13 2016 +0200

----------------------------------------------------------------------
 .../java/org/apache/jena/query/text/TextQueryPF.java    | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/430a7427/jena-text/src/main/java/org/apache/jena/query/text/TextQueryPF.java
----------------------------------------------------------------------
diff --git 
a/jena-text/src/main/java/org/apache/jena/query/text/TextQueryPF.java 
b/jena-text/src/main/java/org/apache/jena/query/text/TextQueryPF.java
index ff21248..49fc430 100644
--- a/jena-text/src/main/java/org/apache/jena/query/text/TextQueryPF.java
+++ b/jena-text/src/main/java/org/apache/jena/query/text/TextQueryPF.java
@@ -47,6 +47,7 @@ import org.apache.jena.sparql.pfunction.PropertyFunctionBase ;
 import org.apache.jena.sparql.util.Context ;
 import org.apache.jena.sparql.util.IterLib ;
 import org.apache.jena.sparql.util.NodeFactoryExtra ;
+import org.apache.jena.sparql.util.Symbol ;
 import org.apache.lucene.queryparser.classic.QueryParserBase ;
 import org.slf4j.Logger ;
 import org.slf4j.LoggerFactory ;
@@ -65,14 +66,13 @@ public class TextQueryPF extends PropertyFunctionBase {
 
     private String langArg = null;
 
-    private Map<String,List<TextHit>> queryCache = null;
+    private static final Symbol cacheSymbol = 
Symbol.create("TextQueryPF.cache");
 
     @Override
     public void build(PropFuncArg argSubject, Node predicate, PropFuncArg 
argObject, ExecutionContext execCxt) {
         super.build(argSubject, predicate, argObject, execCxt) ;
         DatasetGraph dsg = execCxt.getDataset() ;
         textIndex = chooseTextIndex(dsg) ;
-        queryCache = new LinkedHashMap();
 
         if (argSubject.isList()) {
             int size = argSubject.getArgListSize();
@@ -274,7 +274,15 @@ public class TextQueryPF extends PropertyFunctionBase {
         Explain.explain(execCxt.getContext(), "Text query: "+queryString) ;
         if ( log.isDebugEnabled())
             log.debug("Text query: {} ({})", queryString,limit) ;
+
         String cacheKey = limit + " " + property + " " + queryString ;
+        Map<String,List<TextHit>> queryCache = 
+            (Map<String,List<TextHit>>) execCxt.getContext().get(cacheSymbol);
+        if (queryCache == null) { /* doesn't yet exist, need to create it */
+            queryCache = new LinkedHashMap();
+            execCxt.getContext().put(cacheSymbol, queryCache);
+        }
+
         List<TextHit> results = queryCache.get(cacheKey) ;
         if (results == null) { /* cache miss */
             results = textIndex.query(property, queryString, limit) ;

Reply via email to