Author: catholicon
Date: Sat Oct  7 02:44:55 2017
New Revision: 1811380

URL: http://svn.apache.org/viewvc?rev=1811380&view=rev
Log:
OAK-6750: Lucene facets don't work with relative properties

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
    
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/FacetTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java?rev=1811380&r1=1811379&r2=1811380&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
 Sat Oct  7 02:44:55 2017
@@ -637,7 +637,8 @@ public class SelectorImpl extends Source
             PropertyState s = builder.getPropertyState();
             return PropertyValues.create(s);
         }
-        boolean relative = oakPropertyName.indexOf('/') >= 0;
+        boolean relative = 
!oakPropertyName.startsWith(QueryConstants.REP_FACET + "(")
+                && oakPropertyName.indexOf('/') >= 0;
         Tree t = currentTree();
         if (relative) {
             for (String p : 
PathUtils.elements(PathUtils.getParentPath(oakPropertyName))) {
@@ -672,7 +673,7 @@ public class SelectorImpl extends Source
             result = PropertyValues.newString(local);
         } else if (oakPropertyName.equals(QueryConstants.JCR_SCORE)) {
             result = currentRow.getValue(QueryConstants.JCR_SCORE);
-        } else if (oakPropertyName.equals(QueryConstants.REP_EXCERPT)) {
+        } else if (oakPropertyName.equals(QueryConstants.REP_EXCERPT + "(")) {
             result = currentRow.getValue(QueryConstants.REP_EXCERPT);
         } else if 
(oakPropertyName.equals(QueryConstants.OAK_SCORE_EXPLANATION)) {
             result = currentRow.getValue(QueryConstants.OAK_SCORE_EXPLANATION);
@@ -680,7 +681,7 @@ public class SelectorImpl extends Source
             result = currentRow.getValue(QueryConstants.REP_SPELLCHECK);
         } else if (oakPropertyName.equals(QueryConstants.REP_SUGGEST)) {
             result = currentRow.getValue(QueryConstants.REP_SUGGEST);
-        } else if (oakPropertyName.startsWith(QueryConstants.REP_FACET)) {
+        } else if (oakPropertyName.startsWith(QueryConstants.REP_FACET + "(")) 
{
             result = currentRow.getValue(oakPropertyName);
         } else {
             result = PropertyValues.create(t.getProperty(oakPropertyName));

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=1811380&r1=1811379&r2=1811380&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
 Sat Oct  7 02:44:55 2017
@@ -48,7 +48,12 @@ public class FacetTest extends AbstractQ
     protected void setUp() throws Exception {
         super.setUp();
         if (!superuser.itemExists(FACET_CONFING_PROP_PATH)) {
-            Node node = 
superuser.getNode("/oak:index/luceneGlobal/indexRules/nt:base/properties/allProps");
+            Node props = 
superuser.getNode("/oak:index/luceneGlobal/indexRules/nt:base/properties");
+            Node node = props.addNode("relative");
+            node.setProperty("name", "jc/text");
+            node.setProperty(LuceneIndexConstants.PROP_FACETS, true);
+            node.setProperty(LuceneIndexConstants.PROP_ANALYZED, true);
+            node = props.getNode("allProps");
             node.setProperty(LuceneIndexConstants.PROP_FACETS, true);
             markIndexForReindex();
             superuser.save();
@@ -74,6 +79,12 @@ public class FacetTest extends AbstractQ
             superuser.refresh(true);
         }
 
+        if 
(superuser.nodeExists("/oak:index/luceneGlobal/indexRules/nt:base/properties/relative"))
 {
+            
superuser.removeItem("/oak:index/luceneGlobal/indexRules/nt:base/properties/relative");
+            superuser.save();
+            superuser.refresh(true);
+        }
+
         if (superuser.nodeExists(FACET_CONFING_NODE_PATH)) {
             superuser.getNode(FACET_CONFING_NODE_PATH).remove();
             superuser.save();
@@ -130,6 +141,45 @@ public class FacetTest extends AbstractQ
         assertNotNull(facets);
         assertEquals("hallo", facets.get(0).getLabel());
         assertEquals(1, facets.get(0).getCount(), 0);
+        assertEquals("hello", facets.get(1).getLabel());
+        assertEquals(1, facets.get(1).getCount(), 0);
+        assertEquals("oh hallo", facets.get(2).getLabel());
+        assertEquals(1, facets.get(2).getCount(), 0);
+
+        NodeIterator nodes = result.getNodes();
+        assertTrue(nodes.hasNext());
+        assertNotNull(nodes.nextNode());
+        assertTrue(nodes.hasNext());
+        assertNotNull(nodes.nextNode());
+        assertTrue(nodes.hasNext());
+        assertNotNull(nodes.nextNode());
+        assertFalse(nodes.hasNext());
+    }
+
+    public void testFacetRetrievalRelativeProperty() throws Exception {
+        Session session = superuser;
+        Node n1 = testRootNode.addNode("node1");
+        n1.addNode("jc").setProperty("text", "hello");
+        Node n2 = testRootNode.addNode("node2");
+        n2.addNode("jc").setProperty("text", "hallo");
+        Node n3 = testRootNode.addNode("node3");
+        n3.addNode("jc").setProperty("text", "oh hallo");
+        session.save();
+
+        QueryManager qm = session.getWorkspace().getQueryManager();
+        String sql2 = "select [jcr:path], [rep:facet(jc/text)] from [nt:base] 
" +
+                "where contains([jc/text], 'hello OR 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("jc/text"));
+        List<FacetResult.Facet> facets = facetResult.getFacets("jc/text");
+        assertNotNull(facets);
+        assertEquals("hallo", facets.get(0).getLabel());
+        assertEquals(1, facets.get(0).getCount(), 0);
         assertEquals("hello", facets.get(1).getLabel());
         assertEquals(1, facets.get(1).getCount(), 0);
         assertEquals("oh hallo", facets.get(2).getLabel());


Reply via email to