@Test public void propertyDefinition() throws Exception{ builder.child(PROP_NODE).child("foo").setProperty(FulltextIndexConstants.PROP_TYPE, PropertyType.TYPENAME_DATE); builder.setProperty(createProperty(INCLUDE_PROPERTY_NAMES, of("foo" , "bar"), STRINGS)); IndexDefinition idxDefn = new IndexDefinition(root, builder.getNodeState(), "/foo"); IndexDefinition.IndexingRule rule = idxDefn.getApplicableIndexingRule(NT_BASE); assertTrue(rule.isIndexed("foo")); assertTrue(rule.isIndexed("bar")); assertEquals(PropertyType.DATE, rule.getConfig("foo").getType()); }
@Test public void propertyTypes() throws Exception{ builder.setProperty(createProperty(INCLUDE_PROPERTY_TYPES, of(TYPENAME_LONG), STRINGS)); builder.setProperty(createProperty(INCLUDE_PROPERTY_NAMES, of("foo" , "bar"), STRINGS)); builder.setProperty(FULL_TEXT_ENABLED, false); LuceneIndexDefinition idxDefn = new LuceneIndexDefinition(root, builder.getNodeState(), "/foo"); IndexingRule rule = idxDefn.getApplicableIndexingRule(NT_BASE); assertFalse(idxDefn.isFullTextEnabled()); assertFalse("If fulltext disabled then nothing stored", rule.getConfig("foo").stored); assertTrue(rule.includePropertyType(PropertyType.LONG)); assertFalse(rule.includePropertyType(PropertyType.STRING)); assertTrue(rule.isIndexed("foo")); assertTrue(rule.isIndexed("bar")); assertFalse(rule.isIndexed("baz")); assertTrue(rule.getConfig("foo").skipTokenization("foo")); }
@Test public void propertyTypes() throws Exception{ builder.setProperty(createProperty(INCLUDE_PROPERTY_TYPES, of(TYPENAME_LONG), STRINGS)); builder.setProperty(createProperty(INCLUDE_PROPERTY_NAMES, of("foo" , "bar"), STRINGS)); builder.setProperty(FulltextIndexConstants.FULL_TEXT_ENABLED, false); IndexDefinition idxDefn = new IndexDefinition(root, builder.getNodeState(), "/foo"); IndexDefinition.IndexingRule rule = idxDefn.getApplicableIndexingRule(NT_BASE); assertFalse(idxDefn.isFullTextEnabled()); assertFalse("If fulltext disabled then nothing stored", rule.getConfig("foo").stored); assertTrue(rule.includePropertyType(PropertyType.LONG)); assertFalse(rule.includePropertyType(PropertyType.STRING)); assertTrue(rule.isIndexed("foo")); assertTrue(rule.isIndexed("bar")); assertFalse(rule.isIndexed("baz")); assertTrue(rule.getConfig("foo").skipTokenization("foo")); }
@Test public void indexRuleWithPropertyOrdering() 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_IS_REGEX, true) .setProperty(FulltextIndexConstants.FIELD_BOOST, 3.0); TestUtil.child(rules, "nt:folder/properties/prop2") .setProperty(PROP_NAME, ".*") .setProperty(FulltextIndexConstants.PROP_IS_REGEX, true) .setProperty(FulltextIndexConstants.FIELD_BOOST, 4.0); rules.child("nt:folder").child(PROP_NODE).setProperty(OAK_CHILD_ORDER, ImmutableList.of("prop2", "prop1"), NAMES); IndexDefinition defn = new IndexDefinition(root, builder.getNodeState(), "/foo"); IndexingRule rule1 = defn.getApplicableIndexingRule(asState(newNode("nt:folder"))); assertNotNull(rule1); assertTrue(rule1.isIndexed("prop1")); assertTrue(rule1.isIndexed("fooProp")); assertEquals(4.0f, rule1.getConfig("bazProp2").boost, 0); //As prop2 is ordered before prop1 its regEx is evaluated first //hence even with a specific regex of foo.* the defn used is from .* assertEquals(4.0f, rule1.getConfig("fooProp").boost, 0); //Order it correctly to get expected result rules.child("nt:folder").child(PROP_NODE).setProperty(OAK_CHILD_ORDER, ImmutableList.of("prop1", "prop2"), NAMES); defn = new IndexDefinition(root, builder.getNodeState(), "/foo"); rule1 = defn.getApplicableIndexingRule(asState(newNode("nt:folder"))); assertEquals(3.0f, rule1.getConfig("fooProp").boost, 0); }
@Test public void indexRuleWithPropertyRegEx2() 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_IS_REGEX, true); TestUtil.child(rules, "nt:folder/properties/prop2") .setProperty(PROP_NAME, "metadata/.*") .setProperty(FulltextIndexConstants.PROP_IS_REGEX, true) .setProperty(FulltextIndexConstants.FIELD_BOOST, 4.0); LuceneIndexDefinition defn = new LuceneIndexDefinition(root, builder.getNodeState(), "/foo"); IndexingRule rule1 = defn.getApplicableIndexingRule(asState(newNode("nt:folder"))); assertNotNull(rule1); assertTrue(rule1.isIndexed("prop1")); assertTrue(rule1.isIndexed("prop2")); assertFalse(rule1.isIndexed("jcr:content/prop1")); assertTrue(rule1.isIndexed("metadata/foo")); assertFalse(rule1.isIndexed("metadata/foo/bar")); }
@Test public void propertyConfigCaseInsensitive() throws Exception{ NodeBuilder rules = builder.child(INDEX_RULES); rules.child("nt:folder"); TestUtil.child(rules, "nt:folder/properties/foo") .setProperty(PROP_NAME, "Foo") .setProperty(FulltextIndexConstants.PROP_PROPERTY_INDEX, true); TestUtil.child(rules, "nt:folder/properties/bar") .setProperty(PROP_NAME, "BAR") .setProperty(FulltextIndexConstants.PROP_PROPERTY_INDEX, true); IndexDefinition defn = new IndexDefinition(root, builder.getNodeState(), "/foo"); IndexingRule rule1 = defn.getApplicableIndexingRule(asState(newNode("nt:folder"))); assertNotNull(rule1); assertTrue(rule1.isIndexed("Foo")); assertTrue(rule1.isIndexed("foo")); assertTrue(rule1.isIndexed("fOO")); assertTrue(rule1.isIndexed("bar")); assertFalse(rule1.isIndexed("baz")); }
@Test public void indexRuleWithPropertyRegEx2() 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_IS_REGEX, true); TestUtil.child(rules, "nt:folder/properties/prop2") .setProperty(PROP_NAME, "metadata/.*") .setProperty(FulltextIndexConstants.PROP_IS_REGEX, true) .setProperty(FulltextIndexConstants.FIELD_BOOST, 4.0); IndexDefinition defn = new IndexDefinition(root, builder.getNodeState(), "/foo"); IndexingRule rule1 = defn.getApplicableIndexingRule(asState(newNode("nt:folder"))); assertNotNull(rule1); assertTrue(rule1.isIndexed("prop1")); assertTrue(rule1.isIndexed("prop2")); assertFalse(rule1.isIndexed("jcr:content/prop1")); assertTrue(rule1.isIndexed("metadata/foo")); assertFalse(rule1.isIndexed("metadata/foo/bar")); }
@Test public void indexRuleSanity() throws Exception{ NodeBuilder rules = builder.child(INDEX_RULES); rules.child("nt:folder").setProperty(FulltextIndexConstants.FIELD_BOOST, 2.0); TestUtil.child(rules, "nt:folder/properties/prop1") .setProperty(FulltextIndexConstants.FIELD_BOOST, 3.0) .setProperty(FulltextIndexConstants.PROP_TYPE, PropertyType.TYPENAME_BOOLEAN); LuceneIndexDefinition defn = new LuceneIndexDefinition(root, builder.getNodeState(), "/foo"); assertNull(defn.getApplicableIndexingRule(asState(newNode("nt:base")))); IndexingRule rule1 = defn.getApplicableIndexingRule(asState(newNode("nt:folder"))); assertNotNull(rule1); assertEquals(2.0f, rule1.boost, 0); assertTrue(rule1.isIndexed("prop1")); assertFalse(rule1.isIndexed("prop2")); PropertyDefinition pd = rule1.getConfig("prop1"); assertEquals(3.0f, pd.boost, 0); assertEquals(PropertyType.BOOLEAN, pd.getType()); }
@Test public void indexRuleSanity() throws Exception{ NodeBuilder rules = builder.child(INDEX_RULES); rules.child("nt:folder").setProperty(FulltextIndexConstants.FIELD_BOOST, 2.0); TestUtil.child(rules, "nt:folder/properties/prop1") .setProperty(FulltextIndexConstants.FIELD_BOOST, 3.0) .setProperty(FulltextIndexConstants.PROP_TYPE, PropertyType.TYPENAME_BOOLEAN); IndexDefinition defn = new IndexDefinition(root, builder.getNodeState(), "/foo"); assertNull(defn.getApplicableIndexingRule(asState(newNode("nt:base")))); IndexingRule rule1 = defn.getApplicableIndexingRule(asState(newNode("nt:folder"))); assertNotNull(rule1); assertEquals(2.0f, rule1.boost, 0); assertTrue(rule1.isIndexed("prop1")); assertFalse(rule1.isIndexed("prop2")); PropertyDefinition pd = rule1.getConfig("prop1"); assertEquals(3.0f, pd.boost, 0); assertEquals(PropertyType.BOOLEAN, pd.getType()); }
@Test public void indexRuleWithPropertyRegEx() throws Exception{ NodeBuilder rules = builder.child(INDEX_RULES); rules.child("nt:folder"); TestUtil.child(rules, "nt:folder/properties/prop1") .setProperty(FulltextIndexConstants.FIELD_BOOST, 3.0); TestUtil.child(rules, "nt:folder/properties/prop2") .setProperty(PROP_NAME, "foo.*") .setProperty(FulltextIndexConstants.PROP_IS_REGEX, true) .setProperty(FulltextIndexConstants.FIELD_BOOST, 4.0); LuceneIndexDefinition defn = new LuceneIndexDefinition(root, builder.getNodeState(), "/foo"); IndexingRule rule1 = defn.getApplicableIndexingRule(asState(newNode("nt:folder"))); assertNotNull(rule1); assertTrue(rule1.isIndexed("prop1")); assertFalse(rule1.isIndexed("prop2")); assertTrue(rule1.isIndexed("fooProp")); PropertyDefinition pd = rule1.getConfig("fooProp2"); assertEquals(4.0f, pd.boost, 0); }
@Test public void indexRuleWithPropertyRegEx() throws Exception{ NodeBuilder rules = builder.child(INDEX_RULES); rules.child("nt:folder"); TestUtil.child(rules, "nt:folder/properties/prop1") .setProperty(FulltextIndexConstants.FIELD_BOOST, 3.0); TestUtil.child(rules, "nt:folder/properties/prop2") .setProperty(PROP_NAME, "foo.*") .setProperty(FulltextIndexConstants.PROP_IS_REGEX, true) .setProperty(FulltextIndexConstants.FIELD_BOOST, 4.0); IndexDefinition defn = new IndexDefinition(root, builder.getNodeState(), "/foo"); IndexingRule rule1 = defn.getApplicableIndexingRule(asState(newNode("nt:folder"))); assertNotNull(rule1); assertTrue(rule1.isIndexed("prop1")); assertFalse(rule1.isIndexed("prop2")); assertTrue(rule1.isIndexed("fooProp")); PropertyDefinition pd = rule1.getConfig("fooProp2"); assertEquals(4.0f, pd.boost, 0); }
@Test public void propertyConfigCaseInsensitive() throws Exception{ NodeBuilder rules = builder.child(INDEX_RULES); rules.child("nt:folder"); TestUtil.child(rules, "nt:folder/properties/foo") .setProperty(PROP_NAME, "Foo") .setProperty(FulltextIndexConstants.PROP_PROPERTY_INDEX, true); TestUtil.child(rules, "nt:folder/properties/bar") .setProperty(PROP_NAME, "BAR") .setProperty(FulltextIndexConstants.PROP_PROPERTY_INDEX, true); LuceneIndexDefinition defn = new LuceneIndexDefinition(root, builder.getNodeState(), "/foo"); IndexingRule rule1 = defn.getApplicableIndexingRule(asState(newNode("nt:folder"))); assertNotNull(rule1); assertTrue(rule1.isIndexed("Foo")); assertTrue(rule1.isIndexed("foo")); assertTrue(rule1.isIndexed("fOO")); assertTrue(rule1.isIndexed("bar")); assertFalse(rule1.isIndexed("baz")); }
private void markPropertyChanged(String name) { if (isIndexable() && !propertiesChanged && indexingRule.isIndexed(name)) { propertiesChanged = true; } }
@Test public void propertyDefinition() throws Exception{ builder.child(PROP_NODE).child("foo").setProperty(FulltextIndexConstants.PROP_TYPE, PropertyType.TYPENAME_DATE); builder.setProperty(createProperty(INCLUDE_PROPERTY_NAMES, of("foo" , "bar"), STRINGS)); LuceneIndexDefinition idxDefn = new LuceneIndexDefinition(root, builder.getNodeState(), "/foo"); IndexingRule rule = idxDefn.getApplicableIndexingRule(NT_BASE); assertTrue(rule.isIndexed("foo")); assertTrue(rule.isIndexed("bar")); assertEquals(PropertyType.DATE, rule.getConfig("foo").getType()); }
private void markPropertyChanged(String name) { if (isIndexable() && !propertiesChanged && indexingRule.isIndexed(name)) { propertiesChanged = true; } }
private void markPropertyChanged(String name) { if (isIndexable() && !propertiesChanged && indexingRule.isIndexed(name)) { propertiesChanged = true; } }
@Test public void propertyDefinitionWithExcludes() throws Exception{ builder.child(PROP_NODE).child("foo").setProperty(FulltextIndexConstants.PROP_TYPE, PropertyType.TYPENAME_DATE); IndexDefinition idxDefn = new IndexDefinition(root, builder.getNodeState(), "/foo"); IndexDefinition.IndexingRule rule = idxDefn.getApplicableIndexingRule(NT_BASE); assertTrue(rule.isIndexed("foo")); assertTrue(rule.isIndexed("bar")); assertEquals(PropertyType.DATE, rule.getConfig("foo").getType()); }
@Test public void propertyDefinitionWithExcludes() throws Exception{ builder.child(PROP_NODE).child("foo").setProperty(FulltextIndexConstants.PROP_TYPE, PropertyType.TYPENAME_DATE); LuceneIndexDefinition idxDefn = new LuceneIndexDefinition(root, builder.getNodeState(), "/foo"); IndexingRule rule = idxDefn.getApplicableIndexingRule(NT_BASE); assertTrue(rule.isIndexed("foo")); assertTrue(rule.isIndexed("bar")); assertEquals(PropertyType.DATE, rule.getConfig("foo").getType()); }
@Test public void fullTextEnabled() throws Exception{ LuceneIndexDefinition idxDefn = new LuceneIndexDefinition(root, builder.getNodeState(), "/foo"); IndexingRule rule = idxDefn.getApplicableIndexingRule(NT_BASE); assertTrue("By default fulltext is enabled", idxDefn.isFullTextEnabled()); assertTrue("By default everything is indexed", rule.isIndexed("foo")); assertTrue("Property types need to be defined", rule.includePropertyType(PropertyType.DATE)); assertTrue("For fulltext storage is enabled", rule.getConfig("foo").stored); assertFalse(rule.getConfig("foo").skipTokenization("foo")); assertTrue(rule.getConfig("jcr:uuid").skipTokenization("jcr:uuid")); }
@Test public void fullTextEnabled() throws Exception{ IndexDefinition idxDefn = new IndexDefinition(root, builder.getNodeState(), "/foo"); IndexDefinition.IndexingRule rule = idxDefn.getApplicableIndexingRule(NT_BASE); assertTrue("By default fulltext is enabled", idxDefn.isFullTextEnabled()); assertTrue("By default everything is indexed", rule.isIndexed("foo")); assertTrue("Property types need to be defined", rule.includePropertyType(PropertyType.DATE)); assertTrue("For fulltext storage is enabled", rule.getConfig("foo").stored); assertFalse(rule.getConfig("foo").skipTokenization("foo")); assertTrue(rule.getConfig("jcr:uuid").skipTokenization("jcr:uuid")); }