LUCENE-1325: add IndexCommit.isOptimized() method

git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@673979 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Michael McCandless 2008-07-04 09:43:12 +00:00
parent 4099732195
commit 22f76f1ebf
6 changed files with 41 additions and 2 deletions

View File

@ -83,6 +83,9 @@ API Changes
DeletionPolicy that keeps more than the last commit around. DeletionPolicy that keeps more than the last commit around.
(Jason Rutherglen via Mike McCandless) (Jason Rutherglen via Mike McCandless)
12. LUCENE-1325: Added IndexCommit.isOptimized(). (Shalin Shekhar
Mangar via Mike McCandless)
Bug fixes Bug fixes
1. LUCENE-1134: Fixed BooleanQuery.rewrite to only optimize a single 1. LUCENE-1134: Fixed BooleanQuery.rewrite to only optimize a single

View File

@ -360,6 +360,7 @@ abstract class DirectoryIndexReader extends IndexReader {
Directory dir; Directory dir;
long generation; long generation;
long version; long version;
final boolean isOptimized;
ReaderCommit(SegmentInfos infos, Directory dir) throws IOException { ReaderCommit(SegmentInfos infos, Directory dir) throws IOException {
segmentsFileName = infos.getCurrentSegmentFileName(); segmentsFileName = infos.getCurrentSegmentFileName();
@ -374,6 +375,11 @@ abstract class DirectoryIndexReader extends IndexReader {
} }
version = infos.getVersion(); version = infos.getVersion();
generation = infos.getGeneration(); generation = infos.getGeneration();
isOptimized = infos.size() == 1 && !infos.info(0).hasDeletions();
}
public boolean isOptimized() {
return isOptimized;
} }
public String getSegmentsFileName() { public String getSegmentsFileName() {
return segmentsFileName; return segmentsFileName;

View File

@ -74,6 +74,13 @@ public abstract class IndexCommit implements IndexCommitPoint {
throw new UnsupportedOperationException("This IndexCommit does not support this method."); throw new UnsupportedOperationException("This IndexCommit does not support this method.");
} }
/**
* Returns true if this commit is an optimized index.
*/
public boolean isOptimized() {
throw new UnsupportedOperationException("This IndexCommit does not support this method.");
}
/** /**
* Two IndexCommits are equal if both their Directory and versions are equal. * Two IndexCommits are equal if both their Directory and versions are equal.
*/ */

View File

@ -579,6 +579,7 @@ final class IndexFileDeleter {
Collection commitsToDelete; Collection commitsToDelete;
long version; long version;
long generation; long generation;
final boolean isOptimized;
public CommitPoint(Collection commitsToDelete, Directory directory, SegmentInfos segmentInfos) throws IOException { public CommitPoint(Collection commitsToDelete, Directory directory, SegmentInfos segmentInfos) throws IOException {
this.directory = directory; this.directory = directory;
@ -595,7 +596,12 @@ final class IndexFileDeleter {
if (segmentInfo.dir == directory) { if (segmentInfo.dir == directory) {
files.addAll(segmentInfo.files()); files.addAll(segmentInfo.files());
} }
} }
isOptimized = segmentInfos.size() == 1 && !segmentInfos.info(0).hasDeletions();
}
public boolean isOptimized() {
return isOptimized;
} }
public String getSegmentsFileName() { public String getSegmentsFileName() {

View File

@ -61,11 +61,16 @@ public class TestDeletionPolicy extends LuceneTestCase
class KeepAllDeletionPolicy implements IndexDeletionPolicy { class KeepAllDeletionPolicy implements IndexDeletionPolicy {
int numOnInit; int numOnInit;
int numOnCommit; int numOnCommit;
Directory dir;
public void onInit(List commits) { public void onInit(List commits) {
verifyCommitOrder(commits); verifyCommitOrder(commits);
numOnInit++; numOnInit++;
} }
public void onCommit(List commits) { public void onCommit(List commits) throws IOException {
IndexCommit lastCommit = (IndexCommit) commits.get(commits.size()-1);
IndexReader r = IndexReader.open(dir);
assertEquals("lastCommit.isOptimized()=" + lastCommit.isOptimized() + " vs IndexReader.isOptimized=" + r.isOptimized(), r.isOptimized(), lastCommit.isOptimized());
r.close();
verifyCommitOrder(commits); verifyCommitOrder(commits);
numOnCommit++; numOnCommit++;
} }
@ -263,10 +268,12 @@ public class TestDeletionPolicy extends LuceneTestCase
KeepAllDeletionPolicy policy = new KeepAllDeletionPolicy(); KeepAllDeletionPolicy policy = new KeepAllDeletionPolicy();
Directory dir = new RAMDirectory(); Directory dir = new RAMDirectory();
policy.dir = dir;
IndexWriter writer = new IndexWriter(dir, autoCommit, new WhitespaceAnalyzer(), true, policy, IndexWriter.MaxFieldLength.LIMITED); IndexWriter writer = new IndexWriter(dir, autoCommit, new WhitespaceAnalyzer(), true, policy, IndexWriter.MaxFieldLength.LIMITED);
writer.setMaxBufferedDocs(10); writer.setMaxBufferedDocs(10);
writer.setUseCompoundFile(useCompoundFile); writer.setUseCompoundFile(useCompoundFile);
writer.setMergeScheduler(new SerialMergeScheduler());
for(int i=0;i<107;i++) { for(int i=0;i<107;i++) {
addDoc(writer); addDoc(writer);
if (autoCommit && i%10 == 0) if (autoCommit && i%10 == 0)

View File

@ -1315,6 +1315,16 @@ public class TestIndexReader extends LuceneTestCase
IndexReader r2 = r.reopen(); IndexReader r2 = r.reopen();
assertFalse(c.equals(r2.getIndexCommit())); assertFalse(c.equals(r2.getIndexCommit()));
assertFalse(r2.getIndexCommit().isOptimized());
r2.close();
writer = new IndexWriter(d, new StandardAnalyzer(), false, IndexWriter.MaxFieldLength.LIMITED);
writer.optimize();
writer.close();
r2 = r.reopen();
assertTrue(r2.getIndexCommit().isOptimized());
r.close(); r.close();
r2.close(); r2.close();
d.close(); d.close();