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");