private long estimatedEntryCount_Compat(int numOfDocs) { //Other index only compete in case of property indexes. For fulltext //index return true count so as to allow multiple property indexes //to be compared fairly FullTextExpression ft = filter.getFullTextConstraint(); if (ft != null && definition.isFullTextEnabled()){ return definition.getFulltextEntryCount(numOfDocs); } return Math.min(definition.getEntryCount(), numOfDocs); }
if (ft != null && !definition.isFullTextEnabled()) { return null;
@Test public void fulltextEnabledAndAggregate() throws Exception{ NodeBuilder defnb = newFTPropertyIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "foo", "lucene", of("foo"), "async"); IndexDefinition defn = new IndexDefinition(root, defnb.getNodeState(), "/foo"); assertFalse(defn.isFullTextEnabled()); NodeBuilder aggregates = defnb.child(FulltextIndexConstants.AGGREGATES); NodeBuilder aggFolder = aggregates.child("nt:base"); aggFolder.child("i1").setProperty(FulltextIndexConstants.AGG_PATH, "*"); defn = new IndexDefinition(root, defnb.getNodeState(), "/foo"); assertTrue(defn.isFullTextEnabled()); }
@Nullable private IndexPlan.Builder defaultPlan() { // With OAK-7947 lucene indexes return a non-null index node to delay reading index files // While IndexNode could have a status check method but for now we are using this work-around // to check null on {@code getIndexStatistics()} as proxy indicator // (this could be avoided by returning lazy statistics) if (indexNode.getIndexStatistics() == null) { return null; } return new IndexPlan.Builder() .setCostPerExecution(definition.getCostPerExecution()) .setCostPerEntry(definition.getCostPerEntry()) .setFulltextIndex(definition.isFullTextEnabled()) .setIncludesNodeData(false) // we should not include node data .setFilter(filter) .setPathPrefix(getPathPrefix()) .setSupportsPathRestriction(definition.evaluatePathRestrictions()) .setDelayed(true) //Lucene is always async .setDeprecated(definition.isDeprecated()) .setAttribute(FulltextIndex.ATTR_PLAN_RESULT, result) .setEstimatedEntryCount(estimatedEntryCount()) .setPlanName(indexPath); }
@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 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")); }