Author: tommaso
Date: Mon Feb  6 15:19:25 2017
New Revision: 1781917

URL: http://svn.apache.org/viewvc?rev=1781917&view=rev
Log:
OAK-4922 - Implement number of facets retrieved in query configurable for 
LucenePropertyIndex

Modified:
    jackrabbit/oak/branches/1.4/   (props changed)
    jackrabbit/oak/branches/1.4/oak-doc/src/site/markdown/query/lucene.md
    
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
    
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java
    
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
    
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/FacetHelper.java
    
jackrabbit/oak/branches/1.4/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/FacetTest.java

Propchange: jackrabbit/oak/branches/1.4/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Feb  6 15:19:25 2017
@@ -1,3 +1,3 @@
 /jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1733615,1733875,1733913,1733929,1734230,1734254,1734279,1734941,1735052,1735081,1735109,1735141,1735267,1735405,1735484,1735549,1735564,1735588,1735622,1735638,1735919,1735983,1736176,1737309-1737310,1737334,1737349,1737998,1738004,1738136,1738138,1738207,1738234,1738252,1738775,1738795,1738833,1738950,1738957,1738963,1739712,1739760,1739867,1739894,1739959-1739960,1740114,1740116,1740250,1740333,1740349,1740360,1740625-1740626,1740774,1740837,1740879,1740971,1741016,1741032,1741339,1741343,1742077,1742117,1742125,1742363,1742520,1742888,1742916,1743097,1743172,1743343,1743674,1744265,1744292,1744589,1744670,1744672,1744959,1745038,1745127,1745197,1745336,1745368,1746086,1746117,1746342,1746345,1746408,1746696,1746981,1747198,1747200,1747341-1747342,1747380,1747387,1747406,1747492,1747512,1747654,1748505,1748553,1748722,1748870,1749275,1749350,1749424,1749443,1749464,1749475,1749645,1749662,1749815,1749872,1749875,1749899,1750052,1750076-1750077,1750287,1750457
 
,1750462,1750465,1750495,1750626,1750809,1750886-1750887,1751396,1751410,1751419,1751445-1751446,1751478,1751748,1751753,1751755,1751871,1752198,1752202,1752259,1752273-1752274,1752283,1752292,1752438,1752447-1752448,1752508,1752596,1752616,1752659,1752672,1753262,1753331-1753332,1753335-1753336,1753355,1753444,1754117,1754239,1755157,1755191,1756520,1756580,1757119,1757166,1758213,1758713,1759433,1759795,1759826,1760326,1760340,1760373,1760387,1760486,1760492,1760494,1760661-1760662,1761412,1761444,1761571,1761762,1761787,1761876,1762453,1762612,1762632,1762635,1763347,1763355-1763356,1763378,1763465,1763735,1764678,1764705,1764814,1764898,1765817,1765983,1766071,1766423,1766496,1766519,1766554,1766644,1767025,1767265,1767704,1768446,1768637,1769078,1770694,1770982,1771022,1771093,1771098,1771739,1771852,1771870,1771902,1772155,1772228,1772593,1772768,1773190,1774497,1775474,1775622,1775628,1775757,1778423,1778968,1779478,1780388,1780538,1780543,1781068,1781075,1781386,1781846,1781
 907
+/jackrabbit/oak/trunk:1733615,1733875,1733913,1733929,1734230,1734254,1734279,1734941,1735052,1735081,1735109,1735141,1735267,1735405,1735484,1735549,1735564,1735588,1735622,1735638,1735919,1735983,1736176,1737309-1737310,1737334,1737349,1737998,1738004,1738136,1738138,1738207,1738234,1738252,1738775,1738795,1738833,1738950,1738957,1738963,1739712,1739760,1739867,1739894,1739959-1739960,1740114,1740116,1740250,1740333,1740349,1740360,1740625-1740626,1740774,1740837,1740879,1740971,1741016,1741032,1741339,1741343,1742077,1742117,1742125,1742363,1742520,1742888,1742916,1743097,1743172,1743343,1743674,1744265,1744292,1744589,1744670,1744672,1744959,1745038,1745127,1745197,1745336,1745368,1746086,1746117,1746342,1746345,1746408,1746696,1746981,1747198,1747200,1747341-1747342,1747380,1747387,1747406,1747492,1747512,1747654,1748505,1748553,1748722,1748870,1749275,1749350,1749424,1749443,1749464,1749475,1749645,1749662,1749815,1749872,1749875,1749899,1750052,1750076-1750077,1750287,1750457
 
,1750462,1750465,1750495,1750626,1750809,1750886-1750887,1751396,1751410,1751419,1751445-1751446,1751478,1751748,1751753,1751755,1751871,1752198,1752202,1752259,1752273-1752274,1752283,1752292,1752438,1752447-1752448,1752508,1752596,1752616,1752659,1752672,1753262,1753331-1753332,1753335-1753336,1753355,1753444,1754117,1754239,1755157,1755191,1756520,1756580,1757119,1757166,1758213,1758713,1759433,1759795,1759826,1760326,1760340,1760373,1760387,1760486,1760492,1760494,1760661-1760662,1761412,1761444,1761571,1761762,1761787,1761876,1762453,1762612,1762632,1762635,1763347,1763355-1763356,1763378,1763465,1763735,1764678,1764705,1764814,1764898,1765817,1765983,1766071,1766423,1766496,1766519,1766554,1766644,1767025,1767265,1767704,1768446,1768637,1769078,1770694,1770982,1771022,1771093,1771098,1771739,1771852,1771870,1771902,1772155,1772162,1772228,1772593,1772768,1773190,1774497,1775474,1775622,1775628,1775757,1778423,1778968,1779478,1780388,1780538,1780543,1781068,1781075,1781386,1781
 846,1781907
 /jackrabbit/trunk:1345480

Modified: jackrabbit/oak/branches/1.4/oak-doc/src/site/markdown/query/lucene.md
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-doc/src/site/markdown/query/lucene.md?rev=1781917&r1=1781916&r2=1781917&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.4/oak-doc/src/site/markdown/query/lucene.md 
(original)
+++ jackrabbit/oak/branches/1.4/oak-doc/src/site/markdown/query/lucene.md Mon 
Feb  6 15:19:25 2017
@@ -1131,18 +1131,27 @@ Specific facet related features for Luce
  index definition.
  By default ACL checks are always performed on facets by the Lucene property 
index however this can be avoided by setting
  the property _secure_ to _false_ in the _facets_ configuration node.
+`@since Oak 1.5.15` The no. of facets to be retrieved is configurable via the 
_topChildren_ property, which defaults to 10.
+
 ```
+/oak:index/lucene-with-unsecure-facets
+  - jcr:primaryType = "oak:QueryIndexDefinition"
+  - compatVersion = 2
+  - type = "lucene"
+  - async = "async"
+  + facets
+    - topChildren = 100
+    - secure = false
+  + indexRules
+    - jcr:primaryType = "nt:unstructured"
     + nt:base
       + properties
         - jcr:primaryType = "nt:unstructured"
         + jcr:title
           - facets = true
           - propertyIndex = true
-          + facets
-            - secure = false
 ```
 
-
 #### Score Explanation
 
 `@since Oak 1.3.12`

Modified: 
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java?rev=1781917&r1=1781916&r2=1781917&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
 (original)
+++ 
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
 Mon Feb  6 15:19:25 2017
@@ -133,11 +133,16 @@ class IndexDefinition implements Aggrega
     static final int TYPES_ALLOW_ALL = -1;
 
     /**
-     * Deafult suggesterUpdateFrequencyMinutes
+     * Default suggesterUpdateFrequencyMinutes
      */
     static final int DEFAULT_SUGGESTER_UPDATE_FREQUENCY_MINUTES = 10;
 
     /**
+     * Default no. of facets retrieved
+     */
+    static final int DEFAULT_FACET_COUNT = 10;
+
+    /**
      * native sort order
      */
     static final OrderEntry NATIVE_SORT_ORDER = new OrderEntry(JCR_SCORE, 
Type.UNDEFINED,
@@ -215,6 +220,8 @@ class IndexDefinition implements Aggrega
 
     private final boolean secureFacets;
 
+    private final int numberOfTopFacets;
+
     private final boolean suggestEnabled;
 
     private final boolean spellcheckEnabled;
@@ -286,7 +293,16 @@ class IndexDefinition implements Aggrega
         this.queryPaths = getQueryPaths(defn);
         this.saveDirListing = getOptionalValue(defn, 
LuceneIndexConstants.SAVE_DIR_LISTING, true);
         this.suggestAnalyzed = evaluateSuggestAnalyzed(defn, false);
-        this.secureFacets = defn.hasChildNode(FACETS) && 
getOptionalValue(defn.getChildNode(FACETS), PROP_SECURE_FACETS, true);
+
+        if (defn.hasChildNode(FACETS)) {
+            NodeState facetsConfig =  defn.getChildNode(FACETS);
+            this.secureFacets = getOptionalValue(facetsConfig, 
PROP_SECURE_FACETS, true);
+            this.numberOfTopFacets = getOptionalValue(facetsConfig, 
PROP_FACETS_TOP_CHILDREN, DEFAULT_FACET_COUNT);
+        } else {
+            this.secureFacets = true;
+            this.numberOfTopFacets = DEFAULT_FACET_COUNT;
+        }
+
         this.suggestEnabled = evaluateSuggestionEnabled();
         this.spellcheckEnabled = evaluateSpellcheckEnabled();
     }
@@ -686,6 +702,10 @@ class IndexDefinition implements Aggrega
         return secureFacets;
     }
 
+    public int getNumberOfTopFacets() {
+        return numberOfTopFacets;
+    }
+
     public class IndexingRule {
         private final String baseNodeType;
         private final String nodeTypeName;

Modified: 
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java?rev=1781917&r1=1781916&r2=1781917&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java
 (original)
+++ 
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java
 Mon Feb  6 15:19:25 2017
@@ -326,6 +326,13 @@ public interface LuceneIndexConstants {
     String PROP_SECURE_FACETS = "secure";
 
     /**
+     * Optional (index definition) property indicating max number of facets 
that will be retrieved
+     * in query
+     * Default is {@link IndexDefinition#DEFAULT_FACET_COUNT}
+     */
+    String PROP_FACETS_TOP_CHILDREN = "topChildren";
+
+    /**
      * Optional (property definition) property indicating whether facets 
should be created
      * for this property
      */

Modified: 
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java?rev=1781917&r1=1781916&r2=1781917&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
 (original)
+++ 
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
 Mon Feb  6 15:19:25 2017
@@ -1528,6 +1528,7 @@ public class LucenePropertyIndex impleme
         LuceneResultRow currentRow;
         private final SizeEstimator sizeEstimator;
         private long estimatedSize;
+        private int numberOfFacets;
 
         LucenePathCursor(final Iterator<LuceneResultRow> it, final IndexPlan 
plan, QueryEngineSettings settings, SizeEstimator sizeEstimator) {
             pathPrefix = plan.getPathPrefix();
@@ -1551,7 +1552,10 @@ public class LucenePropertyIndex impleme
                 }
 
             };
-            pathCursor = new PathCursor(pathIterator, 
getPlanResult(plan).isUniquePathsRequired(), settings);
+
+            PlanResult planResult = getPlanResult(plan);
+            pathCursor = new PathCursor(pathIterator, 
planResult.isUniquePathsRequired(), settings);
+            numberOfFacets = planResult.indexDefinition.getNumberOfTopFacets();
         }
 
 
@@ -1607,7 +1611,7 @@ public class LucenePropertyIndex impleme
                         Facets facets = currentRow.facets;
                         try {
                             if (facets != null) {
-                                FacetResult topChildren = 
facets.getTopChildren(10, facetFieldName);
+                                FacetResult topChildren = 
facets.getTopChildren(numberOfFacets, facetFieldName);
                                 if (topChildren != null) {
                                     JsopWriter writer = new JsopBuilder();
                                     writer.object();

Modified: 
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/FacetHelper.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/FacetHelper.java?rev=1781917&r1=1781916&r2=1781917&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/FacetHelper.java
 (original)
+++ 
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/FacetHelper.java
 Mon Feb  6 15:19:25 2017
@@ -47,7 +47,7 @@ public class FacetHelper {
     private static final Logger LOGGER = 
LoggerFactory.getLogger(FacetHelper.class);
 
     /**
-     * IndexPaln Attribute name which refers to the name of the fields that 
should used for facets.
+     * IndexPaln Attribute name which refers to the name of the fields that 
should be used for facets.
      */
     public static final String ATTR_FACET_FIELDS = "oak.facet.fields";
 

Modified: 
jackrabbit/oak/branches/1.4/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/FacetTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/FacetTest.java?rev=1781917&r1=1781916&r2=1781917&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.4/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/FacetTest.java
 (original)
+++ 
jackrabbit/oak/branches/1.4/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/FacetTest.java
 Mon Feb  6 15:19:25 2017
@@ -20,6 +20,7 @@ package org.apache.jackrabbit.oak.jcr.qu
 
 import javax.jcr.Node;
 import javax.jcr.NodeIterator;
+import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.query.Query;
 import javax.jcr.query.QueryManager;
@@ -38,6 +39,8 @@ import org.junit.Before;
 public class FacetTest extends AbstractQueryTest {
 
     public static final String FACET_CONFING_PROP_PATH = 
"/oak:index/luceneGlobal/indexRules/nt:base/properties/allProps/facets";
+    public static final String FACET_CONFING_NODE_PATH = 
"/oak:index/luceneGlobal/facets";
+    public static final String INDEX_CONFING_NODE_PATH = 
"/oak:index/luceneGlobal";
 
     @Before
     protected void setUp() throws Exception {
@@ -48,6 +51,13 @@ public class FacetTest extends AbstractQ
             superuser.save();
             superuser.refresh(true);
         }
+
+        if (!superuser.nodeExists(FACET_CONFING_NODE_PATH)) {
+            Node node = superuser.getNode(INDEX_CONFING_NODE_PATH);
+            node.addNode(LuceneIndexConstants.FACETS);
+            superuser.save();
+            superuser.refresh(true);
+        }
     }
 
     @After
@@ -59,6 +69,13 @@ public class FacetTest extends AbstractQ
             superuser.save();
             superuser.refresh(true);
         }
+
+        if (superuser.nodeExists(FACET_CONFING_NODE_PATH)) {
+            superuser.getNode(FACET_CONFING_NODE_PATH).remove();
+            superuser.save();
+            superuser.refresh(true);
+        }
+
         super.tearDown();
     }
 
@@ -301,4 +318,147 @@ public class FacetTest extends AbstractQ
         assertFalse(nodes.hasNext());
     }
 
+    public void testFacetRetrievalDefaultNumberOfFacets() throws 
RepositoryException {
+        Session session = superuser;
+        Node n1 = testRootNode.addNode("node1");
+        String pn = "jcr:title";
+        n1.setProperty(pn, "hello 1");
+        Node n2 = testRootNode.addNode("node2");
+        n2.setProperty(pn, "hallo 2");
+        Node n3 = testRootNode.addNode("node3");
+        n3.setProperty(pn, "hallo 3");
+        Node n4 = testRootNode.addNode("node4");
+        n4.setProperty(pn, "hallo 4");
+        Node n5 = testRootNode.addNode("node5");
+        n5.setProperty(pn, "hallo 5");
+        Node n6 = testRootNode.addNode("node6");
+        n6.setProperty(pn, "hallo 6");
+        Node n7 = testRootNode.addNode("node7");
+        n7.setProperty(pn, "hallo 7");
+        Node n8 = testRootNode.addNode("node8");
+        n8.setProperty(pn, "hallo 8");
+        Node n9 = testRootNode.addNode("node9");
+        n9.setProperty(pn, "hallo 9");
+        Node n10 = testRootNode.addNode("node10");
+        n10.setProperty(pn, "hallo 10");
+        Node n11 = testRootNode.addNode("node11");
+        n11.setProperty(pn, "hallo 11");
+        Node n12 = testRootNode.addNode("node12");
+        n12.setProperty(pn, "hallo 12");
+        session.save();
+
+        QueryManager qm = session.getWorkspace().getQueryManager();
+        String sql2 = "select [jcr:path], [rep:facet(" + pn + ")] from 
[nt:base] " +
+            "where contains([" + pn + "], 'hallo') order by [jcr:path]";
+        Query q = qm.createQuery(sql2, Query.JCR_SQL2);
+        QueryResult result = q.execute();
+        FacetResult facetResult = new FacetResult(result);
+        assertNotNull(facetResult);
+        assertNotNull(facetResult.getDimensions());
+        assertEquals(1, facetResult.getDimensions().size());
+        assertTrue(facetResult.getDimensions().contains(pn));
+        List<FacetResult.Facet> facets = facetResult.getFacets(pn);
+        assertNotNull(facets);
+        assertEquals(10, facets.size());
+    }
+
+    public void testFacetRetrievalNumberOfFacetsConfiguredHigherThanDefault() 
throws RepositoryException {
+
+        Node facetsConfig = superuser.getNode(FACET_CONFING_NODE_PATH);
+        
facetsConfig.setProperty(LuceneIndexConstants.PROP_FACETS_TOP_CHILDREN, 11);
+        superuser.save();
+        superuser.refresh(true);
+
+        Session session = superuser;
+        Node n1 = testRootNode.addNode("node1");
+        String pn = "jcr:title";
+        n1.setProperty(pn, "hello 1");
+        Node n2 = testRootNode.addNode("node2");
+        n2.setProperty(pn, "hallo 2");
+        Node n3 = testRootNode.addNode("node3");
+        n3.setProperty(pn, "hallo 3");
+        Node n4 = testRootNode.addNode("node4");
+        n4.setProperty(pn, "hallo 4");
+        Node n5 = testRootNode.addNode("node5");
+        n5.setProperty(pn, "hallo 5");
+        Node n6 = testRootNode.addNode("node6");
+        n6.setProperty(pn, "hallo 6");
+        Node n7 = testRootNode.addNode("node7");
+        n7.setProperty(pn, "hallo 7");
+        Node n8 = testRootNode.addNode("node8");
+        n8.setProperty(pn, "hallo 8");
+        Node n9 = testRootNode.addNode("node9");
+        n9.setProperty(pn, "hallo 9");
+        Node n10 = testRootNode.addNode("node10");
+        n10.setProperty(pn, "hallo 10");
+        Node n11 = testRootNode.addNode("node11");
+        n11.setProperty(pn, "hallo 11");
+        Node n12 = testRootNode.addNode("node12");
+        n12.setProperty(pn, "hallo 12");
+        session.save();
+
+        QueryManager qm = session.getWorkspace().getQueryManager();
+        String sql2 = "select [jcr:path], [rep:facet(" + pn + ")] from 
[nt:base] " +
+            "where contains([" + pn + "], 'hallo') order by [jcr:path]";
+        Query q = qm.createQuery(sql2, Query.JCR_SQL2);
+        QueryResult result = q.execute();
+        FacetResult facetResult = new FacetResult(result);
+        assertNotNull(facetResult);
+        assertNotNull(facetResult.getDimensions());
+        assertEquals(1, facetResult.getDimensions().size());
+        assertTrue(facetResult.getDimensions().contains(pn));
+        List<FacetResult.Facet> facets = facetResult.getFacets(pn);
+        assertNotNull(facets);
+        assertEquals(11, facets.size());
+    }
+
+    public void testFacetRetrievalNumberOfFacetsConfiguredLowerThanDefault() 
throws RepositoryException {
+
+        Node facetsConfig = superuser.getNode(FACET_CONFING_NODE_PATH);
+        
facetsConfig.setProperty(LuceneIndexConstants.PROP_FACETS_TOP_CHILDREN, 7);
+        superuser.save();
+        superuser.refresh(true);
+
+        Session session = superuser;
+        Node n1 = testRootNode.addNode("node1");
+        String pn = "jcr:title";
+        n1.setProperty(pn, "hello 1");
+        Node n2 = testRootNode.addNode("node2");
+        n2.setProperty(pn, "hallo 2");
+        Node n3 = testRootNode.addNode("node3");
+        n3.setProperty(pn, "hallo 3");
+        Node n4 = testRootNode.addNode("node4");
+        n4.setProperty(pn, "hallo 4");
+        Node n5 = testRootNode.addNode("node5");
+        n5.setProperty(pn, "hallo 5");
+        Node n6 = testRootNode.addNode("node6");
+        n6.setProperty(pn, "hallo 6");
+        Node n7 = testRootNode.addNode("node7");
+        n7.setProperty(pn, "hallo 7");
+        Node n8 = testRootNode.addNode("node8");
+        n8.setProperty(pn, "hallo 8");
+        Node n9 = testRootNode.addNode("node9");
+        n9.setProperty(pn, "hallo 9");
+        Node n10 = testRootNode.addNode("node10");
+        n10.setProperty(pn, "hallo 10");
+        Node n11 = testRootNode.addNode("node11");
+        n11.setProperty(pn, "hallo 11");
+        Node n12 = testRootNode.addNode("node12");
+        n12.setProperty(pn, "hallo 12");
+        session.save();
+
+        QueryManager qm = session.getWorkspace().getQueryManager();
+        String sql2 = "select [jcr:path], [rep:facet(" + pn + ")] from 
[nt:base] " +
+            "where contains([" + pn + "], 'hallo') order by [jcr:path]";
+        Query q = qm.createQuery(sql2, Query.JCR_SQL2);
+        QueryResult result = q.execute();
+        FacetResult facetResult = new FacetResult(result);
+        assertNotNull(facetResult);
+        assertNotNull(facetResult.getDimensions());
+        assertEquals(1, facetResult.getDimensions().size());
+        assertTrue(facetResult.getDimensions().contains(pn));
+        List<FacetResult.Facet> facets = facetResult.getFacets(pn);
+        assertNotNull(facets);
+        assertEquals(7, facets.size());
+    }
 }
\ No newline at end of file


Reply via email to