Fix numHits error in Lucene Catalog
Project: http://git-wip-us.apache.org/repos/asf/oodt/repo Commit: http://git-wip-us.apache.org/repos/asf/oodt/commit/e43c6c00 Tree: http://git-wip-us.apache.org/repos/asf/oodt/tree/e43c6c00 Diff: http://git-wip-us.apache.org/repos/asf/oodt/diff/e43c6c00 Branch: refs/heads/master Commit: e43c6c0076e4c75598389db881e1e0a1716fc91d Parents: 979f4a7 Author: Tom Barber <[email protected]> Authored: Sat Jul 29 19:24:21 2017 +0100 Committer: Tom Barber <[email protected]> Committed: Sat Jul 29 19:25:18 2017 +0100 ---------------------------------------------------------------------- .../oodt/cas/filemgr/catalog/LuceneCatalog.java | 120 ++++++++++--------- 1 file changed, 64 insertions(+), 56 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/oodt/blob/e43c6c00/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/LuceneCatalog.java ---------------------------------------------------------------------- diff --git a/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/LuceneCatalog.java b/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/LuceneCatalog.java index 4c9ed96..a8c0253 100644 --- a/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/LuceneCatalog.java +++ b/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/LuceneCatalog.java @@ -526,25 +526,26 @@ public class LuceneCatalog implements Catalog { SortField.Type.STRING, true)); //TODO FIX NUMBER OF RECORDS TopDocs check = searcher.search(query, 1, sort); - TopDocs topDocs = searcher.search(query, check.totalHits, sort); + if(check.totalHits>0) { + TopDocs topDocs = searcher.search(query, check.totalHits, sort); - ScoreDoc[] hits = topDocs.scoreDocs; + ScoreDoc[] hits = topDocs.scoreDocs; - // should be > 0 hits - if (hits.length > 0) { - products = new Vector<Product>(hits.length); - for (ScoreDoc hit : hits) { - Document productDoc = searcher.doc(hit.doc); - CompleteProduct prod = toCompleteProduct(productDoc, + // should be > 0 hits + if (hits.length > 0) { + products = new Vector<Product>(hits.length); + for (ScoreDoc hit : hits) { + Document productDoc = searcher.doc(hit.doc); + CompleteProduct prod = toCompleteProduct(productDoc, getRefs, false); - products.add(prod.getProduct()); - } - } else { - LOG.log(Level.FINEST, + products.add(prod.getProduct()); + } + } else { + LOG.log(Level.FINEST, "Request for products returned no results"); - return null; + return null; + } } - } catch (IOException e) { LOG.log(Level.WARNING, "IOException when opening index directory: [" @@ -592,23 +593,25 @@ public class LuceneCatalog implements Catalog { SortField.Type.STRING, true)); //TODO FIX NUMBER OF RECORDS TopDocs check = searcher.search(query, 1, sort); - TopDocs topDocs = searcher.search(query, check.totalHits, sort); + if(check.totalHits>0) { + TopDocs topDocs = searcher.search(query, check.totalHits, sort); - ScoreDoc[] hits = topDocs.scoreDocs; + ScoreDoc[] hits = topDocs.scoreDocs; - // should be > 0 hits - if (hits.length > 0) { - products = new Vector<Product>(hits.length); - for (ScoreDoc hit : hits) { - Document productDoc = searcher.doc(hit.doc); - CompleteProduct prod = toCompleteProduct(productDoc, + // should be > 0 hits + if (hits.length > 0) { + products = new Vector<Product>(hits.length); + for (ScoreDoc hit : hits) { + Document productDoc = searcher.doc(hit.doc); + CompleteProduct prod = toCompleteProduct(productDoc, getRefs, false); - products.add(prod.getProduct()); - } - } else { - LOG.log(Level.FINEST, "Request for products by type: [" + products.add(prod.getProduct()); + } + } else { + LOG.log(Level.FINEST, "Request for products by type: [" + type.getProductTypeId() + "] returned no results"); - return null; + return null; + } } } catch (IOException e) { @@ -796,7 +799,9 @@ public class LuceneCatalog implements Catalog { for (int pageNum = 1; pageNum < numPages + 1; pageNum++) { List<Product> pageProducts = paginateQuery(query, type, pageNum, null); + if(pageProducts!=null) { products.addAll(pageProducts); + } } if(n<=products.size()) { @@ -1372,59 +1377,61 @@ public class LuceneCatalog implements Catalog { TermQuery prodTypeTermQuery = new TermQuery(new Term( "product_type_id", type.getProductTypeId())); booleanQuery.add(prodTypeTermQuery, BooleanClause.Occur.MUST); - + //convert filemgr query into a lucene query for (QueryCriteria queryCriteria : query.getCriteria()) { booleanQuery.add(this.getQuery(queryCriteria), BooleanClause.Occur.MUST); } - + Sort sort = new Sort(new SortField("CAS.ProductReceivedTime", SortField.Type.STRING, true)); LOG.log(Level.FINE, "Querying LuceneCatalog: q: [" + booleanQuery + "]"); //TODO FIX NUMBER OF RECORDS TopDocs check = searcher.search(booleanQuery.build(),1, sort); - TopDocs topDocs = searcher.search(booleanQuery.build(),check.totalHits, sort); + if(check.totalHits>0) { + TopDocs topDocs = searcher.search(booleanQuery.build(), check.totalHits, sort); - // Calculate page size and set it while we have the results - if (page != null) { - page.setTotalPages(PaginationUtils.getTotalPage(topDocs.totalHits, pageSize)); - } + // Calculate page size and set it while we have the results + if (page != null) { + page.setTotalPages(PaginationUtils.getTotalPage(topDocs.totalHits, pageSize)); + } - ScoreDoc[] hits = topDocs.scoreDocs; + ScoreDoc[] hits = topDocs.scoreDocs; - if (hits.length > 0) { + if (hits.length > 0) { - int startNum = (pageNum - 1) * pageSize; - if (doSkip) { - if (startNum > hits.length) { - startNum = 0; - } + int startNum = (pageNum - 1) * pageSize; + if (doSkip) { + if (startNum > hits.length) { + startNum = 0; + } - products = new Vector<Product>(pageSize); + products = new Vector<Product>(pageSize); - for (int i = startNum; i < Math.min(hits.length, + for (int i = startNum; i < Math.min(hits.length, (startNum + pageSize)); i++) { - Document productDoc = searcher.doc(hits[i].doc); + Document productDoc = searcher.doc(hits[i].doc); - CompleteProduct prod = toCompleteProduct(productDoc, + CompleteProduct prod = toCompleteProduct(productDoc, false, false); - products.add(prod.getProduct()); - } - } else { - products = new Vector<Product>(hits.length); - for (int i = 0; i < hits.length; i++) { - Document productDoc = searcher.doc(hits[i].doc); + products.add(prod.getProduct()); + } + } else { + products = new Vector<Product>(hits.length); + for (int i = 0; i < hits.length; i++) { + Document productDoc = searcher.doc(hits[i].doc); - CompleteProduct prod = toCompleteProduct(productDoc, + CompleteProduct prod = toCompleteProduct(productDoc, false, false); - products.add(prod.getProduct()); + products.add(prod.getProduct()); + } } - } - } else { - LOG.log(Level.WARNING, "Query: [" + query + } else { + LOG.log(Level.WARNING, "Query: [" + query + "] for Product Type: [" + type.getProductTypeId() + "] returned no results"); + } } } catch (Exception e) { @@ -1444,6 +1451,7 @@ public class LuceneCatalog implements Catalog { } return products; + } private org.apache.lucene.search.Query getQuery(QueryCriteria queryCriteria) throws CatalogException {
