public boolean indexesRelativeNodes(){ for (IndexingRule r : definedRules) { if (!r.aggregate.getIncludes().isEmpty()) { return true; } } return false; }
private Aggregate combine(Aggregate propAggregate, String nodeTypeName){ Aggregate nodeTypeAgg = IndexDefinition.this.getAggregate(nodeTypeName); List<Aggregate.Include> includes = newArrayList(); includes.addAll(propAggregate.getIncludes()); if (nodeTypeAgg != null){ includes.addAll(nodeTypeAgg.getIncludes()); } return new Aggregate(nodeTypeName, includes); }
public Set<String> getRelativeNodeNames(){ //Can be computed lazily as required only for oak-run indexing for now Set<String> names = new HashSet<>(); for (IndexingRule r : definedRules) { for (Aggregate.Include i : r.aggregate.getIncludes()) { for (int d = 0; d < i.maxDepth(); d++) { if (!i.isPattern(d)) { names.add(i.getElementNameIfNotAPattern(d)); } } } } return names; }
@Test public void aggregateConfig2() throws Exception{ NodeBuilder aggregates = builder.child(FulltextIndexConstants.AGGREGATES); NodeBuilder aggFolder = aggregates.child("nt:folder"); aggFolder.setProperty(FulltextIndexConstants.AGG_RECURSIVE_LIMIT, 42); aggFolder.child("i1").setProperty(FulltextIndexConstants.AGG_PATH, "*"); aggFolder.child("i1").setProperty(FulltextIndexConstants.AGG_PRIMARY_TYPE, "nt:file"); aggFolder.child("i1").setProperty(FulltextIndexConstants.AGG_RELATIVE_NODE, true); IndexDefinition defn = new IndexDefinition(root, builder.getNodeState(), "/foo"); Aggregate agg = defn.getAggregate("nt:folder"); assertNotNull(agg); assertEquals(42, agg.reAggregationLimit); assertEquals(1, agg.getIncludes().size()); assertEquals("nt:file", ((NodeInclude)agg.getIncludes().get(0)).primaryType); assertTrue(((NodeInclude)agg.getIncludes().get(0)).relativeNode); }
@Test public void simpleAggregateConfig() throws Exception{ NodeBuilder aggregates = builder.child(FulltextIndexConstants.AGGREGATES); NodeBuilder aggFolder = aggregates.child("nt:folder"); aggFolder.child("i1").setProperty(FulltextIndexConstants.AGG_PATH, "*"); IndexDefinition defn = new IndexDefinition(root, builder.getNodeState(), "/foo"); Aggregate agg = defn.getAggregate("nt:folder"); assertNotNull(agg); assertEquals(1, agg.getIncludes().size()); }
@Test public void regexAllProps() { IndexDefinitionBuilder builder = new IndexDefinitionBuilder(); builder.indexRule("nt:base").property("p"); builder.indexRule("nt:base").property("all", FulltextIndexConstants.REGEX_ALL_PROPS, true); IndexDefinition def = IndexDefinition.newBuilder(root, builder.build(), "/foo").build(); IndexingRule rule = def.getApplicableIndexingRule(root); assertNotNull(rule); PropertyDefinition pd = rule.getConfig("p"); assertNotNull(pd); assertFalse(pd.isRegexp); assertFalse(pd.relative); assertEquals(0, pd.ancestors.length); pd = rule.getConfig("all"); assertNotNull(pd); assertTrue(pd.isRegexp); assertFalse(pd.relative); assertEquals(0, pd.ancestors.length); assertThat(rule.getAggregate().getIncludes(), is(empty())); assertFalse(rule.getAggregate().hasNodeAggregates()); List<Aggregate.Matcher> matchers = rule.getAggregate() .createMatchers(new TestRoot("/")); assertThat(matchers, is(empty())); assertThat(def.getRelativeNodeNames(), is(empty())); }
@Test public void regexAllProps() { IndexDefinitionBuilder builder = new IndexDefinitionBuilder(); builder.indexRule("nt:base").property("p"); builder.indexRule("nt:base").property("all", FulltextIndexConstants.REGEX_ALL_PROPS, true); IndexDefinition def = IndexDefinition.newBuilder(root, builder.build(), "/foo").build(); IndexingRule rule = def.getApplicableIndexingRule(root); assertNotNull(rule); PropertyDefinition pd = rule.getConfig("p"); assertNotNull(pd); assertFalse(pd.isRegexp); assertFalse(pd.relative); assertEquals(0, pd.ancestors.length); pd = rule.getConfig("all"); assertNotNull(pd); assertTrue(pd.isRegexp); assertFalse(pd.relative); assertEquals(0, pd.ancestors.length); assertThat(rule.getAggregate().getIncludes(), is(empty())); assertFalse(rule.getAggregate().hasNodeAggregates()); List<Aggregate.Matcher> matchers = rule.getAggregate() .createMatchers(new TestRoot("/")); assertThat(matchers, is(empty())); assertThat(def.getRelativeNodeNames(), is(empty())); }
@Test public void nodeTypeIndexed_IgnoreAggregates() throws Exception{ TestUtil.registerNodeType(builder, testNodeTypeDefn); root = builder.getNodeState(); IndexDefinitionBuilder defnb = new IndexDefinitionBuilder(); defnb.nodeTypeIndex(); defnb.indexRule("oak:TestSuperType").sync(); defnb.aggregateRule("oak:TestSuperType").include("*"); IndexDefinition defn = IndexDefinition.newBuilder(root, defnb.build(), "/foo").build(); IndexingRule ruleSuper = getRule(defn, "oak:TestSuperType"); assertNotNull(ruleSuper); assertNull(ruleSuper.getConfig("foo")); assertTrue(ruleSuper.getAggregate().getIncludes().isEmpty()); assertNotNull(ruleSuper.getConfig(JcrConstants.JCR_PRIMARYTYPE)); assertNotNull(ruleSuper.getConfig(JcrConstants.JCR_MIXINTYPES)); }
@Test public void nodeTypeIndexed_IgnoreAggregates() throws Exception{ TestUtil.registerNodeType(builder, testNodeTypeDefn); root = builder.getNodeState(); IndexDefinitionBuilder defnb = new IndexDefinitionBuilder(); defnb.nodeTypeIndex(); defnb.indexRule("oak:TestSuperType").sync(); defnb.aggregateRule("oak:TestSuperType").include("*"); IndexDefinition defn = IndexDefinition.newBuilder(root, defnb.build(), "/foo").build(); IndexingRule ruleSuper = getRule(defn, "oak:TestSuperType"); assertNotNull(ruleSuper); assertNull(ruleSuper.getConfig("foo")); assertTrue(ruleSuper.getAggregate().getIncludes().isEmpty()); assertNotNull(ruleSuper.getConfig(JcrConstants.JCR_PRIMARYTYPE)); assertNotNull(ruleSuper.getConfig(JcrConstants.JCR_MIXINTYPES)); }