You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ro...@apache.org on 2012/11/12 22:39:54 UTC

svn commit: r1408467 [2/2] - in /lucene/dev/branches/LUCENE-2878/lucene/core/src: java/org/apache/lucene/search/intervals/ test/org/apache/lucene/search/intervals/

Copied: lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestNestedIntervalFilterQueries.java (from r1405439, lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestIntervalFilterQueries.java)
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestNestedIntervalFilterQueries.java?p2=lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestNestedIntervalFilterQueries.java&p1=lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestIntervalFilterQueries.java&r1=1405439&r2=1408467&rev=1408467&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestIntervalFilterQueries.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestNestedIntervalFilterQueries.java Mon Nov 12 21:39:45 2012
@@ -17,51 +17,24 @@ package org.apache.lucene.search.interva
  * limitations under the License.
  */
 
-import org.apache.lucene.analysis.MockAnalyzer;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.TextField;
-import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.RandomIndexWriter;
-import org.apache.lucene.index.Term;
-import org.apache.lucene.search.*;
-import org.apache.lucene.search.intervals.OrderedNearQuery;
-import org.apache.lucene.search.intervals.UnorderedNearQuery;
-import org.apache.lucene.store.Directory;
-import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.search.BooleanClause;
+import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.Query;
 
 import java.io.IOException;
 
-public class TestIntervalFilterQueries extends LuceneTestCase {
-
-  private IndexSearcher searcher;
-  private IndexReader reader;
-  private Directory directory;
-
-  public static final String field = "field";
+public class TestNestedIntervalFilterQueries extends IntervalTestBase {
 
   @Override
-  public void setUp() throws Exception {
-    super.setUp();
-    directory = newDirectory();
-    RandomIndexWriter writer = new RandomIndexWriter(random(), directory,
-        newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random()))
-            .setMergePolicy(newLogMergePolicy()));
+  protected void addDocs(RandomIndexWriter writer) throws IOException {
     for (int i = 0; i < docFields.length; i++) {
       Document doc = new Document();
-      doc.add(newField(field, docFields[i], TextField.TYPE_STORED));
+      doc.add(newField("field", docFields[i], TextField.TYPE_STORED));
       writer.addDocument(doc);
     }
-    writer.forceMerge(1);
-    reader = writer.getReader();
-    writer.close();
-    searcher = newSearcher(reader);
-  }
-
-  @Override
-  public void tearDown() throws Exception {
-    reader.close();
-    directory.close();
-    super.tearDown();
   }
 
   private String[] docFields = {
@@ -71,23 +44,29 @@ public class TestIntervalFilterQueries e
     "w1 w3 w2 w4 w5 w6 w7 w8", //3
   };
 
-  public TermQuery makeTermQuery(String text) {
-    return new TermQuery(new Term(field, text));
-  }
-
-  private void checkHits(Query query, int[] results) throws IOException {
-    CheckHits.checkHits(random(), query, field, searcher, results);
+  public void testOrderedDisjunctionQueries() throws IOException {
+    // Two phrases whose subparts appear in a document, but that do not fulfil the slop
+    // requirements of the parent IntervalFilterQuery
+    Query sentence1 = new OrderedNearQuery(0, makeTermQuery("w1"), makeTermQuery("w8"), makeTermQuery("w4"));
+    Query sentence2 = new OrderedNearQuery(0, makeTermQuery("w3"), makeTermQuery("w7"), makeTermQuery("w6"));
+    BooleanQuery bq = new BooleanQuery();
+    bq.add(sentence1, BooleanClause.Occur.SHOULD);
+    bq.add(sentence2, BooleanClause.Occur.SHOULD);
+    checkIntervals(bq, searcher, new int[][]{});
   }
 
   // or(w1 pre/2 w2, w1 pre/3 w10)
   public void testOrNearNearQuery() throws IOException {
-    Query near1 = new OrderedNearQuery(2, makeTermQuery("w1"), makeTermQuery("w2"));
-    Query near2 = new OrderedNearQuery(3, makeTermQuery("w1"), makeTermQuery("w10"));
+    Query near1 = new OrderedNearQuery(2, false, makeTermQuery("w1"), makeTermQuery("w2"));
+    Query near2 = new OrderedNearQuery(3, false, makeTermQuery("w1"), makeTermQuery("w10"));
     BooleanQuery bq = new BooleanQuery();
     bq.add(near1, BooleanClause.Occur.SHOULD);
     bq.add(near2, BooleanClause.Occur.SHOULD);
-
-    checkHits(bq, new int[] { 0, 2, 3 });
+    checkIntervals(bq, searcher, new int[][]{
+        { 0, 0, 1, 0, 9 },
+        { 2, 0, 2 },
+        { 3, 0, 2 }
+    });
   }
 
   // or(w2 within/2 w1, w10 within/3 w1)
@@ -97,15 +76,20 @@ public class TestIntervalFilterQueries e
     BooleanQuery bq = new BooleanQuery();
     bq.add(near1, BooleanClause.Occur.SHOULD);
     bq.add(near2, BooleanClause.Occur.SHOULD);
-
-    checkHits(bq, new int[] { 0, 2, 3 });
+    checkIntervals(bq, searcher, new int[][]{
+        {0, 0, 1},
+        {2, 0, 2},
+        {3, 0, 2}
+    });
   }
 
   // (a pre/2 b) pre/6 (c pre/2 d)
   public void testNearNearNearQuery() throws IOException {
-    Query near1 = new OrderedNearQuery(2, makeTermQuery("w1"), makeTermQuery("w4"));
-    Query near2 = new OrderedNearQuery(2, makeTermQuery("w10"), makeTermQuery("w12"));
+    Query near1 = new OrderedNearQuery(2, false, makeTermQuery("w1"), makeTermQuery("w4"));
+    Query near2 = new OrderedNearQuery(2, false, makeTermQuery("w10"), makeTermQuery("w12"));
     Query near3 = new OrderedNearQuery(6, near1, near2);
-    checkHits(near3, new int[] { 0 });
+    checkIntervals(near3, searcher, new int[][]{
+        { 0, 0, 11, 0, 3, 9, 11 }
+    });
   }
 }

Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestPositionsAndOffsets.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestPositionsAndOffsets.java?rev=1408467&r1=1408466&r2=1408467&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestPositionsAndOffsets.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestPositionsAndOffsets.java Mon Nov 12 21:39:45 2012
@@ -16,57 +16,28 @@ package org.apache.lucene.search.interva
  * limitations under the License.
  */
 
-import java.io.IOException;
-import java.util.List;
-
-import org.apache.lucene.analysis.MockAnalyzer;
-import org.apache.lucene.codecs.Codec;
-import org.apache.lucene.codecs.lucene41.Lucene41PostingsFormat;
-import org.apache.lucene.codecs.memory.MemoryPostingsFormat;
-import org.apache.lucene.codecs.nestedpulsing.NestedPulsingPostingsFormat;
-import org.apache.lucene.codecs.pulsing.Pulsing41PostingsFormat;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.FieldType;
 import org.apache.lucene.document.TextField;
-import org.apache.lucene.index.AtomicReaderContext;
 import org.apache.lucene.index.FieldInfo;
-import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexReaderContext;
-import org.apache.lucene.index.IndexWriterConfig;
 import org.apache.lucene.index.RandomIndexWriter;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.search.BooleanClause;
 import org.apache.lucene.search.BooleanQuery;
-import org.apache.lucene.search.IndexSearcher;
-import org.apache.lucene.search.MultiPhraseQuery;
-import org.apache.lucene.search.PhraseQuery;
 import org.apache.lucene.search.Query;
-import org.apache.lucene.search.Scorer;
 import org.apache.lucene.search.TermQuery;
-import org.apache.lucene.search.Weight.PostingFeatures;
-import org.apache.lucene.search.Weight;
-import org.apache.lucene.search.intervals.Interval;
-import org.apache.lucene.search.intervals.IntervalIterator;
-import org.apache.lucene.store.Directory;
 import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
-import org.apache.lucene.util.LuceneTestCase;
-import org.apache.lucene.util._TestUtil;
-
-@SuppressCodecs({"MockFixedIntBlock", "MockVariableIntBlock", "MockSep", "MockRandom"})
-public class TestPositionsAndOffsets extends LuceneTestCase {
-
-  // What am I testing here?
-  // - can get offsets out of a basic TermQuery, and a more complex BooleanQuery
-  // - if offsets are not stored, then we get -1 returned
 
+import java.io.IOException;
 
+// We need to store offsets here, so don't use the following Codecs, which don't
+// support them.
+@SuppressCodecs({"MockFixedIntBlock", "MockVariableIntBlock", "MockSep", "MockRandom"})
+public class TestPositionsAndOffsets extends IntervalTestBase {
 
-  private static void addDocs(RandomIndexWriter writer, boolean withOffsets) throws IOException {
-    FieldType fieldType = TextField.TYPE_STORED;
-    if (withOffsets) {
-      fieldType = new FieldType(fieldType);
-      fieldType.setIndexOptions(FieldInfo.IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS);
-    }
+  protected void addDocs(RandomIndexWriter writer) throws IOException {
+    FieldType fieldType = new FieldType(TextField.TYPE_NOT_STORED);
+    fieldType.setIndexOptions(FieldInfo.IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS);
     Document doc = new Document();
     doc.add(newField(
         "field",
@@ -76,103 +47,22 @@ public class TestPositionsAndOffsets ext
     writer.addDocument(doc);
   }
 
-  private void testQuery(Query query, int[][] expectedOffsets) throws IOException {
-    testQuery(query, expectedOffsets, true);
-  }
-
-  private void testQuery(Query query, int[][] expectedOffsets, boolean needsOffsets) throws IOException {
-    Directory directory = newDirectory();
-    RandomIndexWriter writer = new RandomIndexWriter(random(), directory, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())));
-    addDocs(writer, needsOffsets);
-
-    IndexReader reader = writer.getReader();
-    IndexSearcher searcher = new IndexSearcher(reader);
-    writer.close();
-
-    Weight weight = query.createWeight(searcher);
-    IndexReaderContext topReaderContext = searcher.getTopReaderContext();
-    List<AtomicReaderContext> leaves = topReaderContext.leaves();
-    assertEquals(1, leaves.size());
-    Scorer scorer = weight.scorer(leaves.get(0),
-        true, true, PostingFeatures.OFFSETS, leaves.get(0).reader().getLiveDocs());
-
-    int nextDoc = scorer.nextDoc();
-    assertEquals(0, nextDoc);
-    IntervalIterator positions = scorer.intervals(false);
-    int startOffsets[] = expectedOffsets[0];
-    int endOffsets[] = expectedOffsets[1];
-
-    assertEquals(0, positions.scorerAdvanced(nextDoc));
-    for (int i = 0; i < startOffsets.length; i++) {
-      Interval interval = positions.next();
-      assertEquals("i: " + i, startOffsets[i], interval.offsetBegin);
-      assertEquals("i: " + i, endOffsets[i], interval.offsetEnd);
-    }
-
-    assertNull(positions.next());
-
-    reader.close();
-    directory.close();
-  }
-
-  public void testTermQueryWithoutOffsets() throws IOException {
+  public void testTermQueryOffsets() throws IOException {
     Query query = new TermQuery(new Term("field", "porridge"));
-       int[] startOffsets = new int[] { 6, 26, 47, 164, 184 };
-        int[] endOffsets = new int[] { 14, 34, 55, 172, 192 };
-        testQuery(query, new int[][] { startOffsets, endOffsets });
+    checkIntervalOffsets(query, searcher, new int[][]{
+        { 0, 6, 14, 26, 34, 47, 55, 164, 172, 184, 192 }
+    });
   }
 
-  public void testBooleanQueryWithOffsets() throws IOException {
-    
+  public void testBooleanQueryOffsets() throws IOException {
     BooleanQuery query = new BooleanQuery();
     query.add(new BooleanClause(new TermQuery(new Term("field", "porridge")),
         BooleanClause.Occur.MUST));
     query.add(new BooleanClause(new TermQuery(new Term("field", "nine")),
         BooleanClause.Occur.MUST));
-    int[] startOffsetsConj = new int[] {47,143};
-    int[] endOffsetsConj = new int[] {71, 172};
-    testQuery(query, new int[][] {startOffsetsConj, endOffsetsConj});
-  }
-   
-  public void testExactPhraseQuery() throws IOException {
-    PhraseQuery query = new PhraseQuery();
-    query.add(new Term("field", "pease"));
-    query.add(new Term("field", "porridge"));
-    query.add(new Term("field", "hot!"));
-    int[] startOffsetsBlock = new int[] {0, 158};
-    int[] endOffsetsBlock = new int[] {19, 177};
-    testQuery(query, new int[][] {startOffsetsBlock, endOffsetsBlock});
-  }
-  
-  public void testSloppyPhraseQuery() throws IOException {
-    PhraseQuery query = new PhraseQuery();
-    query.add(new Term("field", "pease"));
-    query.add(new Term("field", "hot!"));
-    query.setSlop(1);
-    int[] startOffsetsBlock = new int[] {0, 158};
-    int[] endOffsetsBlock = new int[] {19, 177};
-    testQuery(query, new int[][] {startOffsetsBlock, endOffsetsBlock});
-  }
-  
-  public void testManyTermSloppyPhraseQuery() throws IOException {
-    PhraseQuery query = new PhraseQuery();
-    query.add(new Term("field", "pease"));
-    query.add(new Term("field", "porridge"));
-    query.add(new Term("field", "pot"));
-    query.setSlop(2);
-    int[] startOffsetsBlock = new int[] {41};
-    int[] endOffsetsBlock = new int[] {66};
-    testQuery(query, new int[][] {startOffsetsBlock, endOffsetsBlock});
-  }
-  
-  public void testMultiTermPhraseQuery() throws IOException {
-    MultiPhraseQuery query = new MultiPhraseQuery();
-    query.add(new Term("field", "pease"));
-    query.add(new Term("field", "porridge"));
-    query
-        .add(new Term[] {new Term("field", "hot!"), new Term("field", "cold!")});
-    int[] startOffsetsBlock = new int[] {0, 20, 158, 178};
-    int[] endOffsetsBlock = new int[] {19, 40, 177, 198};
-    testQuery(query, new int[][] {startOffsetsBlock, endOffsetsBlock});
+    checkIntervalOffsets(query,  searcher, new int[][]{
+        { 0, 47, 71, 143, 172 }
+    });
   }
+
 }
\ No newline at end of file