mirror of https://github.com/apache/lucene.git
LUCENE-6246: simple tests for other index/flags possibilities
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1660441 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
456187051b
commit
4d29650682
|
@ -17,17 +17,25 @@ package org.apache.lucene.index;
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import org.apache.lucene.analysis.Analyzer;
|
||||
import org.apache.lucene.analysis.CannedTokenStream;
|
||||
import org.apache.lucene.analysis.MockTokenizer;
|
||||
import org.apache.lucene.analysis.Token;
|
||||
import org.apache.lucene.document.Document;
|
||||
import org.apache.lucene.document.Field;
|
||||
import org.apache.lucene.document.FieldType;
|
||||
import org.apache.lucene.document.StringField;
|
||||
import org.apache.lucene.document.TextField;
|
||||
import org.apache.lucene.search.DocIdSetIterator;
|
||||
import org.apache.lucene.store.Directory;
|
||||
import org.apache.lucene.util.BytesRef;
|
||||
import org.apache.lucene.util.LuceneTestCase;
|
||||
import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
|
||||
|
||||
/**
|
||||
* Test basic postingsenum behavior, flags, reuse, etc.
|
||||
*/
|
||||
@SuppressCodecs("Direct") // Direct does not support reuse, but we test that it works...
|
||||
public class TestPostingsEnum extends LuceneTestCase {
|
||||
|
||||
public void testDocsOnly() throws Exception {
|
||||
|
@ -94,4 +102,822 @@ public class TestPostingsEnum extends LuceneTestCase {
|
|||
reader.close();
|
||||
dir.close();
|
||||
}
|
||||
|
||||
public void testFreqs() throws Exception {
|
||||
Directory dir = newDirectory();
|
||||
IndexWriterConfig iwc = new IndexWriterConfig(new Analyzer() {
|
||||
@Override
|
||||
protected TokenStreamComponents createComponents(String fieldName) {
|
||||
return new TokenStreamComponents(new MockTokenizer());
|
||||
}
|
||||
});
|
||||
IndexWriter iw = new IndexWriter(dir, iwc);
|
||||
Document doc = new Document();
|
||||
FieldType ft = new FieldType(TextField.TYPE_NOT_STORED);
|
||||
ft.setIndexOptions(IndexOptions.DOCS_AND_FREQS);
|
||||
doc.add(new Field("foo", "bar bar", ft));
|
||||
iw.addDocument(doc);
|
||||
DirectoryReader reader = DirectoryReader.open(iw, false);
|
||||
|
||||
// sugar method (FREQS)
|
||||
PostingsEnum postings = getOnlySegmentReader(reader).postings(new Term("foo", "bar"));
|
||||
assertEquals(-1, postings.docID());
|
||||
assertEquals(0, postings.nextDoc());
|
||||
assertEquals(2, postings.freq());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, postings.nextDoc());
|
||||
|
||||
// termsenum reuse (FREQS)
|
||||
TermsEnum termsEnum = getOnlySegmentReader(reader).terms("foo").iterator(null);
|
||||
termsEnum.seekExact(new BytesRef("bar"));
|
||||
PostingsEnum postings2 = termsEnum.postings(null, postings);
|
||||
assertNotNull(postings2);
|
||||
assertSame(postings, postings2);
|
||||
// and it had better work
|
||||
assertEquals(-1, postings.docID());
|
||||
assertEquals(0, postings.nextDoc());
|
||||
assertEquals(2, postings.freq());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, postings.nextDoc());
|
||||
|
||||
// asking for docs only: ok
|
||||
PostingsEnum docsOnly = termsEnum.postings(null, null, PostingsEnum.NONE);
|
||||
assertEquals(-1, docsOnly.docID());
|
||||
assertEquals(0, docsOnly.nextDoc());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsOnly.freq() == 1 || docsOnly.freq() == 2);
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsOnly.nextDoc());
|
||||
// reuse that too
|
||||
PostingsEnum docsOnly2 = termsEnum.postings(null, docsOnly, PostingsEnum.NONE);
|
||||
assertNotNull(docsOnly2);
|
||||
assertSame(docsOnly, docsOnly2);
|
||||
// and it had better work
|
||||
assertEquals(-1, docsOnly2.docID());
|
||||
assertEquals(0, docsOnly2.nextDoc());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsOnly.freq() == 1 || docsOnly.freq() == 2);
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsOnly2.nextDoc());
|
||||
|
||||
// we did not index positions
|
||||
PostingsEnum docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.POSITIONS);
|
||||
assertNull(docsAndPositionsEnum);
|
||||
|
||||
// we did not index positions
|
||||
docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.PAYLOADS);
|
||||
assertNull(docsAndPositionsEnum);
|
||||
|
||||
// we did not index positions
|
||||
docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.OFFSETS);
|
||||
assertNull(docsAndPositionsEnum);
|
||||
|
||||
// we did not index positions
|
||||
docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.ALL);
|
||||
assertNull(docsAndPositionsEnum);
|
||||
|
||||
iw.close();
|
||||
reader.close();
|
||||
dir.close();
|
||||
}
|
||||
|
||||
public void testPositions() throws Exception {
|
||||
Directory dir = newDirectory();
|
||||
IndexWriterConfig iwc = new IndexWriterConfig(new Analyzer() {
|
||||
@Override
|
||||
protected TokenStreamComponents createComponents(String fieldName) {
|
||||
return new TokenStreamComponents(new MockTokenizer());
|
||||
}
|
||||
});
|
||||
IndexWriter iw = new IndexWriter(dir, iwc);
|
||||
Document doc = new Document();
|
||||
doc.add(new TextField("foo", "bar bar", Field.Store.NO));
|
||||
iw.addDocument(doc);
|
||||
DirectoryReader reader = DirectoryReader.open(iw, false);
|
||||
|
||||
// sugar method (FREQS)
|
||||
PostingsEnum postings = getOnlySegmentReader(reader).postings(new Term("foo", "bar"));
|
||||
assertEquals(-1, postings.docID());
|
||||
assertEquals(0, postings.nextDoc());
|
||||
assertEquals(2, postings.freq());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, postings.nextDoc());
|
||||
|
||||
// termsenum reuse (FREQS)
|
||||
TermsEnum termsEnum = getOnlySegmentReader(reader).terms("foo").iterator(null);
|
||||
termsEnum.seekExact(new BytesRef("bar"));
|
||||
PostingsEnum postings2 = termsEnum.postings(null, postings);
|
||||
assertNotNull(postings2);
|
||||
assertSame(postings, postings2);
|
||||
// and it had better work
|
||||
assertEquals(-1, postings.docID());
|
||||
assertEquals(0, postings.nextDoc());
|
||||
assertEquals(2, postings.freq());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, postings.nextDoc());
|
||||
|
||||
// asking for docs only: ok
|
||||
PostingsEnum docsOnly = termsEnum.postings(null, null, PostingsEnum.NONE);
|
||||
assertEquals(-1, docsOnly.docID());
|
||||
assertEquals(0, docsOnly.nextDoc());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsOnly.freq() == 1 || docsOnly.freq() == 2);
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsOnly.nextDoc());
|
||||
// reuse that too
|
||||
PostingsEnum docsOnly2 = termsEnum.postings(null, docsOnly, PostingsEnum.NONE);
|
||||
assertNotNull(docsOnly2);
|
||||
assertSame(docsOnly, docsOnly2);
|
||||
// and it had better work
|
||||
assertEquals(-1, docsOnly2.docID());
|
||||
assertEquals(0, docsOnly2.nextDoc());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsOnly.freq() == 1 || docsOnly.freq() == 2);
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsOnly2.nextDoc());
|
||||
|
||||
// asking for positions, ok
|
||||
PostingsEnum docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.POSITIONS);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
|
||||
// now reuse the positions
|
||||
PostingsEnum docsAndPositionsEnum2 = termsEnum.postings(null, docsAndPositionsEnum, PostingsEnum.POSITIONS);
|
||||
assertSame(docsAndPositionsEnum, docsAndPositionsEnum2);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
|
||||
// payloads, offsets, etc don't cause an error if they aren't there
|
||||
docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.PAYLOADS);
|
||||
assertNotNull(docsAndPositionsEnum);
|
||||
// but make sure they work
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
// reuse
|
||||
docsAndPositionsEnum2 = termsEnum.postings(null, docsAndPositionsEnum, PostingsEnum.PAYLOADS);
|
||||
assertSame(docsAndPositionsEnum, docsAndPositionsEnum2);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
|
||||
docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.OFFSETS);
|
||||
assertNotNull(docsAndPositionsEnum);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
// reuse
|
||||
docsAndPositionsEnum2 = termsEnum.postings(null, docsAndPositionsEnum, PostingsEnum.OFFSETS);
|
||||
assertSame(docsAndPositionsEnum, docsAndPositionsEnum2);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
|
||||
docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.ALL);
|
||||
assertNotNull(docsAndPositionsEnum);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
docsAndPositionsEnum2 = termsEnum.postings(null, docsAndPositionsEnum, PostingsEnum.ALL);
|
||||
assertSame(docsAndPositionsEnum, docsAndPositionsEnum2);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
|
||||
iw.close();
|
||||
reader.close();
|
||||
dir.close();
|
||||
}
|
||||
|
||||
public void testOffsets() throws Exception {
|
||||
Directory dir = newDirectory();
|
||||
IndexWriterConfig iwc = new IndexWriterConfig(new Analyzer() {
|
||||
@Override
|
||||
protected TokenStreamComponents createComponents(String fieldName) {
|
||||
return new TokenStreamComponents(new MockTokenizer());
|
||||
}
|
||||
});
|
||||
IndexWriter iw = new IndexWriter(dir, iwc);
|
||||
Document doc = new Document();
|
||||
FieldType ft = new FieldType(TextField.TYPE_NOT_STORED);
|
||||
ft.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS);
|
||||
doc.add(new Field("foo", "bar bar", ft));
|
||||
iw.addDocument(doc);
|
||||
DirectoryReader reader = DirectoryReader.open(iw, false);
|
||||
|
||||
// sugar method (FREQS)
|
||||
PostingsEnum postings = getOnlySegmentReader(reader).postings(new Term("foo", "bar"));
|
||||
assertEquals(-1, postings.docID());
|
||||
assertEquals(0, postings.nextDoc());
|
||||
assertEquals(2, postings.freq());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, postings.nextDoc());
|
||||
|
||||
// termsenum reuse (FREQS)
|
||||
TermsEnum termsEnum = getOnlySegmentReader(reader).terms("foo").iterator(null);
|
||||
termsEnum.seekExact(new BytesRef("bar"));
|
||||
PostingsEnum postings2 = termsEnum.postings(null, postings);
|
||||
assertNotNull(postings2);
|
||||
assertSame(postings, postings2);
|
||||
// and it had better work
|
||||
assertEquals(-1, postings.docID());
|
||||
assertEquals(0, postings.nextDoc());
|
||||
assertEquals(2, postings.freq());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, postings.nextDoc());
|
||||
|
||||
// asking for docs only: ok
|
||||
PostingsEnum docsOnly = termsEnum.postings(null, null, PostingsEnum.NONE);
|
||||
assertEquals(-1, docsOnly.docID());
|
||||
assertEquals(0, docsOnly.nextDoc());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsOnly.freq() == 1 || docsOnly.freq() == 2);
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsOnly.nextDoc());
|
||||
// reuse that too
|
||||
PostingsEnum docsOnly2 = termsEnum.postings(null, docsOnly, PostingsEnum.NONE);
|
||||
assertNotNull(docsOnly2);
|
||||
assertSame(docsOnly, docsOnly2);
|
||||
// and it had better work
|
||||
assertEquals(-1, docsOnly2.docID());
|
||||
assertEquals(0, docsOnly2.nextDoc());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsOnly.freq() == 1 || docsOnly.freq() == 2);
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsOnly2.nextDoc());
|
||||
|
||||
// asking for positions, ok
|
||||
PostingsEnum docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.POSITIONS);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.startOffset() == -1 || docsAndPositionsEnum.startOffset() == 0);
|
||||
assertTrue(docsAndPositionsEnum.endOffset() == -1 || docsAndPositionsEnum.endOffset() == 3);
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.startOffset() == -1 || docsAndPositionsEnum.startOffset() == 4);
|
||||
assertTrue(docsAndPositionsEnum.endOffset() == -1 || docsAndPositionsEnum.endOffset() == 7);
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
|
||||
// now reuse the positions
|
||||
PostingsEnum docsAndPositionsEnum2 = termsEnum.postings(null, docsAndPositionsEnum, PostingsEnum.POSITIONS);
|
||||
assertSame(docsAndPositionsEnum, docsAndPositionsEnum2);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.startOffset() == -1 || docsAndPositionsEnum.startOffset() == 0);
|
||||
assertTrue(docsAndPositionsEnum.endOffset() == -1 || docsAndPositionsEnum.endOffset() == 3);
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.startOffset() == -1 || docsAndPositionsEnum.startOffset() == 4);
|
||||
assertTrue(docsAndPositionsEnum.endOffset() == -1 || docsAndPositionsEnum.endOffset() == 7);
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
|
||||
// payloads don't cause an error if they aren't there
|
||||
docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.PAYLOADS);
|
||||
assertNotNull(docsAndPositionsEnum);
|
||||
// but make sure they work
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.startOffset() == -1 || docsAndPositionsEnum.startOffset() == 0);
|
||||
assertTrue(docsAndPositionsEnum.endOffset() == -1 || docsAndPositionsEnum.endOffset() == 3);
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.startOffset() == -1 || docsAndPositionsEnum.startOffset() == 4);
|
||||
assertTrue(docsAndPositionsEnum.endOffset() == -1 || docsAndPositionsEnum.endOffset() == 7);
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
// reuse
|
||||
docsAndPositionsEnum2 = termsEnum.postings(null, docsAndPositionsEnum, PostingsEnum.PAYLOADS);
|
||||
assertSame(docsAndPositionsEnum, docsAndPositionsEnum2);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.startOffset() == -1 || docsAndPositionsEnum.startOffset() == 0);
|
||||
assertTrue(docsAndPositionsEnum.endOffset() == -1 || docsAndPositionsEnum.endOffset() == 3);
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.startOffset() == -1 || docsAndPositionsEnum.startOffset() == 4);
|
||||
assertTrue(docsAndPositionsEnum.endOffset() == -1 || docsAndPositionsEnum.endOffset() == 7);
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
|
||||
docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.OFFSETS);
|
||||
assertNotNull(docsAndPositionsEnum);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(0, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(3, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(4, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(7, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
// reuse
|
||||
docsAndPositionsEnum2 = termsEnum.postings(null, docsAndPositionsEnum, PostingsEnum.OFFSETS);
|
||||
assertSame(docsAndPositionsEnum, docsAndPositionsEnum2);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(0, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(3, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(4, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(7, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
|
||||
docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.ALL);
|
||||
assertNotNull(docsAndPositionsEnum);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(0, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(3, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(4, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(7, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
docsAndPositionsEnum2 = termsEnum.postings(null, docsAndPositionsEnum, PostingsEnum.ALL);
|
||||
assertSame(docsAndPositionsEnum, docsAndPositionsEnum2);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(0, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(3, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(4, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(7, docsAndPositionsEnum.endOffset());
|
||||
assertNull(docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
|
||||
iw.close();
|
||||
reader.close();
|
||||
dir.close();
|
||||
}
|
||||
|
||||
public void testPayloads() throws Exception {
|
||||
Directory dir = newDirectory();
|
||||
IndexWriterConfig iwc = new IndexWriterConfig(null);
|
||||
IndexWriter iw = new IndexWriter(dir, iwc);
|
||||
Document doc = new Document();
|
||||
Token token1 = new Token("bar", 0, 3);
|
||||
token1.setPayload(new BytesRef("pay1"));
|
||||
Token token2 = new Token("bar", 4, 7);
|
||||
token2.setPayload(new BytesRef("pay2"));
|
||||
doc.add(new TextField("foo", new CannedTokenStream(token1, token2)));
|
||||
iw.addDocument(doc);
|
||||
DirectoryReader reader = DirectoryReader.open(iw, false);
|
||||
|
||||
// sugar method (FREQS)
|
||||
PostingsEnum postings = getOnlySegmentReader(reader).postings(new Term("foo", "bar"));
|
||||
assertEquals(-1, postings.docID());
|
||||
assertEquals(0, postings.nextDoc());
|
||||
assertEquals(2, postings.freq());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, postings.nextDoc());
|
||||
|
||||
// termsenum reuse (FREQS)
|
||||
TermsEnum termsEnum = getOnlySegmentReader(reader).terms("foo").iterator(null);
|
||||
termsEnum.seekExact(new BytesRef("bar"));
|
||||
PostingsEnum postings2 = termsEnum.postings(null, postings);
|
||||
assertNotNull(postings2);
|
||||
assertSame(postings, postings2);
|
||||
// and it had better work
|
||||
assertEquals(-1, postings.docID());
|
||||
assertEquals(0, postings.nextDoc());
|
||||
assertEquals(2, postings.freq());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, postings.nextDoc());
|
||||
|
||||
// asking for docs only: ok
|
||||
PostingsEnum docsOnly = termsEnum.postings(null, null, PostingsEnum.NONE);
|
||||
assertEquals(-1, docsOnly.docID());
|
||||
assertEquals(0, docsOnly.nextDoc());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsOnly.freq() == 1 || docsOnly.freq() == 2);
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsOnly.nextDoc());
|
||||
// reuse that too
|
||||
PostingsEnum docsOnly2 = termsEnum.postings(null, docsOnly, PostingsEnum.NONE);
|
||||
assertNotNull(docsOnly2);
|
||||
assertSame(docsOnly, docsOnly2);
|
||||
// and it had better work
|
||||
assertEquals(-1, docsOnly2.docID());
|
||||
assertEquals(0, docsOnly2.nextDoc());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsOnly.freq() == 1 || docsOnly.freq() == 2);
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsOnly2.nextDoc());
|
||||
|
||||
// asking for positions, ok
|
||||
PostingsEnum docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.POSITIONS);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.getPayload() == null || new BytesRef("pay1").equals(docsAndPositionsEnum.getPayload()));
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.getPayload() == null || new BytesRef("pay2").equals(docsAndPositionsEnum.getPayload()));
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
|
||||
// now reuse the positions
|
||||
PostingsEnum docsAndPositionsEnum2 = termsEnum.postings(null, docsAndPositionsEnum, PostingsEnum.POSITIONS);
|
||||
assertSame(docsAndPositionsEnum, docsAndPositionsEnum2);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.getPayload() == null || new BytesRef("pay1").equals(docsAndPositionsEnum.getPayload()));
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.getPayload() == null || new BytesRef("pay2").equals(docsAndPositionsEnum.getPayload()));
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
|
||||
// payloads
|
||||
docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.PAYLOADS);
|
||||
assertNotNull(docsAndPositionsEnum);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertEquals(new BytesRef("pay1"), docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertEquals(new BytesRef("pay2"), docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
// reuse
|
||||
docsAndPositionsEnum2 = termsEnum.postings(null, docsAndPositionsEnum, PostingsEnum.PAYLOADS);
|
||||
assertSame(docsAndPositionsEnum, docsAndPositionsEnum2);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertEquals(new BytesRef("pay1"), docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertEquals(new BytesRef("pay2"), docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
|
||||
docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.OFFSETS);
|
||||
assertNotNull(docsAndPositionsEnum);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.getPayload() == null || new BytesRef("pay1").equals(docsAndPositionsEnum.getPayload()));
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.getPayload() == null || new BytesRef("pay2").equals(docsAndPositionsEnum.getPayload()));
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
// reuse
|
||||
docsAndPositionsEnum2 = termsEnum.postings(null, docsAndPositionsEnum, PostingsEnum.OFFSETS);
|
||||
assertSame(docsAndPositionsEnum, docsAndPositionsEnum2);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.getPayload() == null || new BytesRef("pay1").equals(docsAndPositionsEnum.getPayload()));
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.getPayload() == null || new BytesRef("pay2").equals(docsAndPositionsEnum.getPayload()));
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
|
||||
docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.ALL);
|
||||
assertNotNull(docsAndPositionsEnum);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertEquals(new BytesRef("pay1"), docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertEquals(new BytesRef("pay2"), docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
docsAndPositionsEnum2 = termsEnum.postings(null, docsAndPositionsEnum, PostingsEnum.ALL);
|
||||
assertSame(docsAndPositionsEnum, docsAndPositionsEnum2);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertEquals(new BytesRef("pay1"), docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(-1, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(-1, docsAndPositionsEnum.endOffset());
|
||||
assertEquals(new BytesRef("pay2"), docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
|
||||
iw.close();
|
||||
reader.close();
|
||||
dir.close();
|
||||
}
|
||||
|
||||
public void testAll() throws Exception {
|
||||
Directory dir = newDirectory();
|
||||
IndexWriterConfig iwc = new IndexWriterConfig(null);
|
||||
IndexWriter iw = new IndexWriter(dir, iwc);
|
||||
Document doc = new Document();
|
||||
Token token1 = new Token("bar", 0, 3);
|
||||
token1.setPayload(new BytesRef("pay1"));
|
||||
Token token2 = new Token("bar", 4, 7);
|
||||
token2.setPayload(new BytesRef("pay2"));
|
||||
FieldType ft = new FieldType(TextField.TYPE_NOT_STORED);
|
||||
ft.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS);
|
||||
doc.add(new Field("foo", new CannedTokenStream(token1, token2), ft));
|
||||
iw.addDocument(doc);
|
||||
DirectoryReader reader = DirectoryReader.open(iw, false);
|
||||
|
||||
// sugar method (FREQS)
|
||||
PostingsEnum postings = getOnlySegmentReader(reader).postings(new Term("foo", "bar"));
|
||||
assertEquals(-1, postings.docID());
|
||||
assertEquals(0, postings.nextDoc());
|
||||
assertEquals(2, postings.freq());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, postings.nextDoc());
|
||||
|
||||
// termsenum reuse (FREQS)
|
||||
TermsEnum termsEnum = getOnlySegmentReader(reader).terms("foo").iterator(null);
|
||||
termsEnum.seekExact(new BytesRef("bar"));
|
||||
PostingsEnum postings2 = termsEnum.postings(null, postings);
|
||||
assertNotNull(postings2);
|
||||
assertSame(postings, postings2);
|
||||
// and it had better work
|
||||
assertEquals(-1, postings.docID());
|
||||
assertEquals(0, postings.nextDoc());
|
||||
assertEquals(2, postings.freq());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, postings.nextDoc());
|
||||
|
||||
// asking for docs only: ok
|
||||
PostingsEnum docsOnly = termsEnum.postings(null, null, PostingsEnum.NONE);
|
||||
assertEquals(-1, docsOnly.docID());
|
||||
assertEquals(0, docsOnly.nextDoc());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsOnly.freq() == 1 || docsOnly.freq() == 2);
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsOnly.nextDoc());
|
||||
// reuse that too
|
||||
PostingsEnum docsOnly2 = termsEnum.postings(null, docsOnly, PostingsEnum.NONE);
|
||||
assertNotNull(docsOnly2);
|
||||
assertSame(docsOnly, docsOnly2);
|
||||
// and it had better work
|
||||
assertEquals(-1, docsOnly2.docID());
|
||||
assertEquals(0, docsOnly2.nextDoc());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsOnly.freq() == 1 || docsOnly.freq() == 2);
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsOnly2.nextDoc());
|
||||
|
||||
// asking for positions, ok
|
||||
PostingsEnum docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.POSITIONS);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.startOffset() == -1 || docsAndPositionsEnum.startOffset() == 0);
|
||||
assertTrue(docsAndPositionsEnum.endOffset() == -1 || docsAndPositionsEnum.endOffset() == 3);
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.getPayload() == null || new BytesRef("pay1").equals(docsAndPositionsEnum.getPayload()));
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.startOffset() == -1 || docsAndPositionsEnum.startOffset() == 4);
|
||||
assertTrue(docsAndPositionsEnum.endOffset() == -1 || docsAndPositionsEnum.endOffset() == 7);
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.getPayload() == null || new BytesRef("pay2").equals(docsAndPositionsEnum.getPayload()));
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
|
||||
// now reuse the positions
|
||||
PostingsEnum docsAndPositionsEnum2 = termsEnum.postings(null, docsAndPositionsEnum, PostingsEnum.POSITIONS);
|
||||
assertSame(docsAndPositionsEnum, docsAndPositionsEnum2);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.startOffset() == -1 || docsAndPositionsEnum.startOffset() == 0);
|
||||
assertTrue(docsAndPositionsEnum.endOffset() == -1 || docsAndPositionsEnum.endOffset() == 3);
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.getPayload() == null || new BytesRef("pay1").equals(docsAndPositionsEnum.getPayload()));
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.startOffset() == -1 || docsAndPositionsEnum.startOffset() == 4);
|
||||
assertTrue(docsAndPositionsEnum.endOffset() == -1 || docsAndPositionsEnum.endOffset() == 7);
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.getPayload() == null || new BytesRef("pay2").equals(docsAndPositionsEnum.getPayload()));
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
|
||||
// payloads
|
||||
docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.PAYLOADS);
|
||||
assertNotNull(docsAndPositionsEnum);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.startOffset() == -1 || docsAndPositionsEnum.startOffset() == 0);
|
||||
assertTrue(docsAndPositionsEnum.endOffset() == -1 || docsAndPositionsEnum.endOffset() == 3);
|
||||
assertEquals(new BytesRef("pay1"), docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.startOffset() == -1 || docsAndPositionsEnum.startOffset() == 4);
|
||||
assertTrue(docsAndPositionsEnum.endOffset() == -1 || docsAndPositionsEnum.endOffset() == 7);
|
||||
assertEquals(new BytesRef("pay2"), docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
// reuse
|
||||
docsAndPositionsEnum2 = termsEnum.postings(null, docsAndPositionsEnum, PostingsEnum.PAYLOADS);
|
||||
assertSame(docsAndPositionsEnum, docsAndPositionsEnum2);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.startOffset() == -1 || docsAndPositionsEnum.startOffset() == 0);
|
||||
assertTrue(docsAndPositionsEnum.endOffset() == -1 || docsAndPositionsEnum.endOffset() == 3);
|
||||
assertEquals(new BytesRef("pay1"), docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.startOffset() == -1 || docsAndPositionsEnum.startOffset() == 4);
|
||||
assertTrue(docsAndPositionsEnum.endOffset() == -1 || docsAndPositionsEnum.endOffset() == 7);
|
||||
assertEquals(new BytesRef("pay2"), docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
|
||||
docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.OFFSETS);
|
||||
assertNotNull(docsAndPositionsEnum);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(0, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(3, docsAndPositionsEnum.endOffset());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.getPayload() == null || new BytesRef("pay1").equals(docsAndPositionsEnum.getPayload()));
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(4, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(7, docsAndPositionsEnum.endOffset());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.getPayload() == null || new BytesRef("pay2").equals(docsAndPositionsEnum.getPayload()));
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
// reuse
|
||||
docsAndPositionsEnum2 = termsEnum.postings(null, docsAndPositionsEnum, PostingsEnum.OFFSETS);
|
||||
assertSame(docsAndPositionsEnum, docsAndPositionsEnum2);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(0, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(3, docsAndPositionsEnum.endOffset());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.getPayload() == null || new BytesRef("pay1").equals(docsAndPositionsEnum.getPayload()));
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(4, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(7, docsAndPositionsEnum.endOffset());
|
||||
// we don't define what it is, but if its something else, we should look into it?
|
||||
assertTrue(docsAndPositionsEnum.getPayload() == null || new BytesRef("pay2").equals(docsAndPositionsEnum.getPayload()));
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
|
||||
docsAndPositionsEnum = getOnlySegmentReader(reader).postings(new Term("foo", "bar"), PostingsEnum.ALL);
|
||||
assertNotNull(docsAndPositionsEnum);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(0, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(3, docsAndPositionsEnum.endOffset());
|
||||
assertEquals(new BytesRef("pay1"), docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(4, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(7, docsAndPositionsEnum.endOffset());
|
||||
assertEquals(new BytesRef("pay2"), docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
docsAndPositionsEnum2 = termsEnum.postings(null, docsAndPositionsEnum, PostingsEnum.ALL);
|
||||
assertSame(docsAndPositionsEnum, docsAndPositionsEnum2);
|
||||
assertEquals(-1, docsAndPositionsEnum.docID());
|
||||
assertEquals(0, docsAndPositionsEnum.nextDoc());
|
||||
assertEquals(2, docsAndPositionsEnum.freq());
|
||||
assertEquals(0, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(0, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(3, docsAndPositionsEnum.endOffset());
|
||||
assertEquals(new BytesRef("pay1"), docsAndPositionsEnum.getPayload());
|
||||
assertEquals(1, docsAndPositionsEnum.nextPosition());
|
||||
assertEquals(4, docsAndPositionsEnum.startOffset());
|
||||
assertEquals(7, docsAndPositionsEnum.endOffset());
|
||||
assertEquals(new BytesRef("pay2"), docsAndPositionsEnum.getPayload());
|
||||
assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsAndPositionsEnum.nextDoc());
|
||||
|
||||
iw.close();
|
||||
reader.close();
|
||||
dir.close();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue