Author: echatellier Date: 2011-06-28 17:08:10 +0200 (Tue, 28 Jun 2011) New Revision: 983 Url: http://nuiton.org/repositories/revision/wikitty/983 Log: FIx facet on multi valued fields. All test now pass \o/ Modified: trunk/wikitty-lucene/src/main/java/org/nuiton/wikitty/storage/lucene/WikittySearchEngineLucene.java trunk/wikitty-lucene/src/test/java/org/nuiton/wikitty/storage/lucene/WikittySearchEngineLuceneTest.java Modified: trunk/wikitty-lucene/src/main/java/org/nuiton/wikitty/storage/lucene/WikittySearchEngineLucene.java =================================================================== --- trunk/wikitty-lucene/src/main/java/org/nuiton/wikitty/storage/lucene/WikittySearchEngineLucene.java 2011-06-28 14:47:28 UTC (rev 982) +++ trunk/wikitty-lucene/src/main/java/org/nuiton/wikitty/storage/lucene/WikittySearchEngineLucene.java 2011-06-28 15:08:10 UTC (rev 983) @@ -103,6 +103,7 @@ import com.browseengine.bobo.api.FacetAccessible; import com.browseengine.bobo.api.FacetSpec; import com.browseengine.bobo.facets.FacetHandler; +import com.browseengine.bobo.facets.impl.MultiValueFacetHandler; import com.browseengine.bobo.facets.impl.SimpleFacetHandler; /** @@ -851,7 +852,7 @@ List<FacetHandler<?>> facetHandlers = new ArrayList<FacetHandler<?>>(); if (facetFields != null) { for (String facetField : facetFields) { - SimpleFacetHandler facetHandler = new SimpleFacetHandler(facetField); + MultiValueFacetHandler facetHandler = new MultiValueFacetHandler(facetField); facetHandlers.add(facetHandler); } } Modified: trunk/wikitty-lucene/src/test/java/org/nuiton/wikitty/storage/lucene/WikittySearchEngineLuceneTest.java =================================================================== --- trunk/wikitty-lucene/src/test/java/org/nuiton/wikitty/storage/lucene/WikittySearchEngineLuceneTest.java 2011-06-28 14:47:28 UTC (rev 982) +++ trunk/wikitty-lucene/src/test/java/org/nuiton/wikitty/storage/lucene/WikittySearchEngineLuceneTest.java 2011-06-28 15:08:10 UTC (rev 983) @@ -36,6 +36,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; +import org.junit.Ignore; import org.junit.Test; import org.nuiton.util.ApplicationConfig; import org.nuiton.wikitty.WikittyConfig; @@ -49,6 +50,7 @@ import org.nuiton.wikitty.entities.WikittyTreeNodeImpl; import org.nuiton.wikitty.entities.WikittyUserImpl; import org.nuiton.wikitty.search.Criteria; +import org.nuiton.wikitty.search.FacetTopic; import org.nuiton.wikitty.search.PagedResult; import org.nuiton.wikitty.search.Search; import org.nuiton.wikitty.search.TreeNodeResult; @@ -58,7 +60,7 @@ /** * Test for class {@link WikittySearchEngineLucene}. * - * @author poussin + * @author echatellier * @version $Revision$ * * Last update: $Date$ @@ -392,4 +394,91 @@ PagedResult<Wikitty> result = proxy.findAllByCriteria(criteria); Assert.assertEquals(1, result.getNumFound()); } + + /** + * Test que l'implementation des facettes sur bobo fonctionne correctement. + */ + @Test + public void testLuceneFacets() { + WikittyTreeNode myLabel1 = new WikittyTreeNodeImpl(); + myLabel1.setName("apple"); + WikittyTreeNode myLabel2 = new WikittyTreeNodeImpl(); + myLabel2.setName("apple"); + WikittyTreeNode myLabel3 = new WikittyTreeNodeImpl(); + myLabel3.setName("babana"); + WikittyTreeNode myLabel4 = new WikittyTreeNodeImpl(); + myLabel4.setName("babana"); + WikittyTreeNode myLabel5 = new WikittyTreeNodeImpl(); + myLabel5.setName("pineapple"); // ananas + + proxy.store(myLabel1, myLabel2, myLabel3, myLabel4, myLabel5); + + Criteria criteria = Search.query().exteq(WikittyTreeNode.EXT_WIKITTYTREENODE).criteria(); + criteria.addFacetField(WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_NAME); + criteria.setEndIndex(0); // just count + PagedResult<Wikitty> result = proxy.findAllByCriteria(criteria); + + // just les nombre pour chaque facette + List<FacetTopic> nameTopics = result.getFacets().get(WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_NAME); + Assert.assertEquals(3, nameTopics.size()); + for (FacetTopic nameTopic : nameTopics) { + if (log.isInfoEnabled()) { + log.info("Facet found " + nameTopic.getTopicName() + " : " + nameTopic.getCount()); + } + if (nameTopic.getTopicName().equals("apple")) { + Assert.assertEquals(2, nameTopic.getCount()); + } else if (nameTopic.getTopicName().equals("babana")) { + Assert.assertEquals(2, nameTopic.getCount()); + } else if (nameTopic.getTopicName().equals("pineapple")) { + Assert.assertEquals(1, nameTopic.getCount()); + } else { + Assert.fail("Unknown topic value : " + nameTopic.getTopicName()); + } + } + } + + /** + * Test que l'implementation des facettes sur bobo fonctionne correctement. + * Test une facet criteria. + * + * TODO bobo n'a pas l'air de supporter les facettes de type query + */ + @Ignore + public void testLuceneFacetCriteria() { + WikittyTreeNode myLabel1 = new WikittyTreeNodeImpl(); + myLabel1.setName("apple"); + WikittyTreeNode myLabel2 = new WikittyTreeNodeImpl(); + myLabel2.setName("apple"); + WikittyTreeNode myLabel3 = new WikittyTreeNodeImpl(); + myLabel3.setName("babana"); + WikittyTreeNode myLabel4 = new WikittyTreeNodeImpl(); + myLabel4.setName("babana"); + WikittyTreeNode myLabel5 = new WikittyTreeNodeImpl(); + myLabel5.setName("pineapple"); // ananas + + proxy.store(myLabel1, myLabel2, myLabel3, myLabel4, myLabel5); + + Criteria nameFacet = Search.query().keyword("*apple").criteria(); + nameFacet.setName("allapples"); + Criteria criteria = Search.query().exteq(WikittyTreeNode.EXT_WIKITTYTREENODE).criteria(); + criteria.addFacetCriteria(nameFacet); + criteria.setEndIndex(0); // just count + PagedResult<Wikitty> result = proxy.findAllByCriteria(criteria); + + // just les nombre pour chaque facette + List<FacetTopic> nameTopics = result.getFacets().get("allapples"); + Assert.assertEquals(2, nameTopics.size()); + for (FacetTopic nameTopic : nameTopics) { + if (log.isInfoEnabled()) { + log.info("Facet found " + nameTopic.getTopicName() + " : " + nameTopic.getCount()); + } + if (nameTopic.getTopicName().equals("apple")) { + Assert.assertEquals(2, nameTopic.getCount()); + } else if (nameTopic.getTopicName().equals("pineapple")) { + Assert.assertEquals(1, nameTopic.getCount()); + } else { + Assert.fail("Unknown topic value : " + nameTopic.getTopicName()); + } + } + } }