Author: alexparvulescu Date: Fri Sep 6 08:37:14 2013 New Revision: 1520512
URL: http://svn.apache.org/r1520512 Log: OAK-828 Full-text support for index aggregates - included the case where a constraint on a child node's property should not return the aggregated parent Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAggregationTest.java Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java?rev=1520512&r1=1520511&r2=1520512&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java (original) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java Fri Sep 6 08:37:14 2013 @@ -187,9 +187,18 @@ public class FullTextSearchImpl extends // and because we might not implement all features // such as index aggregation if (selector.index instanceof FulltextQueryIndex) { + // first verify if a property level condition exists and if that + // condition checks out, this takes out some extra rows from the index + // aggregation bits + if (relativePath == null && propertyName != null) { + PropertyValue p = selector.currentProperty(propertyName); + if (p == null) { + return false; + } + } return true; } - + StringBuilder buff = new StringBuilder(); if (relativePath == null && propertyName != null) { PropertyValue p = selector.currentProperty(propertyName); Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAggregationTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAggregationTest.java?rev=1520512&r1=1520511&r2=1520512&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAggregationTest.java (original) +++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAggregationTest.java Fri Sep 6 08:37:14 2013 @@ -246,11 +246,36 @@ public class LuceneIndexAggregationTest root.commit(); - String matchContentSimple = "//*[(jcr:contains(., 'dog')) and @jcr:primaryType = 'nt:file']"; + String matchContentSimple = "//*[( jcr:contains(., 'dog') and @jcr:primaryType = 'nt:file' )]"; assertQuery(matchContentSimple, "xpath", ImmutableList.of("/myFolder/myFile")); - String matchContentDouble = "//*[(jcr:contains(., 'dog')) and (@jcr:primaryType = 'nt:file' or @jcr:primaryType = 'nt:folder')]"; + String matchContentDouble = "//*[( jcr:contains(., 'dog') and (@jcr:primaryType = 'nt:file' or @jcr:primaryType = 'nt:folder') )]"; assertQuery(matchContentDouble, "xpath", ImmutableList.of("/myFolder", "/myFolder/myFile")); } + @Test + public void testChildNodeProperty() throws Exception { + Tree file = root.getTree("/").addChild("myFile"); + file.setProperty(JCR_PRIMARYTYPE, NT_FILE, Type.NAME); + Tree resource = file.addChild(JCR_CONTENT); + resource.setProperty(JCR_PRIMARYTYPE, "nt:resource", Type.NAME); + resource.setProperty("jcr:lastModified", Calendar.getInstance()); + resource.setProperty("jcr:encoding", "UTF-8"); + resource.setProperty("jcr:mimeType", "text/plain"); + resource.setProperty(binaryProperty(JCR_DATA, + "the quick brown fox jumps over the lazy dog.")); + + resource.setProperty("jcr:title", "title"); + resource.setProperty("jcr:description", "description"); + + root.commit(); + + String matchChildSimple = "//*[( jcr:contains(@jcr:title, 'title') )]"; + assertQuery(matchChildSimple, "xpath", ImmutableList.of("/myFile/jcr:content")); + + String matchChildWithStar = "//*[( jcr:contains(., 'dog') and jcr:contains(@jcr:title, 'title') )]"; + assertQuery(matchChildWithStar, "xpath", ImmutableList.of("/myFile/jcr:content")); + + } + }
