+++ /dev/null
-package org.apache.lucene.index;
-
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
-import java.util.LinkedList;
-import java.util.Collection;
-
-import junit.framework.TestSuite;
-import junit.textui.TestRunner;
-
-import org.apache.lucene.analysis.MockAnalyzer;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field;
-import org.apache.lucene.index.IndexWriterConfig.OpenMode;
-import org.apache.lucene.store.Directory;
-import org.apache.lucene.util.LuceneTestCase;
-import org.apache.lucene.util._TestUtil;
-
-/** JUnit adaptation of an older test case DocTest. */
-public class TestDoc extends LuceneTestCase {
-
- /** Main for running test case by itself. */
- public static void main(String args[]) {
- TestRunner.run (new TestSuite(TestDoc.class));
- }
-
- private File workDir;
- private File indexDir;
- private LinkedList<File> files;
-
- /** Set the test case. This test case needs
- * a few text files created in the current working directory.
- */
- @Override
- public void setUp() throws Exception {
- super.setUp();
- workDir = _TestUtil.getTempDir("TestDoc");
- workDir.mkdirs();
-
- indexDir = _TestUtil.getTempDir("testIndex");
- indexDir.mkdirs();
-
- Directory directory = newFSDirectory(indexDir);
- directory.close();
-
- files = new LinkedList<File>();
- files.add(createOutput("test.txt",
- "This is the first test file"
- ));
-
- files.add(createOutput("test2.txt",
- "This is the second test file"
- ));
- }
-
- private File createOutput(String name, String text) throws IOException {
- FileWriter fw = null;
- PrintWriter pw = null;
-
- try {
- File f = new File(workDir, name);
- if (f.exists()) f.delete();
-
- fw = new FileWriter(f);
- pw = new PrintWriter(fw);
- pw.println(text);
- return f;
-
- } finally {
- if (pw != null) pw.close();
- if (fw != null) fw.close();
- }
- }
-
-
- /** This test executes a number of merges and compares the contents of
- * the segments created when using compound file or not using one.
- *
- * TODO: the original test used to print the segment contents to System.out
- * for visual validation. To have the same effect, a new method
- * checkSegment(String name, ...) should be created that would
- * assert various things about the segment.
- */
- public void testIndexAndMerge() throws Exception {
- StringWriter sw = new StringWriter();
- PrintWriter out = new PrintWriter(sw, true);
-
- Directory directory = newFSDirectory(indexDir);
- IndexWriter writer = new IndexWriter(
- directory,
- newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).
- setOpenMode(OpenMode.CREATE).
- setMaxBufferedDocs(-1).
- setMergePolicy(newLogMergePolicy(10))
- );
-
- SegmentInfo si1 = indexDoc(writer, "test.txt");
- printSegment(out, si1);
-
- SegmentInfo si2 = indexDoc(writer, "test2.txt");
- printSegment(out, si2);
- writer.close();
-
- SegmentInfo siMerge = merge(si1, si2, "merge", false);
- printSegment(out, siMerge);
-
- SegmentInfo siMerge2 = merge(si1, si2, "merge2", false);
- printSegment(out, siMerge2);
-
- SegmentInfo siMerge3 = merge(siMerge, siMerge2, "merge3", false);
- printSegment(out, siMerge3);
-
- directory.close();
- out.close();
- sw.close();
- String multiFileOutput = sw.getBuffer().toString();
- //System.out.println(multiFileOutput);
-
- sw = new StringWriter();
- out = new PrintWriter(sw, true);
-
- directory = newFSDirectory(indexDir);
- writer = new IndexWriter(
- directory,
- newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).
- setOpenMode(OpenMode.CREATE).
- setMaxBufferedDocs(-1).
- setMergePolicy(newLogMergePolicy(10))
- );
-
- si1 = indexDoc(writer, "test.txt");
- printSegment(out, si1);
-
- si2 = indexDoc(writer, "test2.txt");
- printSegment(out, si2);
- writer.close();
-
- siMerge = merge(si1, si2, "merge", true);
- printSegment(out, siMerge);
-
- siMerge2 = merge(si1, si2, "merge2", true);
- printSegment(out, siMerge2);
-
- siMerge3 = merge(siMerge, siMerge2, "merge3", true);
- printSegment(out, siMerge3);
-
- directory.close();
- out.close();
- sw.close();
- String singleFileOutput = sw.getBuffer().toString();
-
- assertEquals(multiFileOutput, singleFileOutput);
- }
-
- private SegmentInfo indexDoc(IndexWriter writer, String fileName)
- throws Exception
- {
- File file = new File(workDir, fileName);
- Document doc = new Document();
- doc.add(new Field("contents", new FileReader(file)));
- writer.addDocument(doc);
- writer.commit();
- return writer.newestSegment();
- }
-
-
- private SegmentInfo merge(SegmentInfo si1, SegmentInfo si2, String merged, boolean useCompoundFile)
- throws Exception {
- SegmentReader r1 = SegmentReader.get(true, si1, IndexReader.DEFAULT_TERMS_INDEX_DIVISOR);
- SegmentReader r2 = SegmentReader.get(true, si2, IndexReader.DEFAULT_TERMS_INDEX_DIVISOR);
-
- SegmentMerger merger = new SegmentMerger(si1.dir, IndexWriterConfig.DEFAULT_TERM_INDEX_INTERVAL, merged, null, null, new FieldInfos());
-
- merger.add(r1);
- merger.add(r2);
- merger.merge();
- r1.close();
- r2.close();
-
- final SegmentInfo info = new SegmentInfo(merged, si1.docCount + si2.docCount, si1.dir,
- false, true,
- merger.fieldInfos().hasProx(),
- merger.fieldInfos().hasVectors());
-
- if (useCompoundFile) {
- Collection<String> filesToDelete = merger.createCompoundFile(merged + ".cfs", info);
- info.setUseCompoundFile(true);
- for (final String fileToDelete : filesToDelete)
- si1.dir.deleteFile(fileToDelete);
- }
-
- return info;
- }
-
-
- private void printSegment(PrintWriter out, SegmentInfo si)
- throws Exception {
- SegmentReader reader = SegmentReader.get(true, si, IndexReader.DEFAULT_TERMS_INDEX_DIVISOR);
-
- for (int i = 0; i < reader.numDocs(); i++)
- out.println(reader.document(i));
-
- TermEnum tis = reader.terms();
- while (tis.next()) {
- out.print(tis.term());
- out.println(" DF=" + tis.docFreq());
-
- TermPositions positions = reader.termPositions(tis.term());
- try {
- while (positions.next()) {
- out.print(" doc=" + positions.doc());
- out.print(" TF=" + positions.freq());
- out.print(" pos=");
- out.print(positions.nextPosition());
- for (int j = 1; j < positions.freq(); j++)
- out.print("," + positions.nextPosition());
- out.println("");
- }
- } finally {
- positions.close();
- }
- }
- tis.close();
- reader.close();
- }
-}