www.pudn.com > lucene.rar > SpanQueryTest.java


/* 
 * Created on 2005-12-31 
 * 
 * TODO To change the template for this generated file go to 
 * Window - Preferences - Java - Code Style - Code Templates 
 */ 
package examples.ch; 
import java.io.IOException; 
 
import org.apache.lucene.*; 
import org.apache.lucene.analysis.*; 
import org.apache.lucene.document.*; 
import org.apache.lucene.index.*; 
import org.apache.lucene.search.Hits; 
import org.apache.lucene.search.IndexSearcher; 
import org.apache.lucene.search.Query; 
import org.apache.lucene.search.spans.SpanQuery; 
import org.apache.lucene.search.spans.SpanTermQuery; 
import org.apache.lucene.search.spans.Spans; 
import org.apache.lucene.store.*; 
 
import junit.framework.TestCase; 
 
/** 
 * @author Administrator 
 * 
 * TODO To change the template for this generated type comment go to 
 * Window - Preferences - Java - Code Style - Code Templates 
 */ 
public class SpanQueryTest extends TestCase { 
 
	/* 
	 * @see TestCase#setUp() 
	 */ 
	private RAMDirectory directory; 
	private IndexSearcher searcher; 
	private IndexReader reader; 
	 
	private SpanTermQuery quick; 
	private SpanTermQuery brown; 
	private SpanTermQuery red; 
	private SpanTermQuery fox; 
	private SpanTermQuery lazy; 
	private SpanTermQuery sleepy; 
	private SpanTermQuery dog; 
	private SpanTermQuery cat; 
	private Analyzer analyzer; 
	protected void setUp() throws Exception { 
	//	directory=new RAMDirectory(); 
		 
		super.setUp(); 
		directory=new RAMDirectory(); 
		analyzer =new WhitespaceAnalyzer(); 
		IndexWriter writer=new IndexWriter(directory,analyzer,true); 
		 
		Document doc=new Document(); 
		doc.add(Field.Text("f","the quick brown fox jumps over the lazy dog")); 
		writer.addDocument(doc); 
		doc=new Document(); 
		doc.add(Field.Text("f","the quick red fox jumps over the sleepy cat")); 
		writer.addDocument(doc); 
		writer.close(); 
		 
		 
		searcher =new IndexSearcher(directory); 
		reader = IndexReader.open(directory); 
		quick =new SpanTermQuery(new Term("f","quick")); 
		brown =new SpanTermQuery(new Term("f","brown")); 
		red=new SpanTermQuery(new Term("f","red")); 
		fox =new SpanTermQuery(new Term("f","fox")); 
		lazy =new SpanTermQuery(new Term("f","lazy")); 
		sleepy=new SpanTermQuery(new Term("f","sleepy")); 
	//	quick =new SpanTermQuery(new Term("f","quick")); 
		dog =new SpanTermQuery(new Term("f","dog")); 
		cat=new SpanTermQuery(new Term("f","cat")); 
	} 
	private void assertOnlyBrownFox(Query query) throws IOException{ 
		Hits hits=searcher.search(query); 
		assertEquals(1,hits.length()); 
 
	//	assertEquals("wrong doc",0,hits.id(0)); 
		 
	 
	} 
	private void assertBothFoxes(Query query) throws IOException{ 
		Hits hits=searcher.search(query); 
		assertEquals(2,hits.length()); 
 
	//	assertEquals("wrong doc",0,hits.id(0)); 
		 
	 
	} 
	private void assertNoMatches(Query query) throws IOException{ 
		Hits hits=searcher.search(query); 
		assertEquals(0,hits.length()); 
 
	//	assertEquals("wrong doc",0,hits.id(0)); 
		 
	 
	} 
	public void testSpanTermQuery() throws IOException{ 
		assertOnlyBrownFox(brown); 
		//dumpSpans(brown); 
	 
	} 
	/** 
	 * @param brown2 
	 * @throws IOException 
	 */ 
	 
	private void dumpSpans(SpanQuery query) throws IOException{ 
		Spans spans=query.getSpans(reader); 
		System.out.println(query+ ":"); 
		int numSpans=0; 
		 
		Hits hits=searcher.search(query); 
		float[] scores=new float[2]; 
		for(int i=0;i