@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())); }
/** * Update index definition based on base or latest builder state * @param useStateFromBuilder whether to use the latest builder state * @return the up to date index definition */ public IndexDefinition apply(boolean useStateFromBuilder) { IndexFormatVersion version = IndexDefinition.determineVersionForFreshIndex(definitionBuilder); definitionBuilder.setProperty(IndexDefinition.INDEX_VERSION, version.getVersion()); //Avoid obtaining the latest NodeState from builder as that would force purge of current transient state //as index definition does not get modified as part of IndexUpdate run in most case we rely on base state //For case where index definition is rewritten there we get fresh state NodeState defnState = useStateFromBuilder ? definitionBuilder.getNodeState() : definitionBuilder.getBaseState(); if (!IndexDefinition.isDisableStoredIndexDefinition()) { definitionBuilder.setChildNode(INDEX_DEFINITION_NODE, NodeStateCloner.cloneVisibleState(defnState)); } String uid = configureUniqueId(definitionBuilder); //Refresh the index definition based on update builder state return indexDefBuilder .root(root) .defn(defnState) .indexPath(indexPath) .version(version) .uid(uid) .reindex() .build(); } }
@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() 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 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 mixinAndPrimaryType() throws Exception{ TestUtil.registerNodeType(builder, testNodeTypeDefn); root = builder.getNodeState(); IndexDefinitionBuilder defnb = new IndexDefinitionBuilder(); defnb.indexRule("oak:TestMixA").property(JcrConstants.JCR_PRIMARYTYPE).propertyIndex(); defnb.indexRule("oak:TestSuperType").property(JcrConstants.JCR_PRIMARYTYPE).propertyIndex().sync(); IndexDefinition defn = IndexDefinition.newBuilder(root, defnb.build(), "/foo").build(); IndexingRule a = getRule(defn, "oak:TestMixA"); assertNotNull(a.getConfig(JcrConstants.JCR_PRIMARYTYPE)); assertNotNull(a.getConfig(JcrConstants.JCR_MIXINTYPES)); assertFalse(a.getConfig(JcrConstants.JCR_MIXINTYPES).sync); IndexingRule b = getRule(defn, "oak:TestSuperType"); assertNotNull(b.getConfig(JcrConstants.JCR_PRIMARYTYPE)); assertNotNull(b.getConfig(JcrConstants.JCR_MIXINTYPES)); assertTrue(b.getConfig(JcrConstants.JCR_PRIMARYTYPE).sync); assertTrue(b.getConfig(JcrConstants.JCR_MIXINTYPES).sync); }
@Test public void mixinAndPrimaryType() throws Exception{ TestUtil.registerNodeType(builder, testNodeTypeDefn); root = builder.getNodeState(); IndexDefinitionBuilder defnb = new IndexDefinitionBuilder(); defnb.indexRule("oak:TestMixA").property(JcrConstants.JCR_PRIMARYTYPE).propertyIndex(); defnb.indexRule("oak:TestSuperType").property(JcrConstants.JCR_PRIMARYTYPE).propertyIndex().sync(); IndexDefinition defn = IndexDefinition.newBuilder(root, defnb.build(), "/foo").build(); IndexingRule a = getRule(defn, "oak:TestMixA"); assertNotNull(a.getConfig(JcrConstants.JCR_PRIMARYTYPE)); assertNotNull(a.getConfig(JcrConstants.JCR_MIXINTYPES)); assertFalse(a.getConfig(JcrConstants.JCR_MIXINTYPES).sync); IndexingRule b = getRule(defn, "oak:TestSuperType"); assertNotNull(b.getConfig(JcrConstants.JCR_PRIMARYTYPE)); assertNotNull(b.getConfig(JcrConstants.JCR_MIXINTYPES)); assertTrue(b.getConfig(JcrConstants.JCR_PRIMARYTYPE).sync); assertTrue(b.getConfig(JcrConstants.JCR_MIXINTYPES).sync); }
@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 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_IgnoreOtherProps() throws Exception{ TestUtil.registerNodeType(builder, testNodeTypeDefn); root = builder.getNodeState(); IndexDefinitionBuilder defnb = new IndexDefinitionBuilder(); defnb.nodeTypeIndex(); defnb.indexRule("oak:TestSuperType").sync(); defnb.indexRule("oak:TestSuperType").property("foo").propertyIndex(); IndexDefinition defn = IndexDefinition.newBuilder(root, defnb.build(), "/foo").build(); IndexingRule ruleSuper = getRule(defn, "oak:TestSuperType"); assertNotNull(ruleSuper); assertNull(ruleSuper.getConfig("foo")); assertNotNull(ruleSuper.getConfig(JcrConstants.JCR_PRIMARYTYPE)); assertNotNull(ruleSuper.getConfig(JcrConstants.JCR_MIXINTYPES)); }
public IndexDefinition build(){ if (version == null){ version = determineIndexFormatVersion(defn); } if (uid == null){ uid = determineUniqueId(defn); if (uid == null && !IndexDefinition.hasPersistedIndex(defn)){ uid = DEFAULT_UID; } } NodeState indexDefnStateToUse = defn; if (!reindexMode){ indexDefnStateToUse = getIndexDefinitionState(defn); } return createInstance(indexDefnStateToUse); }
@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_IgnoreOtherProps() throws Exception{ TestUtil.registerNodeType(builder, testNodeTypeDefn); root = builder.getNodeState(); IndexDefinitionBuilder defnb = new IndexDefinitionBuilder(); defnb.nodeTypeIndex(); defnb.indexRule("oak:TestSuperType").sync(); defnb.indexRule("oak:TestSuperType").property("foo").propertyIndex(); IndexDefinition defn = IndexDefinition.newBuilder(root, defnb.build(), "/foo").build(); IndexingRule ruleSuper = getRule(defn, "oak:TestSuperType"); assertNotNull(ruleSuper); assertNull(ruleSuper.getConfig("foo")); assertNotNull(ruleSuper.getConfig(JcrConstants.JCR_PRIMARYTYPE)); assertNotNull(ruleSuper.getConfig(JcrConstants.JCR_MIXINTYPES)); }
@Override public LuceneIndexDefinition build() { return (LuceneIndexDefinition)super.build(); }
@Override public LuceneIndexDefinition build() { return (LuceneIndexDefinition)super.build(); }