mirror of https://github.com/apache/lucene.git
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:
parent
4099732195
commit
22f76f1ebf
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in New Issue