Index: src/test/org/apache/lucene/search/TestNoHitsQuery.java =================================================================== --- src/test/org/apache/lucene/search/TestNoHitsQuery.java (revision 0) +++ src/test/org/apache/lucene/search/TestNoHitsQuery.java (revision 0) @@ -0,0 +1,38 @@ +package org.apache.lucene.search; + +import org.apache.lucene.analysis.Analyzer; +import org.apache.lucene.analysis.standard.StandardAnalyzer; +import org.apache.lucene.document.Document; +import org.apache.lucene.document.Field; +import org.apache.lucene.document.Field.Index; +import org.apache.lucene.document.Field.Store; +import org.apache.lucene.index.IndexReader; +import org.apache.lucene.index.IndexWriter; +import org.apache.lucene.index.IndexWriter.MaxFieldLength; +import org.apache.lucene.store.RAMDirectory; +import org.apache.lucene.util.LuceneTestCase; +import org.apache.lucene.util.Version; + +public class TestNoHitsQuery extends LuceneTestCase { + + private Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT); + + public void testQuery() throws Exception { + RAMDirectory idxDir = new RAMDirectory(); + IndexWriter writer = new IndexWriter(idxDir,analyzer,MaxFieldLength.UNLIMITED); + Document doc = new Document(); + doc.add(new Field("body","test",Store.NO,Index.ANALYZED)); + writer.addDocument(doc); + writer.commit(); + writer.close(); + + IndexReader r = IndexReader.open(idxDir, true); + assertEquals(1, r.numDocs()); + + IndexSearcher s = new IndexSearcher(r); + Query nohitsQuery = new NoHitsQuery(); + TopDocs docs = s.search(nohitsQuery, 10); + assertEquals(0,docs.totalHits); + r.close(); + } +} Index: src/java/org/apache/lucene/search/NoHitsQuery.java =================================================================== --- src/java/org/apache/lucene/search/NoHitsQuery.java (revision 0) +++ src/java/org/apache/lucene/search/NoHitsQuery.java (revision 0) @@ -0,0 +1,90 @@ +package org.apache.lucene.search; + +import java.io.IOException; + +import org.apache.lucene.index.IndexReader; + +public class NoHitsQuery extends Query { + + /** + * + */ + private static final long serialVersionUID = 1L; + + @Override + public String toString(String field) { + return "-:-"; + } + + @Override + public Weight createWeight(Searcher searcher) throws IOException { + return new NoHitsWeight(); + } + + public class NoHitsWeight extends Weight{ + + /** + * + */ + private static final long serialVersionUID = 1L; + + @Override + public Explanation explain(IndexReader reader, int doc) + throws IOException { + return null; + } + + @Override + public Query getQuery() { + return NoHitsQuery.this; + } + + @Override + public float getValue() { + return 0.0f; + } + + @Override + public void normalize(float norm) { + + } + + @Override + public Scorer scorer(IndexReader reader, boolean scoreDocsInOrder, + boolean topScorer) throws IOException { + return new NoHitsScorer(); + } + + @Override + public float sumOfSquaredWeights() throws IOException { + return 0.0f; + } + } + + public class NoHitsScorer extends Scorer{ + + protected NoHitsScorer() { + super(null); + } + + @Override + public float score() throws IOException { + return 0.0f; + } + + @Override + public int advance(int target) throws IOException { + return NO_MORE_DOCS; + } + + @Override + public int docID() { + return NO_MORE_DOCS; + } + + @Override + public int nextDoc() throws IOException { + return NO_MORE_DOCS; + } + } +}