Hi, You can use TermQuery and BooleanQuery in Lucene 4.x in exactly the same way like in 2.0. No need to use QueryParser (and it's not a good idea to use QP for non-analyzed fields like product IDs). TermQuery is the way to go.
----- Uwe Schindler H.-H.-Meier-Allee 63, D-28213 Bremen http://www.thetaphi.de eMail: u...@thetaphi.de > -----Original Message----- > From: Lewis John Mcgibbney [mailto:lewis.mcgibb...@gmail.com] > Sent: Thursday, April 04, 2013 3:39 AM > To: java-user@lucene.apache.org > Subject: Upgrading Lucene 2.0.0 TermQuery to 4.2 QueryParser > > Hi, > I'm currently embarking upon a non trivial upgrade of some legacy 2.0.0 code > and encounter the following > > IndexSearcher searcher = null; > try { > searcher = new IndexSearcher(indexFilePath); > Term productIdTerm = new Term("product_id", productId); > org.apache.lucene.search.Query query = new > TermQuery(productIdTerm); > Hits hits = searcher.search(query); > > // should be exactly 1 hit > if (hits.length() == 0) { > throw new CatalogException("Product: [" + productId + "] NOT > found > in the catalog!"); > } else if (hits.length() > 1) { > throw new CatalogException("Product: [" + productId+ "] is not > unique in the catalog!"); > } > > Document productDoc = hits.doc(0); > > So far I've got here > > try { > DirectoryReader reader = DirectoryReader.open(indexFilePath); > IndexSearcher searcher = new IndexSearcher(reader); > org.apache.lucene.search.Query query = new QueryParser > (Version.LUCENE_42, productId, new > StandardAnalyzer(Version.LUCENE_42)).parse(productIdTerm.toString()); > TopDocs topd = searcher.search(query, 10); > ScoreDoc[] docs = topd.scoreDocs; > // should be exactly 1 hit > if (topd.totalHits == 0) { > throw new CatalogException("Product: [" + productId + "] NOT > found > in the catalog!"); > } else if (topd.totalHits > 1) { > throw new CatalogException("Product: [" + productId+ "] is not > unique in the catalog!"); > } > Document productDoc = searcher.doc(docs[0].doc); > > So I hope this is fine. Please someone call me out where I am going wrong > here. > > The issue I have is what if I wish to to a BooleanQuery like > > try { > searcher = new IndexSearcher(indexFilePath); > > // construct a Boolean query here > BooleanQuery booleanQuery = new BooleanQuery(); > TermQuery tq = new TermQuery(new Term("myfield", "myvalue")); > booleanQuery.add(tq, BooleanClause.Occur.MUST); > > Sort sort = new Sort(new SortField("CAS.ProductReceivedTime", > SortField.STRING, true)); > > How do I represent this in the new 4.x syntax? > > Thank you for taking the time to read through this code. I will not be > surprised if it is not correct. > Thank you > Lewis > > -- > *Lewis* --------------------------------------------------------------------- To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org For additional commands, e-mail: java-user-h...@lucene.apache.org