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