package com.o19s; import static org.junit.Assert.*; import java.io.IOException; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.FieldType; import org.apache.lucene.document.Field.Store; import org.apache.lucene.index.IndexOptions; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.RandomIndexWriter; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.util.LuceneTestCase; import org.junit.After; import org.junit.Before; import org.junit.Test; public class BackwardsTermQueryTest extends LuceneTestCase { Field newField(String name, String value, Store stored) { FieldType tagsFieldType = new FieldType(); tagsFieldType.setStored(stored == Store.YES); IndexOptions opts = IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS; tagsFieldType.setIndexOptions(opts); return new Field(name, value, tagsFieldType); } IndexSearcher searcherUnderTest; RandomIndexWriter indexWriterUnderTest; IndexReader indexReaderUnderTest; Directory dirUnderTest; @Before public void setupIndex() throws IOException { dirUnderTest = newDirectory(); indexWriterUnderTest = new RandomIndexWriter(random(), dirUnderTest); String[] docs = new String[] { "how now brown cow", "woc", "nworb", "won woh nworb" }; for (int i = 0; i < docs.length; i++) { Document doc = new Document(); doc.add(newStringField("id", "" + i, Field.Store.YES)); doc.add(newField("field", docs[i], Field.Store.NO)); indexWriterUnderTest.addDocument(doc); } indexWriterUnderTest.commit(); indexReaderUnderTest = indexWriterUnderTest.getReader(); searcherUnderTest = newSearcher(indexReaderUnderTest); } @After public void closeStuff() throws IOException { indexReaderUnderTest.close(); indexWriterUnderTest.close(); dirUnderTest.close(); } @Test public void testBackwardsMatchesGetScoreOf5() throws IOException { Query q = new BackwardsTermQuery("field", "brown"); // we should get the "brown" docs backwards first (ie the nworb) TopDocs t = searcherUnderTest.search(q, 10); ScoreDoc[] docs = t.scoreDocs; assert(docs[0].score == 5.0f); assert(docs[1].score == 5.0f); assert(docs[2].score == 1.0f); assert(docs.length == 3); } }