package com.o19s; import java.io.IOException; import org.apache.lucene.analysis.core.WhitespaceAnalyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; 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.DirectoryReader; import org.apache.lucene.index.IndexOptions; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; 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.TermQuery; import org.apache.lucene.search.TopDocs; import org.apache.lucene.search.BooleanClause.Occur; import org.apache.lucene.store.Directory; import org.apache.lucene.store.RAMDirectory; import org.apache.lucene.util.LuceneTestCase; import org.apache.lucene.util.Version; import org.junit.After; import org.junit.Before; import org.junit.Test; public class Lucene101Test 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 testBasics() throws IOException { Directory d = new RAMDirectory(); IndexOptions opts = IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS; WhitespaceAnalyzer analyzer = new WhitespaceAnalyzer(); IndexWriterConfig iwc = new IndexWriterConfig(analyzer); IndexWriter iw = new IndexWriter(d, iwc); Document doc = new Document(); FieldType tagsFieldType = new FieldType(); tagsFieldType.setStored(true); tagsFieldType.setIndexOptions(opts); FieldType idFieldType = new FieldType(); idFieldType.setStored(true); idFieldType.setIndexOptions(opts); idFieldType.setTokenized(false); Field idField = new Field("id", "1", idFieldType); Field field = new Field("tag", "star-trek captain-picard tv-show space", tagsFieldType); doc.add(field); doc.add(idField); iw.addDocument(doc); field = new Field("tag", "star-wars darth-vader space", tagsFieldType); idField = new Field("id", "2", idFieldType); doc.add(field); doc.add(idField); iw.addDocument(doc); iw.commit(); IndexReader ir = DirectoryReader.open(d); IndexSearcher is = new IndexSearcher(ir); Term termToFind = new Term("tag", "space"); TermQuery tq = new TermQuery(termToFind); TopDocs td = is.search(tq, 10); assert(td.scoreDocs.length == 2); } }