if(!indexingRule.indexesAllNodesOfMatchingType() && !dirty){ return null;
@Test public void nodeTypeIndexed() throws Exception{ TestUtil.registerNodeType(builder, testNodeTypeDefn); root = builder.getNodeState(); IndexDefinitionBuilder defnb = new IndexDefinitionBuilder(); defnb.nodeTypeIndex(); defnb.indexRule("oak:TestSuperType"); IndexDefinition defn = IndexDefinition.newBuilder(root, defnb.build(), "/foo").build(); assertFalse(defn.hasSyncPropertyDefinitions()); IndexingRule ruleSuper = getRule(defn, "oak:TestSuperType"); assertNotNull(ruleSuper); assertTrue(defn.isPureNodeTypeIndex()); assertTrue(ruleSuper.getConfig(JcrConstants.JCR_PRIMARYTYPE).propertyIndex); assertTrue(ruleSuper.getConfig(JcrConstants.JCR_MIXINTYPES).propertyIndex); assertTrue(ruleSuper.indexesAllNodesOfMatchingType()); assertNotNull(getRule(defn, "oak:TestTypeA")); assertTrue(getRule(defn, "oak:TestTypeA").indexesAllNodesOfMatchingType()); assertNotNull(getRule(defn, "oak:TestTypeB")); assertNull(getRule(defn, "oak:TestMixA")); }
@Test public void nodeTypeIndexed() throws Exception{ TestUtil.registerNodeType(builder, testNodeTypeDefn); root = builder.getNodeState(); IndexDefinitionBuilder defnb = new IndexDefinitionBuilder(); defnb.nodeTypeIndex(); defnb.indexRule("oak:TestSuperType"); IndexDefinition defn = IndexDefinition.newBuilder(root, defnb.build(), "/foo").build(); assertFalse(defn.hasSyncPropertyDefinitions()); IndexingRule ruleSuper = getRule(defn, "oak:TestSuperType"); assertNotNull(ruleSuper); assertTrue(defn.isPureNodeTypeIndex()); assertTrue(ruleSuper.getConfig(JcrConstants.JCR_PRIMARYTYPE).propertyIndex); assertTrue(ruleSuper.getConfig(JcrConstants.JCR_MIXINTYPES).propertyIndex); assertTrue(ruleSuper.indexesAllNodesOfMatchingType()); assertNotNull(getRule(defn, "oak:TestTypeA")); assertTrue(getRule(defn, "oak:TestTypeA").indexesAllNodesOfMatchingType()); assertNotNull(getRule(defn, "oak:TestTypeB")); assertNull(getRule(defn, "oak:TestMixA")); }
@Test public void nodeFullTextIndexed_Regex() throws Exception { NodeBuilder rules = builder.child(INDEX_RULES); rules.child("nt:folder"); TestUtil.child(rules, "nt:folder/properties/prop1") .setProperty(PROP_NAME, ".*") .setProperty(FulltextIndexConstants.PROP_ANALYZED, true) .setProperty(FulltextIndexConstants.PROP_IS_REGEX, true); IndexDefinition defn = new IndexDefinition(root, builder.getNodeState(), "/foo"); IndexingRule rule = defn.getApplicableIndexingRule(asState(newNode("nt:folder"))); assertNotNull(rule); assertFalse(rule.isNodeFullTextIndexed()); TestUtil.child(rules, "nt:folder/properties/prop1") .setProperty(FulltextIndexConstants.PROP_NODE_SCOPE_INDEX, true); defn = new IndexDefinition(root, builder.getNodeState(), "/foo"); rule = defn.getApplicableIndexingRule(asState(newNode("nt:folder"))); assertTrue(rule.isNodeFullTextIndexed()); assertTrue(rule.indexesAllNodesOfMatchingType()); }
@Test public void nodeTypeIndexedSync() throws Exception{ TestUtil.registerNodeType(builder, testNodeTypeDefn); root = builder.getNodeState(); IndexDefinitionBuilder defnb = new IndexDefinitionBuilder(); defnb.nodeTypeIndex(); defnb.indexRule("oak:TestSuperType").sync(); IndexDefinition defn = IndexDefinition.newBuilder(root, defnb.build(), "/foo").build(); assertTrue(defn.hasSyncPropertyDefinitions()); IndexingRule ruleSuper = getRule(defn, "oak:TestSuperType"); assertNotNull(ruleSuper); assertTrue(defn.isPureNodeTypeIndex()); assertTrue(ruleSuper.getConfig(JcrConstants.JCR_PRIMARYTYPE).propertyIndex); assertTrue(ruleSuper.getConfig(JcrConstants.JCR_PRIMARYTYPE).sync); assertTrue(ruleSuper.getConfig(JcrConstants.JCR_MIXINTYPES).propertyIndex); assertTrue(ruleSuper.getConfig(JcrConstants.JCR_MIXINTYPES).sync); assertTrue(ruleSuper.indexesAllNodesOfMatchingType()); }
@Test public void nodeTypeIndexedSync() throws Exception{ TestUtil.registerNodeType(builder, testNodeTypeDefn); root = builder.getNodeState(); IndexDefinitionBuilder defnb = new IndexDefinitionBuilder(); defnb.nodeTypeIndex(); defnb.indexRule("oak:TestSuperType").sync(); IndexDefinition defn = IndexDefinition.newBuilder(root, defnb.build(), "/foo").build(); assertTrue(defn.hasSyncPropertyDefinitions()); IndexingRule ruleSuper = getRule(defn, "oak:TestSuperType"); assertNotNull(ruleSuper); assertTrue(defn.isPureNodeTypeIndex()); assertTrue(ruleSuper.getConfig(JcrConstants.JCR_PRIMARYTYPE).propertyIndex); assertTrue(ruleSuper.getConfig(JcrConstants.JCR_PRIMARYTYPE).sync); assertTrue(ruleSuper.getConfig(JcrConstants.JCR_MIXINTYPES).propertyIndex); assertTrue(ruleSuper.getConfig(JcrConstants.JCR_MIXINTYPES).sync); assertTrue(ruleSuper.indexesAllNodesOfMatchingType()); }
@Test public void nodeFullTextIndexed_Simple() throws Exception { NodeBuilder rules = builder.child(INDEX_RULES); rules.child("nt:folder"); TestUtil.child(rules, "nt:folder/properties/prop1") .setProperty(PROP_NAME, "foo") .setProperty(FulltextIndexConstants.PROP_ANALYZED, true); LuceneIndexDefinition defn = new LuceneIndexDefinition(root, builder.getNodeState(), "/foo"); IndexingRule rule = defn.getApplicableIndexingRule(asState(newNode("nt:folder"))); assertNotNull(rule); assertFalse(rule.isNodeFullTextIndexed()); TestUtil.child(rules, "nt:folder/properties/prop1") .setProperty(FulltextIndexConstants.PROP_NODE_SCOPE_INDEX, true); defn = new LuceneIndexDefinition(root, builder.getNodeState(), "/foo"); rule = defn.getApplicableIndexingRule(asState(newNode("nt:folder"))); assertTrue(rule.isNodeFullTextIndexed()); assertTrue(rule.indexesAllNodesOfMatchingType()); }
@Test public void nodeFullTextIndexed_Simple() throws Exception { NodeBuilder rules = builder.child(INDEX_RULES); rules.child("nt:folder"); TestUtil.child(rules, "nt:folder/properties/prop1") .setProperty(PROP_NAME, "foo") .setProperty(FulltextIndexConstants.PROP_ANALYZED, true); IndexDefinition defn = new IndexDefinition(root, builder.getNodeState(), "/foo"); IndexingRule rule = defn.getApplicableIndexingRule(asState(newNode("nt:folder"))); assertNotNull(rule); assertFalse(rule.isNodeFullTextIndexed()); TestUtil.child(rules, "nt:folder/properties/prop1") .setProperty(FulltextIndexConstants.PROP_NODE_SCOPE_INDEX, true); defn = new IndexDefinition(root, builder.getNodeState(), "/foo"); rule = defn.getApplicableIndexingRule(asState(newNode("nt:folder"))); assertTrue(rule.isNodeFullTextIndexed()); assertTrue(rule.indexesAllNodesOfMatchingType()); }
@Test public void nodeFullTextIndexed_Regex() throws Exception { NodeBuilder rules = builder.child(INDEX_RULES); rules.child("nt:folder"); TestUtil.child(rules, "nt:folder/properties/prop1") .setProperty(PROP_NAME, ".*") .setProperty(FulltextIndexConstants.PROP_ANALYZED, true) .setProperty(FulltextIndexConstants.PROP_IS_REGEX, true); LuceneIndexDefinition defn = new LuceneIndexDefinition(root, builder.getNodeState(), "/foo"); IndexingRule rule = defn.getApplicableIndexingRule(asState(newNode("nt:folder"))); assertNotNull(rule); assertFalse(rule.isNodeFullTextIndexed()); TestUtil.child(rules, "nt:folder/properties/prop1") .setProperty(FulltextIndexConstants.PROP_NODE_SCOPE_INDEX, true); defn = new LuceneIndexDefinition(root, builder.getNodeState(), "/foo"); rule = defn.getApplicableIndexingRule(asState(newNode("nt:folder"))); assertTrue(rule.isNodeFullTextIndexed()); assertTrue(rule.indexesAllNodesOfMatchingType()); }
@Test public void nodeTypeIndex_mixin() throws Exception{ TestUtil.registerNodeType(builder, testNodeTypeDefn); root = builder.getNodeState(); IndexDefinitionBuilder defnb = new IndexDefinitionBuilder(); defnb.nodeTypeIndex(); defnb.indexRule("oak:TestMixA"); IndexDefinition defn = IndexDefinition.newBuilder(root, defnb.build(), "/foo").build(); assertFalse(defn.hasSyncPropertyDefinitions()); assertNotNull(getRule(defn, "oak:TestTypeB")); assertTrue(getRule(defn, "oak:TestTypeB").indexesAllNodesOfMatchingType()); assertNotNull(getRule(defn, "oak:TestMixA")); assertTrue(getRule(defn, "oak:TestMixA").indexesAllNodesOfMatchingType()); assertNull(getRule(defn, "oak:TestTypeA")); assertNull(getRule(defn, "oak:TestSuperType")); }
@Test public void nodeTypeIndex_mixin() throws Exception{ TestUtil.registerNodeType(builder, testNodeTypeDefn); root = builder.getNodeState(); IndexDefinitionBuilder defnb = new IndexDefinitionBuilder(); defnb.nodeTypeIndex(); defnb.indexRule("oak:TestMixA"); IndexDefinition defn = IndexDefinition.newBuilder(root, defnb.build(), "/foo").build(); assertFalse(defn.hasSyncPropertyDefinitions()); assertNotNull(getRule(defn, "oak:TestTypeB")); assertTrue(getRule(defn, "oak:TestTypeB").indexesAllNodesOfMatchingType()); assertNotNull(getRule(defn, "oak:TestMixA")); assertTrue(getRule(defn, "oak:TestMixA").indexesAllNodesOfMatchingType()); assertNull(getRule(defn, "oak:TestTypeA")); assertNull(getRule(defn, "oak:TestSuperType")); }
@Test public void nodeFullTextIndexed_Aggregates() throws Exception { NodeBuilder rules = builder.child(INDEX_RULES); rules.child("nt:folder"); TestUtil.child(rules, "nt:folder/properties/prop1") .setProperty(PROP_NAME, "foo") .setProperty(FulltextIndexConstants.PROP_ANALYZED, true); 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"); IndexingRule rule = defn.getApplicableIndexingRule(asState(newNode("nt:folder"))); assertNotNull(rule); assertTrue(rule.isNodeFullTextIndexed()); assertTrue(rule.indexesAllNodesOfMatchingType()); }
@Test public void nodeFullTextIndexed_Aggregates() throws Exception { NodeBuilder rules = builder.child(INDEX_RULES); rules.child("nt:folder"); TestUtil.child(rules, "nt:folder/properties/prop1") .setProperty(PROP_NAME, "foo") .setProperty(FulltextIndexConstants.PROP_ANALYZED, true); NodeBuilder aggregates = builder.child(FulltextIndexConstants.AGGREGATES); NodeBuilder aggFolder = aggregates.child("nt:folder"); aggFolder.child("i1").setProperty(FulltextIndexConstants.AGG_PATH, "*"); LuceneIndexDefinition defn = new LuceneIndexDefinition(root, builder.getNodeState(), "/foo"); IndexingRule rule = defn.getApplicableIndexingRule(asState(newNode("nt:folder"))); assertNotNull(rule); assertTrue(rule.isNodeFullTextIndexed()); assertTrue(rule.indexesAllNodesOfMatchingType()); }
private boolean canEvalPathRestrictions(IndexingRule rule) { //Opt out if one is looking for all children for '/' as its equivalent to //NO_RESTRICTION if (filter.getPathRestriction() == Filter.PathRestriction.NO_RESTRICTION || (filter.getPathRestriction() == Filter.PathRestriction.ALL_CHILDREN && PathUtils.denotesRoot(filter.getPath())) ){ return false; } //If no other restrictions is provided and query is pure //path restriction based then need to be sure that index definition at least //allows indexing all the path for given nodeType return definition.evaluatePathRestrictions() && rule.indexesAllNodesOfMatchingType(); }
private boolean canEvalNodeTypeRestrictions(IndexingRule rule) { //No need to handle nt:base if (filter.matchesAllTypes()){ return false; } //Only opt in if rule is not derived from nt:base otherwise it would //get used when there a full text index on all nodes return rule.indexesAllNodesOfMatchingType() && !rule.isBasedOnNtBase(); }