Author: echatellier Date: 2011-08-26 20:07:29 +0200 (Fri, 26 Aug 2011) New Revision: 493 Url: http://nuiton.org/repositories/revision/sandbox/493 Log: Update code using bobo 3.0 and bobo group feature Modified: bobobrowselucenefacets/pom.xml bobobrowselucenefacets/src/main/java/org/bobo/TestLuceneGroupsFacets.java Modified: bobobrowselucenefacets/pom.xml =================================================================== --- bobobrowselucenefacets/pom.xml 2011-08-26 15:41:35 UTC (rev 492) +++ bobobrowselucenefacets/pom.xml 2011-08-26 18:07:29 UTC (rev 493) @@ -11,14 +11,9 @@ <version>3.3.0</version> </dependency> <dependency> - <groupId>org.apache.lucene</groupId> - <artifactId>lucene-grouping</artifactId> - <version>3.3.0</version> - </dependency> - <dependency> - <groupId>com.browseengine</groupId> + <groupId>com.browseengine.bobo</groupId> <artifactId>bobo-browse</artifactId> - <version>2.5.0</version> + <version>3.0.0-20110826</version> </dependency> <dependency> <groupId>log4j</groupId> Modified: bobobrowselucenefacets/src/main/java/org/bobo/TestLuceneGroupsFacets.java =================================================================== --- bobobrowselucenefacets/src/main/java/org/bobo/TestLuceneGroupsFacets.java 2011-08-26 15:41:35 UTC (rev 492) +++ bobobrowselucenefacets/src/main/java/org/bobo/TestLuceneGroupsFacets.java 2011-08-26 18:07:29 UTC (rev 493) @@ -50,11 +50,6 @@ import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.Sort; -import org.apache.lucene.search.grouping.GroupDocs; -import org.apache.lucene.search.grouping.SearchGroup; -import org.apache.lucene.search.grouping.TermFirstPassGroupingCollector; -import org.apache.lucene.search.grouping.TermSecondPassGroupingCollector; -import org.apache.lucene.search.grouping.TopGroups; import org.apache.lucene.store.Directory; import org.apache.lucene.store.LockObtainFailedException; import org.apache.lucene.store.NIOFSDirectory; @@ -65,7 +60,9 @@ import com.browseengine.bobo.api.Browsable; import com.browseengine.bobo.api.BrowseException; import com.browseengine.bobo.api.BrowseFacet; +import com.browseengine.bobo.api.BrowseHit; import com.browseengine.bobo.api.BrowseRequest; +import com.browseengine.bobo.api.BrowseResult; import com.browseengine.bobo.api.FacetAccessible; import com.browseengine.bobo.api.FacetSpec; import com.browseengine.bobo.api.FacetSpec.FacetSortSpec; @@ -114,30 +111,35 @@ doc1.add(new Field("id", "1", Store.YES, Index.ANALYZED)); doc1.add(new Field("subject", "s1", Store.YES, Index.ANALYZED)); doc1.add(new Field("title", "serie : bing bang theory", Store.YES, Index.ANALYZED)); + doc1.add(new Field("color", "red", Store.YES, Index.ANALYZED)); writer.addDocument(doc1); Document doc2 = new Document(); doc2.add(new Field("id", "2", Store.YES, Index.ANALYZED)); doc2.add(new Field("subject", "s1", Store.YES, Index.ANALYZED)); doc2.add(new Field("title", "serie : dr house ", Store.YES, Index.ANALYZED)); + doc2.add(new Field("color", "blue", Store.YES, Index.ANALYZED)); writer.addDocument(doc2); Document doc3 = new Document(); doc3.add(new Field("id", "3", Store.YES, Index.ANALYZED)); doc3.add(new Field("subject", "s1", Store.YES, Index.ANALYZED)); doc3.add(new Field("title", "serie : dexter", Store.YES, Index.ANALYZED)); + doc3.add(new Field("color", "red", Store.YES, Index.ANALYZED)); writer.addDocument(doc3); Document doc4 = new Document(); doc4.add(new Field("id", "4", Store.YES, Index.ANALYZED)); doc4.add(new Field("subject", "s2", Store.YES, Index.ANALYZED)); doc4.add(new Field("title", "serie : true blood", Store.YES, Index.ANALYZED)); + doc4.add(new Field("color", "blue", Store.YES, Index.ANALYZED)); writer.addDocument(doc4); Document doc5 = new Document(); doc5.add(new Field("id", "5", Store.YES, Index.ANALYZED)); doc5.add(new Field("subject", "s2", Store.YES, Index.ANALYZED)); doc5.add(new Field("title", "film : independance day", Store.YES, Index.ANALYZED)); + doc5.add(new Field("color", "red", Store.YES, Index.ANALYZED)); writer.addDocument(doc5); @@ -149,12 +151,12 @@ // subject facet handler SimpleFacetHandler subjectFacet = new SimpleFacetHandler("subject"); + SimpleFacetHandler colorFacet = new SimpleFacetHandler("color"); - List<FacetHandler<?>> handlerList = Arrays.asList(new FacetHandler<?>[] { subjectFacet }); + List<FacetHandler<?>> handlerList = Arrays.asList(new FacetHandler<?>[] { subjectFacet, colorFacet }); // opening a lucene index IndexReader reader = IndexReader.open(getIndexDirectory(), true); - IndexSearcher searcher = new IndexSearcher(reader); // decorate it with a bobo index reader BoboIndexReader boboReader = BoboIndexReader.getInstance(reader, handlerList); @@ -163,6 +165,7 @@ BrowseRequest br = new BrowseRequest(); br.setCount(10); br.setOffset(0); + br.setGroupBy("subject"); // parse a query QueryParser parser = new QueryParser(Version.LUCENE_33, "content", analyser); @@ -173,80 +176,25 @@ // add the facet output specs FacetSpec dateSpec = new FacetSpec(); dateSpec.setOrderBy(FacetSortSpec.OrderHitsDesc); - br.setFacetSpec("subject", dateSpec); + br.setFacetSpec("color", dateSpec); // perform browse Browsable browser = new BoboBrowser(boboReader); - Map<String, FacetAccessible> facetMap = getGroupCollector(searcher, browser, br); + BrowseResult result = browser.browse(br); + Map<String, FacetAccessible> facetMap = result.getFacetMap(); - //int totalHits = result.getNumHits(); - //BrowseHit[] hits = result.getHits(); + int totalHits = result.getNumHits(); + BrowseHit[] hits = result.getHits(); + for (BrowseHit hit : hits) { + System.out.println("Group value : " + hit.getGroupValue() + " : " + hit.getGroupHitsCount()); + } if (facetMap != null) { - FacetAccessible dateFacets = facetMap.get("subject"); + FacetAccessible dateFacets = facetMap.get("color"); List<BrowseFacet> facetVals = dateFacets.getFacets(); for (BrowseFacet facetVal : facetVals) { System.out.println("Facet subject " + facetVal.getValue() + "(" + facetVal.getFacetValueHitCount() + ")"); } } } - - public static Map<String, FacetAccessible> getGroupCollector(IndexSearcher searcher, Browsable browser, BrowseRequest br) throws IOException, BrowseException { - - // first pass : - TermFirstPassGroupingCollector c1 = new TermFirstPassGroupingCollector("subject", Sort.RELEVANCE, 100); - - CachingCollector cachedCollector = CachingCollector.create(c1, true, 4.0); - - searcher.search(br.getQuery(), cachedCollector); - - Collection<SearchGroup<String>> topGroups = c1.getTopGroups(0, true); - - if (topGroups == null) { - // No groups matched - return null; - } - - boolean getScores = true; - boolean getMaxScores = true; - boolean fillFields = true; - TermSecondPassGroupingCollector c2 = new TermSecondPassGroupingCollector("subject", - topGroups, Sort.RELEVANCE, Sort.RELEVANCE, 1, - getScores, getMaxScores, fillFields); - - //Optionally compute total group count - /*boolean requiredTotalGroupCount = true; - TermAllGroupsCollector allGroupsCollector = null; - if (requiredTotalGroupCount) { - allGroupsCollector = new TermAllGroupsCollector("author"); - c2 = (TermSecondPassGroupingCollector)MultiCollector.wrap(c2, allGroupsCollector); - }*/ - - /*if (cachedCollector.isCached()) { - // Cache fit within maxCacheRAMMB, so we can replay it: - cachedCollector.replay(c2); - } else { - // Cache was too large; must re-execute query: - searcher.search(br.getQuery(), c2); - }*/ - - Map<String, FacetAccessible> facetMap = new HashMap<String, FacetAccessible>(); - browser.browse(br, c2, facetMap); - - TopGroups groupsResult = c2.getTopGroups(0); - System.out.println("Groups found : " + groupsResult.groups.length); - /*if (requiredTotalGroupCount) { - groupsResult = new TopGroups(groupsResult, allGroupsCollector.getGroupCount()); - }*/ - - // Render groupsResult... - for (GroupDocs group : groupsResult.groups) { - System.out.println("Group " + group.groupValue + " (total : " + group.totalHits + ")"); - for (ScoreDoc doc : group.scoreDocs) { - System.out.println(" > top result doc id : " + doc.doc); - } - } - - return facetMap; - } }
participants (1)
-
echatellier@users.nuiton.org