You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ca...@apache.org on 2019/01/09 09:44:57 UTC

svn commit: r1850837 - in /jackrabbit/oak/trunk/oak-lucene/src: main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/FacetHelper.java test/java/org/apache/jackrabbit/oak/jcr/query/FacetTest.java

Author: catholicon
Date: Wed Jan  9 09:44:57 2019
New Revision: 1850837

URL: http://svn.apache.org/viewvc?rev=1850837&view=rev
Log:
OAK-7975: Facet extraction fails while requesting multiple facets and one of the requested facets doesn't have indexed values

Modified:
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/FacetHelper.java
    jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/FacetTest.java

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/FacetHelper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/FacetHelper.java?rev=1850837&r1=1850836&r2=1850837&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/FacetHelper.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/FacetHelper.java Wed Jan  9 09:44:57 2019
@@ -28,6 +28,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.spi.query.QueryConstants;
 import org.apache.jackrabbit.oak.spi.query.QueryIndex;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.lucene.facet.FacetResult;
 import org.apache.lucene.facet.Facets;
 import org.apache.lucene.facet.FacetsCollector;
 import org.apache.lucene.facet.FacetsConfig;
@@ -95,7 +96,7 @@ public class FacetHelper {
                 }
             }
             if (facetsMap.size() > 0) {
-                facets = new MultiFacets(facetsMap);
+                facets = new MultiFacets(facetsMap, NULL_FACETS);
             }
 
         }
@@ -105,4 +106,21 @@ public class FacetHelper {
     public static String parseFacetField(String columnName) {
         return columnName.substring(QueryConstants.REP_FACET.length() + 1, columnName.length() - 1);
     }
+
+    private static final Facets NULL_FACETS = new Facets() {
+        @Override
+        public FacetResult getTopChildren(int topN, String dim, String... path) {
+            return null;
+        }
+
+        @Override
+        public Number getSpecificValue(String dim, String... path) {
+            return null;
+        }
+
+        @Override
+        public List<FacetResult> getAllDims(int topN) {
+            return null;
+        }
+    };
 }

Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/FacetTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/FacetTest.java?rev=1850837&r1=1850836&r2=1850837&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/FacetTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/FacetTest.java Wed Jan  9 09:44:57 2019
@@ -615,6 +615,41 @@ public class FacetTest extends AbstractQ
         assertFalse(rows.hasNext());
     }
 
+    // OAK-7975
+    public void testFacetWithNoIndexedValues() throws Exception {
+        Node content = testRootNode.addNode("absentDimFacets");
+
+        content.addNode("bar").setProperty("text", "lorem ipsum");
+
+        superuser.save();
+
+        String query;
+        FacetResult facetResult;
+        List<FacetResult.Facet> facets;
+
+        // test with single facet column which has no indexed value yet
+        query = "select [rep:facet(jc/text)] from [nt:base] where contains(*, 'ipsum')";
+
+        facetResult = new FacetResult(qm.createQuery(query, Query.JCR_SQL2).execute());
+
+        assertNotNull(facetResult);
+        assertTrue(facetResult.getDimensions().isEmpty());
+
+        // test with requesting multiple facet columns - one would get facets other won't
+        query = "select [rep:facet(text)], [rep:facet(jc/text)] from [nt:base] where contains(*, 'ipsum')";
+
+        facetResult = new FacetResult(qm.createQuery(query, Query.JCR_SQL2).execute());
+
+        assertNotNull(facetResult);
+        assertEquals(newHashSet("text"), facetResult.getDimensions());
+
+        facets = facetResult.getFacets("text");
+        assertEquals(1, facets.size());
+
+        assertEquals("lorem ipsum", facets.get(0).getLabel());
+        assertEquals(1, facets.get(0).getCount());
+    }
+
     public void testNoFacetsIfNoAccess() throws Exception {
         deny(testRootNode.addNode("test1")).setProperty("jcr:title", "test1");
         deny(testRootNode.addNode("test2")).addNode("child").setProperty("jcr:title", "test2");