Author: yonik
Date: Wed Aug 27 09:27:26 2008
New Revision: 689514

URL: http://svn.apache.org/viewvc?rev=689514&view=rev
Log:
SOLR-730: use read-only IndexReaders

Modified:
    lucene/solr/trunk/CHANGES.txt
    lucene/solr/trunk/src/java/org/apache/solr/core/SolrCore.java
    lucene/solr/trunk/src/java/org/apache/solr/search/SolrIndexSearcher.java

Modified: lucene/solr/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/CHANGES.txt?rev=689514&r1=689513&r2=689514&view=diff
==============================================================================
--- lucene/solr/trunk/CHANGES.txt (original)
+++ lucene/solr/trunk/CHANGES.txt Wed Aug 27 09:27:26 2008
@@ -399,6 +399,11 @@
  9. SOLR-587: Delete by Query performance greatly improved by using
     new underlying Lucene IndexWriter implementation.  (yonik)
 
+10. SOLR-730: Use read-only IndexReaders that don't synchronize
+    isDeleted().  This will speed up function queries and *:* queries
+    as well as improve their scalability on multi-CPU systems.
+    (Mark Miller via yonik)
+
 Bug Fixes
  1. Make TextField respect sortMissingFirst and sortMissingLast fields.
     (J.J. Larrea via yonik)

Modified: lucene/solr/trunk/src/java/org/apache/solr/core/SolrCore.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/core/SolrCore.java?rev=689514&r1=689513&r2=689514&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/core/SolrCore.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/core/SolrCore.java Wed Aug 27 
09:27:26 2008
@@ -260,7 +260,12 @@
 
   // gets a non-caching searcher
   public SolrIndexSearcher newSearcher(String name) throws IOException {
-    return new SolrIndexSearcher(this, schema, name,getIndexDir(),false);
+    return newSearcher(name, false);
+  }
+  
+  // gets a non-caching searcher
+  public SolrIndexSearcher newSearcher(String name, boolean readOnly) throws 
IOException {
+    return new SolrIndexSearcher(this, schema, "main", 
IndexReader.open(FSDirectory.getDirectory(getIndexDir()), readOnly), true, 
false);
   }
 
 
@@ -852,6 +857,10 @@
    * be registered before running the event handlers (a slow searcher is 
better than no searcher).
    *
    * <p>
+   * These searchers contain read-only IndexReaders. To access a non read-only 
IndexReader,
+   * see newSearcher(String name, boolean readOnly).
+   *
+   * <p>
    * If <tt>forceNew==true</tt> then
    *  A new searcher will be opened and registered regardless of whether there 
is already
    *    a registered searcher or other searchers in the process of being 
created.
@@ -935,7 +944,7 @@
     // if this fails, we need to decrement onDeckSearchers again.
     SolrIndexSearcher tmp;
     try {
-      tmp = new SolrIndexSearcher(this, schema, "main", getIndexDir(), true);
+      tmp = new SolrIndexSearcher(this, schema, "main", 
IndexReader.open(FSDirectory.getDirectory(getIndexDir()), true), true, true);
     } catch (Throwable th) {
       synchronized(searcherLock) {
         onDeckSearchers--;

Modified: 
lucene/solr/trunk/src/java/org/apache/solr/search/SolrIndexSearcher.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/search/SolrIndexSearcher.java?rev=689514&r1=689513&r2=689514&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/search/SolrIndexSearcher.java 
(original)
+++ lucene/solr/trunk/src/java/org/apache/solr/search/SolrIndexSearcher.java 
Wed Aug 27 09:27:26 2008
@@ -104,7 +104,7 @@
     this(core, schema,name,r, false, enableCache);
   }
 
-  private SolrIndexSearcher(SolrCore core, IndexSchema schema, String name, 
IndexReader r, boolean closeReader, boolean enableCache) {
+  public SolrIndexSearcher(SolrCore core, IndexSchema schema, String name, 
IndexReader r, boolean closeReader, boolean enableCache) {
     this.core = core;
     this.schema = schema;
     this.name = "Searcher@" + Integer.toHexString(hashCode()) + (name!=null ? 
" "+name : "");


Reply via email to