You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by yo...@apache.org on 2006/02/08 20:19:10 UTC

svn commit: r376027 - /incubator/solr/trunk/src/java/org/apache/solr/core/QuerySenderListener.java

Author: yonik
Date: Wed Feb  8 11:19:08 2006
New Revision: 376027

URL: http://svn.apache.org/viewcvs?rev=376027&view=rev
Log:
force read of document stored fields in QuerySenderListener (used in firstSearcher and newSearcher event hooks)

Modified:
    incubator/solr/trunk/src/java/org/apache/solr/core/QuerySenderListener.java

Modified: incubator/solr/trunk/src/java/org/apache/solr/core/QuerySenderListener.java
URL: http://svn.apache.org/viewcvs/incubator/solr/trunk/src/java/org/apache/solr/core/QuerySenderListener.java?rev=376027&r1=376026&r2=376027&view=diff
==============================================================================
--- incubator/solr/trunk/src/java/org/apache/solr/core/QuerySenderListener.java (original)
+++ incubator/solr/trunk/src/java/org/apache/solr/core/QuerySenderListener.java Wed Feb  8 11:19:08 2006
@@ -17,6 +17,8 @@
 package org.apache.solr.core;
 
 import org.apache.solr.search.SolrIndexSearcher;
+import org.apache.solr.search.DocList;
+import org.apache.solr.search.DocIterator;
 import org.apache.solr.request.LocalSolrQueryRequest;
 import org.apache.solr.request.SolrQueryResponse;
 import org.apache.solr.util.NamedList;
@@ -30,14 +32,39 @@
 class QuerySenderListener extends AbstractSolrEventListener {
 
   public void newSearcher(SolrIndexSearcher newSearcher, SolrIndexSearcher currentSearcher) {
+    final SolrIndexSearcher searcher = newSearcher;
     SolrCore core = SolrCore.getSolrCore();
     log.info("QuerySenderListener sending requests to " + newSearcher);
     for (NamedList nlst : (List<NamedList>)args.get("queries")) {
       try {
-        LocalSolrQueryRequest req = new LocalSolrQueryRequest(core, nlst);
+        // bind the request to a particular searcher (the newSearcher)
+        LocalSolrQueryRequest req = new LocalSolrQueryRequest(core,nlst) {
+          public SolrIndexSearcher getSearcher() {
+            return searcher;
+          }
+          public void close() {
+          }
+        };
 
         SolrQueryResponse rsp = new SolrQueryResponse();
         core.execute(req,rsp);
+
+        // Retrieve the Document instances (not just the ids) to warm
+        // the OS disk cache, and any Solr document cache.  Only the top
+        // level values in the NamedList are checked for DocLists.
+        NamedList values = rsp.getValues();
+        for (int i=0; i<values.size(); i++) {
+          Object o = values.getVal(i);
+          if (o instanceof DocList) {
+            DocList docs = (DocList)o;
+            for (DocIterator iter = docs.iterator(); iter.hasNext();) {
+              newSearcher.doc(iter.nextDoc());
+            }
+          }
+        }
+
+        req.close();
+
       } catch (Exception e) {
         // do nothing... we want to continue with the other requests.
         // the failure should have already been logged.