Hi Lucene Users, I would like to catch BooleanQuery.TooManyClauses exception for certain wildcard searches and display a 'subset' of results. I have used the WildcardTermEnum to give me the first X documents matching the wildcard query. Below is the code I use to implement the solution.
Without any performance concerns is this the best solution? Or should I just tell the user to refine their query!? Thanks Ben ===== QueryParserTest.java ================================================ ... public class QueryParserTest extends LuceneTestCase { ... private static int MAX_HITS = 10; public void testCatchTooManyClauses() throws Exception { reader = IndexReader.open(directory); String queryStr = "9*"; String field = "PART_NBR"; Hits hits = null; Vector docList; try { System.out.println("query: " + queryStr); System.out.println("field: " + field); hits = searcher.search(parser.parse(field+":"+queryStr)); docList = new Vector(hits.length()); Iterator docListIt = hits.iterator(); while(docListIt.hasNext()) docList.add(((Hit)docListIt.next()).getDocument()); } catch(BooleanQuery.TooManyClauses ex) { System.out.println("catch BooleanQuery.TooManyClauses, refining query"); Term term = new Term(field, queryStr); WildcardTermEnum wte = new WildcardTermEnum(reader, term); int cnt = 0; docList = new Vector(MAX_HITS); while(wte.next() && cnt++ < MAX_HITS) { term = wte.term(); TermQuery query = new TermQuery(new Term(field, term.text())); System.out.println("search for " + query.getTerm().text()); hits = searcher.search(query); Iterator docListIt = hits.iterator(); while(docListIt.hasNext()) docList.add(((Hit)docListIt.next()).getDocument()); } } System.out.println("found:" + docList.size()); } ... ===== QueryParserTest.java ================================================ -- No virus found in this outgoing message. Checked by AVG Free Edition. Version: 7.1.385 / Virus Database: 268.4.1/312 - Release Date: 14/04/2006 --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]