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) ;
