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*