protected static int getPropertyType(PropertyDefinition defn, String name, int defaultVal) { if (defn.isTypeDefined()) { return defn.getType(); } return defaultVal; }
private boolean indexFacets(D doc, PropertyState property, String pname, PropertyDefinition pd) { int tag = property.getType().tag(); int idxDefinedTag = pd.getType(); // Try converting type to the defined type in the index definition if (tag != idxDefinedTag) { log.debug("[{}] Facet property defined with type {} differs from property {} with type {} in " + "path {}", getIndexName(), Type.fromTag(idxDefinedTag, false), property.toString(), Type.fromTag(tag, false), path); tag = idxDefinedTag; } return indexFacetProperty(doc, tag, property, pname); }
private boolean addTypedOrderedFields(D doc, PropertyState property, String pname, PropertyDefinition pd) { // Ignore and warn if property multi-valued as not supported if (property.getType().isArray()) { log.warn( "[{}] Ignoring ordered property {} of type {} for path {} as multivalued ordered property not supported", getIndexName(), pname, Type.fromTag(property.getType().tag(), true), path); return false; } int tag = property.getType().tag(); int idxDefinedTag = pd.getType(); // Try converting type to the defined type in the index definition if (tag != idxDefinedTag) { log.debug( "[{}] Ordered property defined with type {} differs from property {} with type {} in " + "path {}", getIndexName(), Type.fromTag(idxDefinedTag, false), property.toString(), Type.fromTag(tag, false), path); tag = idxDefinedTag; } return indexTypeOrderedFields(doc, pname, tag, property, pd); }
@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 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()); }
@Test public void relativePropertyConfig() throws Exception{ builder.child(PROP_NODE).child("foo1").child("bar").setProperty(FulltextIndexConstants.PROP_TYPE, PropertyType.TYPENAME_DATE); builder.child(PROP_NODE).child("foo2").child("bar2").child("baz").setProperty(FulltextIndexConstants.PROP_TYPE, PropertyType.TYPENAME_LONG); builder.setProperty(createProperty(INCLUDE_PROPERTY_NAMES, of("foo", "foo1/bar", "foo2/bar2/baz"), STRINGS)); LuceneIndexDefinition defn = new LuceneIndexDefinition(root, builder.getNodeState(), "/foo"); IndexingRule rule = defn.getApplicableIndexingRule(asState(newNode("nt:folder"))); assertNotNull(rule.getConfig("foo1/bar")); assertEquals(PropertyType.DATE, rule.getConfig("foo1/bar").getType()); assertEquals(PropertyType.LONG, rule.getConfig("foo2/bar2/baz").getType()); assertTrue(rule.getConfig("foo1/bar").relative); assertArrayEquals(new String[]{"foo2", "bar2"}, rule.getConfig("foo2/bar2/baz").ancestors); }
@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 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 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 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()); }