/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.itest.search;
import org.junit.Test;
import com.enonic.cms.core.content.index.ContentIndexQuery;
import com.enonic.cms.core.content.resultset.ContentResultSet;
import com.enonic.cms.core.search.result.FacetResultSet;
import com.enonic.cms.core.search.result.HistogramFacetResultSet;
import static org.junit.Assert.*;
public class ContentIndexServiceImpl_facetHistogramFacetTest
extends ContentIndexServiceFacetTestBase
{
@Test
public void simple_histogram()
{
createAndIndexContent( 1, "100", "data.myValue" );
createAndIndexContent( 2, "101", "data.myValue" );
createAndIndexContent( 3, "200", "data.myValue" );
createAndIndexContent( 4, "201", "data.myValue" );
createAndIndexContent( 5, "300", "data.myValue" );
createAndIndexContent( 6, "401", "data.myValue" );
createAndIndexContent( 7, "501", "data.myValue" );
createAndIndexContent( 8, "1000", "data.myValue" );
flushIndex();
ContentIndexQuery query = new ContentIndexQuery( "" );
final String facetDefinition = "<facets>\n" +
" <histogram name=\"myHistogramFacet\">\n" +
" <index>data.myValue</index>\n" +
" <interval>100</interval>\n" +
" </histogram>\n" +
"</facets>\n";
query.setFacets( facetDefinition );
final ContentResultSet result = contentIndexService.query( query );
final FacetResultSet next = result.getFacetsResultSet().iterator().next();
assertNotNull( next );
assertTrue( next instanceof HistogramFacetResultSet );
HistogramFacetResultSet histogramFacetResultSet = (HistogramFacetResultSet) next;
assertEquals( 6, histogramFacetResultSet.getResultEntries().size() );
String expectedXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<content>\n" +
" <facets>\n" +
" <histogram name=\"myHistogramFacet\">\n" +
" <interval hits=\"2\">100</interval>\n" +
" <interval hits=\"2\">200</interval>\n" +
" <interval hits=\"1\">300</interval>\n" +
" <interval hits=\"1\">400</interval>\n" +
" <interval hits=\"1\">500</interval>\n" +
" <interval hits=\"1\">1000</interval>\n" +
" </histogram>\n" +
" </facets>\n" +
"</content>";
createAndCompareResultAsXml( result, expectedXml );
}
@Test
public void key_and_value_fields()
{
createAndIndexContent( 1, new String[]{"100", "1"}, new String[]{"data.myKey", "data.myValue"} );
createAndIndexContent( 2, new String[]{"101", "2"}, new String[]{"data.myKey", "data.myValue"} );
createAndIndexContent( 3, new String[]{"200", "3"}, new String[]{"data.myKey", "data.myValue"} );
createAndIndexContent( 4, new String[]{"201", "4"}, new String[]{"data.myKey", "data.myValue"} );
createAndIndexContent( 5, new String[]{"300", "5"}, new String[]{"data.myKey", "data.myValue"} );
createAndIndexContent( 6, new String[]{"401", "6"}, new String[]{"data.myKey", "data.myValue"} );
createAndIndexContent( 7, new String[]{"501", "7"}, new String[]{"data.myKey", "data.myValue"} );
createAndIndexContent( 8, new String[]{"1000", "8"}, new String[]{"data.myKey", "data.myValue"} );
flushIndex();
ContentIndexQuery query = new ContentIndexQuery( "" );
final String facetDefinition = "<facets>\n" +
" <histogram name=\"myHistogramFacet\">\n" +
" <index>data.myKey</index>\n" +
" <value-index>data.myValue</value-index>\n" +
" <interval>100</interval>\n" +
" </histogram>\n" +
"</facets>\n";
query.setFacets( facetDefinition );
final ContentResultSet result = contentIndexService.query( query );
final FacetResultSet next = result.getFacetsResultSet().iterator().next();
assertNotNull( next );
assertTrue( next instanceof HistogramFacetResultSet );
HistogramFacetResultSet histogramFacetResultSet = (HistogramFacetResultSet) next;
assertEquals( 6, histogramFacetResultSet.getResultEntries().size() );
String expectedXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<content>\n" +
" <facets>\n" +
" <histogram name=\"myHistogramFacet\">\n" +
" <interval sum=\"3.0\" hits=\"2\" min=\"1.0\" mean=\"1.5\" max=\"2.0\">100</interval>\n" +
" <interval sum=\"7.0\" hits=\"2\" min=\"3.0\" mean=\"3.5\" max=\"4.0\">200</interval>\n" +
" <interval sum=\"5.0\" hits=\"1\" min=\"5.0\" mean=\"5.0\" max=\"5.0\">300</interval>\n" +
" <interval sum=\"6.0\" hits=\"1\" min=\"6.0\" mean=\"6.0\" max=\"6.0\">400</interval>\n" +
" <interval sum=\"7.0\" hits=\"1\" min=\"7.0\" mean=\"7.0\" max=\"7.0\">500</interval>\n" +
" <interval sum=\"8.0\" hits=\"1\" min=\"8.0\" mean=\"8.0\" max=\"8.0\">1000</interval>\n" +
" </histogram>\n" +
" </facets>\n" +
"</content>";
createAndCompareResultAsXml( result, expectedXml );
}
}