You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by si...@apache.org on 2011/07/15 16:49:51 UTC
svn commit: r1147171 [2/2] - in /lucene/dev/branches/positions/lucene:
contrib/highlighter/src/java/org/apache/lucene/search/poshighlight/
contrib/highlighter/src/test/org/apache/lucene/search/poshighlight/
src/java/org/apache/lucene/search/ src/java/o...
Modified: lucene/dev/branches/positions/lucene/src/java/org/apache/lucene/search/spans/SpansScorerWrapper.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/positions/lucene/src/java/org/apache/lucene/search/spans/SpansScorerWrapper.java?rev=1147171&r1=1147170&r2=1147171&view=diff
==============================================================================
--- lucene/dev/branches/positions/lucene/src/java/org/apache/lucene/search/spans/SpansScorerWrapper.java (original)
+++ lucene/dev/branches/positions/lucene/src/java/org/apache/lucene/search/spans/SpansScorerWrapper.java Fri Jul 15 14:49:47 2011
@@ -40,17 +40,18 @@ public class SpansScorerWrapper extends
public boolean next() throws IOException {
if (doc == -1) {
doc = scorer.nextDoc();
+ positions.advanceTo(doc);
}
if (doc == Scorer.NO_MORE_DOCS) {
return false;
}
-
if ((current = positions.next()) == null) {
doc = scorer.nextDoc();
if (doc == Scorer.NO_MORE_DOCS) {
return false;
}
+ positions.advanceTo(doc);
return (current = positions.next()) != null;
}
return true;
@@ -62,6 +63,7 @@ public class SpansScorerWrapper extends
if (doc == Scorer.NO_MORE_DOCS) {
return false;
}
+ positions.advanceTo(doc);
return (current = positions.next()) != null;
}
Modified: lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/TestBooleanQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/TestBooleanQuery.java?rev=1147171&r1=1147170&r2=1147171&view=diff
==============================================================================
--- lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/TestBooleanQuery.java (original)
+++ lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/TestBooleanQuery.java Fri Jul 15 14:49:47 2011
@@ -33,6 +33,10 @@ import org.apache.lucene.search.BooleanC
import org.apache.lucene.search.positions.PositionFilterQuery;
import org.apache.lucene.search.positions.RangePositionsIterator;
import org.apache.lucene.search.positions.WithinPositionIterator;
+import org.apache.lucene.search.BooleanClause.Occur;
+import org.apache.lucene.search.positions.PositionFilterQuery;
+import org.apache.lucene.search.positions.RangePositionsIterator;
+import org.apache.lucene.search.positions.WithinPositionIterator;
import org.apache.lucene.store.Directory;
import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util.NamedThreadFactory;
Modified: lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/TestTermQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/TestTermQuery.java?rev=1147171&r1=1147170&r2=1147171&view=diff
==============================================================================
--- lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/TestTermQuery.java (original)
+++ lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/TestTermQuery.java Fri Jul 15 14:49:47 2011
@@ -22,20 +22,22 @@ import java.util.Arrays;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.MockAnalyzer;
-import org.apache.lucene.analysis.MockPayloadAnalyzer;
import org.apache.lucene.analysis.MockTokenFilter;
import org.apache.lucene.analysis.MockTokenizer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
+import org.apache.lucene.index.DocsAndPositionsEnum;
import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.RandomIndexWriter;
-import org.apache.lucene.index.Term;
import org.apache.lucene.index.IndexReader.AtomicReaderContext;
import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.index.MultiFields;
+import org.apache.lucene.index.RandomIndexWriter;
+import org.apache.lucene.index.Term;
import org.apache.lucene.search.Weight.ScorerContext;
import org.apache.lucene.search.positions.PositionIntervalIterator;
import org.apache.lucene.search.positions.PositionIntervalIterator.PositionInterval;
import org.apache.lucene.store.Directory;
+import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util.ReaderUtil;
@@ -44,24 +46,18 @@ import org.apache.lucene.util.ReaderUtil
*/
public class TestTermQuery extends LuceneTestCase {
- private String fieldName;
- private boolean usePayload;
-
- public void setUp() throws Exception {
- super.setUp();
- fieldName = "field" + random.nextInt();
- usePayload = random.nextBoolean();
- }
+ private String fieldName = "field";
/**
* Simple testcase for {@link TermScorer#positions()}
*/
public void testPositionsSimple() throws IOException {
Directory directory = newDirectory();
-
- final Analyzer analyzer = new MockAnalyzer(random, MockTokenizer.WHITESPACE, false, MockTokenFilter.EMPTY_STOPSET, true);
+
+ final Analyzer analyzer = new MockAnalyzer(random,
+ MockTokenizer.WHITESPACE, false, MockTokenFilter.EMPTY_STOPSET, true);
RandomIndexWriter writer = new RandomIndexWriter(random, directory,
- newIndexWriterConfig(TEST_VERSION_CURRENT, analyzer ));
+ newIndexWriterConfig(TEST_VERSION_CURRENT, analyzer));
for (int i = 0; i < 39; i++) {
Document doc = new Document();
doc.add(newField(fieldName, "1 2 3 4 5 6 7 8 9 10 "
@@ -70,6 +66,12 @@ public class TestTermQuery extends Lucen
writer.addDocument(doc);
}
IndexReader reader = writer.getReader();
+ DocsAndPositionsEnum docsAndPositions = MultiFields.getTerms(reader,
+ fieldName).docsAndPositions(null, new BytesRef("1"), null);
+ docsAndPositions.nextDoc();
+ docsAndPositions.nextPosition();
+ boolean payloadsIndexed = docsAndPositions.hasPayload();
+
IndexSearcher searcher = new IndexSearcher(reader);
writer.close();
@@ -80,42 +82,43 @@ public class TestTermQuery extends Lucen
Weight weight = one.createWeight(searcher);
for (AtomicReaderContext atomicReaderContext : leaves) {
Scorer scorer = weight.scorer(atomicReaderContext, ScorerContext.def()
- .needsPositions(true).needsPayloads(usePayload));
+ .needsPositions(true).needsPayloads(payloadsIndexed));
assertNotNull(scorer);
final int advance = scorer.advance(1 + random.nextInt(27));
PositionIntervalIterator positions = scorer.positions();
do {
+ assertEquals(scorer.docID(), positions.advanceTo(scorer.docID()));
+
PositionInterval interval = null;
String msg = "Advanced to: " + advance + " current doc: "
- + scorer.docID() + " usePayloads: " + usePayload;
+ + scorer.docID() + " usePayloads: " + payloadsIndexed;
assertNotNull(msg, (interval = positions.next()));
assertEquals(msg, 4.0f, positions.getScorer().freq(), 0.0f);
assertEquals(msg, 0, interval.begin);
assertEquals(msg, 0, interval.end);
- checkPayload(0, interval);
+ checkPayload(0, interval, payloadsIndexed);
assertNotNull(msg, (interval = positions.next()));
assertEquals(msg, 4.0f, positions.getScorer().freq(), 0.0f);
assertEquals(msg, 10, interval.begin);
assertEquals(msg, 10, interval.end);
- checkPayload(10, interval);
+ checkPayload(10, interval, payloadsIndexed);
assertNotNull(msg, (interval = positions.next()));
assertEquals(msg, 4.0f, positions.getScorer().freq(), 0.0f);
assertEquals(msg, 20, interval.begin);
assertEquals(msg, 20, interval.end);
- checkPayload(20, interval);
+ checkPayload(20, interval, payloadsIndexed);
assertNotNull(msg, (interval = positions.next()));
assertEquals(msg, 4.0f, positions.getScorer().freq(), 0.0f);
assertEquals(msg, 30, interval.begin);
assertEquals(msg, 30, interval.end);
- checkPayload(30, interval);
+ checkPayload(30, interval, payloadsIndexed);
assertNull(msg, (interval = positions.next()));
-
} while (scorer.nextDoc() != Scorer.NO_MORE_DOCS);
}
}
@@ -124,14 +127,19 @@ public class TestTermQuery extends Lucen
directory.close();
}
- public final void checkPayload(int pos, PositionInterval interval) throws IOException {
- if (usePayload) {
- // nocommit enable this with mockanalyzer
-// assertTrue(interval.payloadAvailable());
-// BytesRef bytes = new BytesRef();
-// assertTrue(interval.nextPayload(bytes));
-// assertFalse(interval.payloadAvailable());
-// assertEquals("pos: " + pos, bytes.utf8ToString());
+ public final void checkPayload(int pos, PositionInterval interval,
+ boolean payloadsIndexed) throws IOException {
+ if (payloadsIndexed) {
+ boolean wasPayloadAvailable = interval.payloadAvailable();
+ BytesRef bytes = new BytesRef();
+ assertTrue(interval.nextPayload(bytes));
+ assertFalse(interval.payloadAvailable());
+ if (!wasPayloadAvailable) {
+ // if payload has 0 length interval or rather docs&pos enum will treat is as not existing
+ assertEquals(0, bytes.length);
+ } else {
+ assertTrue(bytes.length > 0);
+ }
} else {
assertFalse(interval.payloadAvailable());
}
@@ -198,20 +206,20 @@ public class TestTermQuery extends Lucen
}
PositionIntervalIterator positions = scorer.positions();
Integer[] pos = positionsInDoc[atomicReaderContext.docBase + docID];
-
- assertEquals((float)pos.length, positions.getScorer().freq(), 0.0f);
+
+ assertEquals((float) pos.length, positions.getScorer().freq(), 0.0f);
// number of positions read should be random - don't read all of them
// allways
final int howMany = random.nextInt(20) == 0 ? pos.length
- random.nextInt(pos.length) : pos.length;
PositionInterval interval = null;
-
+ assertEquals(scorer.docID(), positions.advanceTo(scorer.docID()));
for (int j = 0; j < howMany; j++) {
assertNotNull((interval = positions.next()));
assertEquals("iteration: " + i + " initDoc: " + initDoc + " doc: "
+ docID + " base: " + atomicReaderContext.docBase
- + " positions: " + Arrays.toString(pos) + " usePayloads: "
- + usePayload, pos[j].intValue(), interval.begin);
+ + " positions: " + Arrays.toString(pos), pos[j].intValue(),
+ interval.begin);
assertEquals(pos[j].intValue(), interval.end);
}
if (howMany == pos.length) {
@@ -278,22 +286,24 @@ public class TestTermQuery extends Lucen
} else {
initDoc = scorer.advance(random.nextInt(maxDoc));
}
- String msg = "Iteration: " + i + " initDoc: " + initDoc + " payloads: "
- + usePayload;
+ String msg = "Iteration: " + i + " initDoc: " + initDoc;
PositionIntervalIterator positions = scorer.positions();
assertEquals(howMany / 2.f, positions.getScorer().freq(), 0.0);
+ assertEquals(scorer.docID(), positions.advanceTo(scorer.docID()));
for (int j = 0; j < howMany; j += 2) {
assertNotNull("next returned nullat index: " + j + " with freq: "
- + positions.getScorer().freq() + " -- " + msg,(interval = positions.next()));
+ + positions.getScorer().freq() + " -- " + msg,
+ (interval = positions.next()));
assertEquals("position missmatch index: " + j + " with freq: "
+ positions.getScorer().freq() + " -- " + msg, j, interval.begin);
}
- assertNull("next returned nonNull -- " + msg,(interval = positions.next()));
+ assertNull("next returned nonNull -- " + msg,
+ (interval = positions.next()));
}
}
reader.close();
dir.close();
}
-
+
}
\ No newline at end of file
Modified: lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/positions/TestBlockPositionsIterator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/positions/TestBlockPositionsIterator.java?rev=1147171&r1=1147170&r2=1147171&view=diff
==============================================================================
--- lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/positions/TestBlockPositionsIterator.java (original)
+++ lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/positions/TestBlockPositionsIterator.java Fri Jul 15 14:49:47 2011
@@ -134,6 +134,7 @@ public class TestBlockPositionsIterator
int nextDoc = scorer.nextDoc();
assertEquals(0, nextDoc);
PositionIntervalIterator positions = new BlockPositionIterator(scorer.positions());
+ assertEquals(0, positions.advanceTo(0));
PositionInterval interval = null;
int[] start = new int[] {0, 31};
int[] end = new int[] {2, 33};
@@ -152,6 +153,7 @@ public class TestBlockPositionsIterator
int nextDoc = scorer.nextDoc();
assertEquals(1, nextDoc);
PositionIntervalIterator positions = new BlockPositionIterator(scorer.positions());
+ assertEquals(1, positions.advanceTo(1));
PositionInterval interval = null;
int[] start = new int[] {3, 34};
int[] end = new int[] {5, 36};
Modified: lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/positions/TestConjunctionPositionsIterator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/positions/TestConjunctionPositionsIterator.java?rev=1147171&r1=1147170&r2=1147171&view=diff
==============================================================================
--- lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/positions/TestConjunctionPositionsIterator.java (original)
+++ lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/positions/TestConjunctionPositionsIterator.java Fri Jul 15 14:49:47 2011
@@ -121,6 +121,7 @@ public class TestConjunctionPositionsIte
int nextDoc = scorer.nextDoc();
assertEquals(0, nextDoc);
PositionIntervalIterator positions = scorer.positions();
+ assertEquals(0, positions.advanceTo(nextDoc));
PositionInterval interval = null;
int[] start = new int[] {0, 1, 2, 3, 4, 6, 7, 31, 32, 33};
int[] end = new int[] {2, 3, 4, 33, 33, 33, 33, 33, 34, 35};
@@ -129,7 +130,7 @@ public class TestConjunctionPositionsIte
// like it cold, Some like it in the pot nine days old! {7}Pease {8}porridge {9}hot!{3,4,5,6,7} Pease{8} porridge{9} cold!",
for (int j = 0; j < end.length; j++) {
interval = positions.next();
- assertNotNull(interval);
+ assertNotNull("" + j, interval);
assertEquals(start[j], interval.begin);
assertEquals(end[j], interval.end);
}
@@ -139,6 +140,7 @@ public class TestConjunctionPositionsIte
int nextDoc = scorer.nextDoc();
assertEquals(1, nextDoc);
PositionIntervalIterator positions = scorer.positions();
+ assertEquals(1, positions.advanceTo(nextDoc));
PositionInterval interval = null;
int[] start = new int[] {0, 1, 3, 4, 5, 6, 7, 31, 32, 34 };
int[] end = new int[] {5, 5, 5, 6, 7, 36, 36, 36, 36, 36 };
Added: lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/positions/TestDisjunctionPositionIterator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/positions/TestDisjunctionPositionIterator.java?rev=1147171&view=auto
==============================================================================
--- lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/positions/TestDisjunctionPositionIterator.java (added)
+++ lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/positions/TestDisjunctionPositionIterator.java Fri Jul 15 14:49:47 2011
@@ -0,0 +1,232 @@
+package org.apache.lucene.search.positions;
+
+import java.io.IOException;
+
+import org.apache.lucene.analysis.MockAnalyzer;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+import org.apache.lucene.index.CorruptIndexException;
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.RandomIndexWriter;
+import org.apache.lucene.index.Term;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
+import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.search.BooleanClause;
+import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.ScoreDoc;
+import org.apache.lucene.search.Scorer;
+import org.apache.lucene.search.TermQuery;
+import org.apache.lucene.search.TopDocs;
+import org.apache.lucene.search.Weight;
+import org.apache.lucene.search.BooleanClause.Occur;
+import org.apache.lucene.search.Weight.ScorerContext;
+import org.apache.lucene.search.positions.PositionIntervalIterator.PositionInterval;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.util.ReaderUtil;
+
+public class TestDisjunctionPositionIterator extends LuceneTestCase {
+ private static final void addDocs(RandomIndexWriter writer)
+ throws CorruptIndexException, IOException {
+ {
+ Document doc = new Document();
+ doc.add(newField(
+ "field",
+ "Pease porridge hot! Pease porridge cold! Pease porridge in the pot nine days old! Some like it hot, some"
+ + " like it cold, Some like it in the pot nine days old! Pease porridge hot! Pease porridge cold!",
+ Field.Store.YES, Field.Index.ANALYZED));
+ writer.addDocument(doc);
+ }
+
+ {
+ Document doc = new Document();
+ doc.add(newField(
+ "field",
+ "Pease porridge cold! Pease porridge hot! Pease porridge in the pot nine days old! Some like it cold, some"
+ + " like it hot, Some like it in the pot nine days old! Pease porridge cold! Pease porridge hot!",
+ Field.Store.YES, Field.Index.ANALYZED));
+ writer.addDocument(doc);
+ }
+ }
+
+ public void testDisjunctionPositionsBooleanQuery() throws IOException {
+ Directory directory = newDirectory();
+ RandomIndexWriter writer = new RandomIndexWriter(random, directory,
+ newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)));
+ addDocs(writer);
+
+ IndexReader reader = writer.getReader();
+ IndexSearcher searcher = new IndexSearcher(reader);
+ writer.close();
+ BooleanQuery query = new BooleanQuery();
+ query.add(new BooleanClause(new TermQuery(new Term("field", "porridge")),
+ Occur.SHOULD));
+ query.add(new BooleanClause(new TermQuery(new Term("field", "pease")),
+ Occur.SHOULD));
+ query.add(new BooleanClause(new TermQuery(new Term("field", "hot!")),
+ Occur.SHOULD));
+ {
+ PositionFilterQuery filter = new PositionFilterQuery(query,
+ new RangePositionsIterator(0, 3));
+ TopDocs search = searcher.search(filter, 10);
+ ScoreDoc[] scoreDocs = search.scoreDocs;
+ assertEquals(2, search.totalHits);
+ assertEquals(0, scoreDocs[0].doc);
+ }
+ {
+ PositionFilterQuery filter = new PositionFilterQuery(query,
+ new WithinPositionIterator(3));
+ TopDocs search = searcher.search(filter, 10);
+ ScoreDoc[] scoreDocs = search.scoreDocs;
+ assertEquals(2, search.totalHits);
+ assertEquals(0, scoreDocs[0].doc);
+ assertEquals(1, scoreDocs[1].doc);
+ }
+
+ searcher.close();
+ reader.close();
+ directory.close();
+ }
+
+ public void testBasic() throws IOException {
+ Directory directory = newDirectory();
+ RandomIndexWriter writer = new RandomIndexWriter(random, directory,
+ newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)));
+ {
+ Document doc = new Document();
+ doc.add(newField("field", "the quick brown fox", Field.Store.YES,
+ Field.Index.ANALYZED));
+ writer.addDocument(doc);
+ }
+ {
+ Document doc = new Document();
+ doc.add(newField("field", "the brown quick fox", Field.Store.YES,
+ Field.Index.ANALYZED));
+ writer.addDocument(doc);
+ }
+
+ IndexReader reader = writer.getReader();
+ IndexSearcher searcher = new IndexSearcher(reader);
+ writer.close();
+
+ BooleanQuery query = new BooleanQuery();
+ query.add(new BooleanClause(new TermQuery(new Term("field", "quick")),
+ Occur.SHOULD));
+ query.add(new BooleanClause(new TermQuery(new Term("field", "brown")),
+ Occur.SHOULD));
+
+ Weight weight = query.createWeight(searcher);
+ ReaderContext topReaderContext = searcher.getTopReaderContext();
+ AtomicReaderContext[] leaves = ReaderUtil.leaves(topReaderContext);
+ assertEquals(1, leaves.length);
+ Scorer scorer = weight.scorer(leaves[0],
+ ScorerContext.def().topScorer(true).needsPositions(true));
+
+ for (int i = 0; i < 2; i++) {
+
+ int nextDoc = scorer.nextDoc();
+ assertEquals(i, nextDoc);
+ PositionIntervalIterator positions = scorer.positions();
+ assertEquals(i, positions.advanceTo(nextDoc));
+ PositionInterval interval = positions.next();
+ assertEquals(1, interval.begin);
+ assertEquals(1, interval.end);
+
+ interval = positions.next();
+ assertEquals(2, interval.begin);
+ assertEquals(2, interval.end);
+ assertNull(positions.next());
+ }
+ reader.close();
+ searcher.close();
+ directory.close();
+
+ }
+
+ public void testDisjunctionPositionIterator() throws IOException {
+ Directory directory = newDirectory();
+ RandomIndexWriter writer = new RandomIndexWriter(random, directory,
+ newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)));
+ addDocs(writer);
+
+ IndexReader reader = writer.getReader();
+ IndexSearcher searcher = new IndexSearcher(reader);
+ writer.close();
+ BooleanQuery query1 = new BooleanQuery();
+ query1.add(new BooleanClause(new TermQuery(new Term("field", "porridge")),
+ Occur.MUST));
+ query1.add(new BooleanClause(new TermQuery(new Term("field", "pease")),
+ Occur.MUST));
+ query1.add(new BooleanClause(new TermQuery(new Term("field", "hot!")),
+ Occur.MUST));
+
+ BooleanQuery query2 = new BooleanQuery();
+ query2.add(new BooleanClause(new TermQuery(new Term("field", "pease")),
+ Occur.MUST));
+ query2.add(new BooleanClause(new TermQuery(new Term("field", "porridge")),
+ Occur.MUST));
+ query2.add(new BooleanClause(new TermQuery(new Term("field", "hot!")),
+ Occur.MUST));
+
+ BooleanQuery query = new BooleanQuery();
+ query.add(new BooleanClause(query1, Occur.SHOULD));
+ query.add(new BooleanClause(query2, Occur.SHOULD));
+ Weight weight = query.createWeight(searcher);
+ ReaderContext topReaderContext = searcher.getTopReaderContext();
+ AtomicReaderContext[] leaves = ReaderUtil.leaves(topReaderContext);
+ assertEquals(1, leaves.length);
+ for (int i = 0; i < leaves.length; i++) {
+ Scorer scorer = weight.scorer(leaves[0],
+ ScorerContext.def().topScorer(true).needsPositions(true));
+ {
+ int nextDoc = scorer.nextDoc();
+ assertEquals(0, nextDoc);
+ PositionIntervalIterator positions = scorer.positions();
+ assertEquals(0, positions.advanceTo(nextDoc));
+ PositionInterval interval = null;
+ int[] start = new int[] { 0, 1, 2, 3, 4, 6, 7, 31, 32, 33 };
+ int[] end = new int[] { 2, 3, 4, 33, 33, 33, 33, 33, 34, 35 };
+ // {start}term{end} - end is pos+1
+ // {0}Pease {1}porridge {2}hot!{0} {3}Pease{1} {4}porridge{2} cold!
+ // {5}Pease {6}porridge in the pot nine days old! Some like it hot,
+ // some"
+ // like it cold, Some like it in the pot nine days old! {7}Pease
+ // {8}porridge {9}hot!{3,4,5,6,7} Pease{8} porridge{9} cold!",
+ for (int j = 0; j < end.length; j++) {
+ interval = positions.next();
+ assertNotNull("" + j, interval);
+ assertEquals(start[j], interval.begin);
+ assertEquals(end[j], interval.end);
+ }
+ assertNull(positions.next());
+ }
+ {
+ int nextDoc = scorer.nextDoc();
+ assertEquals(1, nextDoc);
+ PositionIntervalIterator positions = scorer.positions();
+ assertEquals(1, positions.advanceTo(nextDoc));
+ PositionInterval interval = null;
+ int[] start = new int[] { 0, 1, 3, 4, 5, 6, 7, 31, 32, 34 };
+ int[] end = new int[] { 5, 5, 5, 6, 7, 36, 36, 36, 36, 36 };
+ // {start}term{end} - end is pos+1
+ // {0}Pease {1}porridge cold! {2}Pease {3}porridge {4}hot!{0, 1, 2, 3}
+ // {5}Pease {4, 6}porridge in the pot nine days old! Some like it cold,
+ // some
+ // like it hot, Some like it in the pot nine days old! {7}Pease
+ // {8}porridge cold! {9}Pease porridge hot{5, 6, 7, 8, 9}!
+ for (int j = 0; j < end.length; j++) {
+ interval = positions.next();
+ assertNotNull(interval);
+ assertEquals(j + "", start[j], interval.begin);
+ assertEquals(j + "", end[j], interval.end);
+ }
+ assertNull(positions.next());
+ }
+ }
+ searcher.close();
+ reader.close();
+ directory.close();
+ }
+}
+
Modified: lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/positions/TestOrderedConjunctionPositionsIterator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/positions/TestOrderedConjunctionPositionsIterator.java?rev=1147171&r1=1147170&r2=1147171&view=diff
==============================================================================
--- lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/positions/TestOrderedConjunctionPositionsIterator.java (original)
+++ lucene/dev/branches/positions/lucene/src/test/org/apache/lucene/search/positions/TestOrderedConjunctionPositionsIterator.java Fri Jul 15 14:49:47 2011
@@ -126,6 +126,7 @@ public class TestOrderedConjunctionPosit
int nextDoc = scorer.nextDoc();
assertEquals(0, nextDoc);
PositionIntervalIterator positions = new OrderedConjunctionPositionIterator(scorer.positions());
+ assertEquals(0, positions.advanceTo(nextDoc));
PositionInterval interval = null;
int[] start = new int[] {0, 31};
int[] end = new int[] {2, 33};
@@ -146,6 +147,7 @@ public class TestOrderedConjunctionPosit
int nextDoc = scorer.nextDoc();
assertEquals(1, nextDoc);
PositionIntervalIterator positions = new OrderedConjunctionPositionIterator(scorer.positions());
+ assertEquals(1, positions.advanceTo(nextDoc));
PositionInterval interval = null;
int[] start = new int[] {3, 34};
int[] end = new int[] {5, 36};