Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java?rev=1841926&r1=1841925&r2=1841926&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java (original) +++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java Tue Sep 25 12:24:15 2018 @@ -26,17 +26,16 @@ import static org.apache.jackrabbit.oak. import static org.apache.jackrabbit.oak.api.Type.STRINGS; import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.DECLARING_NODE_TYPES; import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NAME; -import static org.apache.jackrabbit.oak.plugins.index.lucene.IndexStatistics.SYNTHETICALLY_FALLIABLE_FIELD; -import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.EVALUATE_PATH_RESTRICTION; -import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.INDEX_DATA_CHILD_NAME; -import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.INDEX_RULES; -import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.ORDERED_PROP_NAMES; -import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.PROP_FUNCTION; +import static org.apache.jackrabbit.oak.plugins.index.search.FulltextIndexConstants.EVALUATE_PATH_RESTRICTION; +import static org.apache.jackrabbit.oak.plugins.index.search.FulltextIndexConstants.INDEX_DATA_CHILD_NAME; +import static org.apache.jackrabbit.oak.plugins.index.search.FulltextIndexConstants.INDEX_RULES; +import static org.apache.jackrabbit.oak.plugins.index.search.FulltextIndexConstants.ORDERED_PROP_NAMES; +import static org.apache.jackrabbit.oak.plugins.index.search.FulltextIndexConstants.PROP_FUNCTION; import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.VERSION; +import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexStatistics.SYNTHETICALLY_FALLIABLE_FIELD; import static org.apache.jackrabbit.oak.plugins.index.lucene.TestUtil.NT_TEST; import static org.apache.jackrabbit.oak.plugins.index.lucene.TestUtil.child; import static org.apache.jackrabbit.oak.plugins.index.lucene.TestUtil.registerTestNodeType; -import static org.apache.jackrabbit.oak.plugins.index.lucene.util.FunctionIndexProcessor.*; import static org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexHelper.newLuceneIndexDefinition; import static org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexHelper.newLucenePropertyIndexDefinition; import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE; @@ -61,11 +60,16 @@ import org.apache.jackrabbit.oak.api.Tre import org.apache.jackrabbit.oak.api.Type; import org.apache.jackrabbit.oak.commons.PathUtils; import org.apache.jackrabbit.oak.plugins.index.IndexConstants; -import org.apache.jackrabbit.oak.plugins.index.lucene.IndexPlanner.PropertyIndexResult; import org.apache.jackrabbit.oak.plugins.index.lucene.reader.DefaultIndexReader; import org.apache.jackrabbit.oak.plugins.index.lucene.reader.LuceneIndexReader; import org.apache.jackrabbit.oak.plugins.index.lucene.reader.LuceneIndexReaderFactory; import org.apache.jackrabbit.oak.plugins.index.lucene.util.IndexDefinitionBuilder; +import org.apache.jackrabbit.oak.plugins.index.search.FulltextIndexConstants; +import org.apache.jackrabbit.oak.plugins.index.search.IndexDefinition; +import org.apache.jackrabbit.oak.plugins.index.search.spi.query.FulltextIndex; +import org.apache.jackrabbit.oak.plugins.index.search.spi.query.FulltextIndexPlanner; +import org.apache.jackrabbit.oak.plugins.index.search.spi.query.FulltextIndexPlanner.PropertyIndexResult; +import org.apache.jackrabbit.oak.plugins.index.search.util.FunctionIndexProcessor; import org.apache.jackrabbit.oak.plugins.memory.PropertyValues; import org.apache.jackrabbit.oak.query.NodeStateNodeTypeInfoProvider; import org.apache.jackrabbit.oak.query.QueryEngineSettings; @@ -103,16 +107,16 @@ public class IndexPlannerTest { @After public void cleanup(){ - IndexPlanner.setUseActualEntryCount(true); + FulltextIndexPlanner.setUseActualEntryCount(true); } @Test public void planForSortField() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); defn.setProperty(createProperty(ORDERED_PROP_NAMES, of("foo"), STRINGS)); - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo")); - IndexPlanner planner = new IndexPlanner(node, "/foo", createFilter("nt:base"), - ImmutableList.of(new OrderEntry("foo", Type.LONG, OrderEntry.Order.ASCENDING))); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo")); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", createFilter("nt:base"), + ImmutableList.of(new OrderEntry("foo", Type.LONG, OrderEntry.Order.ASCENDING))); assertNotNull(planner.getPlan()); assertTrue(pr(planner.getPlan()).isUniquePathsRequired()); } @@ -120,19 +124,19 @@ public class IndexPlannerTest { @Test public void noPlanForSortOnlyByScore() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo")); - IndexPlanner planner = new IndexPlanner(node, "/foo", createFilter("nt:file"), - ImmutableList.of(new OrderEntry("jcr:score", Type.LONG, OrderEntry.Order.ASCENDING))); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo")); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", createFilter("nt:file"), + ImmutableList.of(new OrderEntry("jcr:score", Type.LONG, OrderEntry.Order.ASCENDING))); assertNull(planner.getPlan()); } @Test public void fullTextQueryNonFulltextIndex() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo")); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo")); FilterImpl filter = createFilter("nt:base"); filter.setFullTextConstraint(FullTextParser.parse(".", "mountain")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); assertNull(planner.getPlan()); } @@ -140,15 +144,15 @@ public class IndexPlannerTest { public void noApplicableRule() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); defn.setProperty(createProperty(IndexConstants.DECLARING_NODE_TYPES, of("nt:folder"), STRINGS)); - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo")); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo")); FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("bar")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); assertNull(planner.getPlan()); filter = createFilter("nt:folder"); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("bar")); - planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); assertNotNull(planner.getPlan()); } @@ -158,29 +162,29 @@ public class IndexPlannerTest { //as nt:folder extends nt:hierarchyNode we should get a plan NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); defn.setProperty(createProperty(IndexConstants.DECLARING_NODE_TYPES, of("nt:hierarchyNode"), STRINGS)); - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo")); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo")); FilterImpl filter = createFilter("nt:folder"); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("bar")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); assertNotNull(planner.getPlan()); } @Test public void noMatchingProperty() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo")); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo")); FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("bar", Operator.EQUAL, PropertyValues.newString("bar")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); assertNull(planner.getPlan()); } @Test public void matchingProperty() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo")); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo")); FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("bar")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); assertNotNull(plan); assertNotNull(pr(plan)); @@ -190,27 +194,27 @@ public class IndexPlannerTest { @Test public void purePropertyIndexAndPathRestriction() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); - defn.setProperty(LuceneIndexConstants.EVALUATE_PATH_RESTRICTION, true); - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo")); + defn.setProperty(FulltextIndexConstants.EVALUATE_PATH_RESTRICTION, true); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo")); FilterImpl filter = createFilter("nt:base"); filter.restrictPath("/content", Filter.PathRestriction.ALL_CHILDREN); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); assertNull(planner.getPlan()); } @Test public void fulltextIndexAndPathRestriction() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); - defn.setProperty(LuceneIndexConstants.EVALUATE_PATH_RESTRICTION, true); + defn.setProperty(FulltextIndexConstants.EVALUATE_PATH_RESTRICTION, true); - defn = IndexDefinition.updateDefinition(defn.getNodeState().builder()); + defn = LuceneIndexDefinition.updateDefinition(defn.getNodeState().builder()); NodeBuilder foob = getNode(defn, "indexRules/nt:base/properties/foo"); - foob.setProperty(LuceneIndexConstants.PROP_NODE_SCOPE_INDEX, true); + foob.setProperty(FulltextIndexConstants.PROP_NODE_SCOPE_INDEX, true); - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo")); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo")); FilterImpl filter = createFilter("nt:base"); filter.restrictPath("/content", Filter.PathRestriction.ALL_CHILDREN); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); //For case when a full text property is present then path restriction can be //evaluated @@ -220,16 +224,16 @@ public class IndexPlannerTest { @Test public void fulltextIndexAndNodeTypeRestriction() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); - defn.setProperty(LuceneIndexConstants.EVALUATE_PATH_RESTRICTION, true); + defn.setProperty(FulltextIndexConstants.EVALUATE_PATH_RESTRICTION, true); defn.setProperty(IndexConstants.DECLARING_NODE_TYPES, of("nt:file"), NAMES); - defn = IndexDefinition.updateDefinition(defn.getNodeState().builder()); + defn = LuceneIndexDefinition.updateDefinition(defn.getNodeState().builder()); NodeBuilder foob = getNode(defn, "indexRules/nt:file/properties/foo"); - foob.setProperty(LuceneIndexConstants.PROP_NODE_SCOPE_INDEX, true); + foob.setProperty(FulltextIndexConstants.PROP_NODE_SCOPE_INDEX, true); - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(),"/foo")); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(),"/foo")); FilterImpl filter = createFilter("nt:file"); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); //For case when a full text property is present then path restriction can be //evaluated @@ -240,15 +244,15 @@ public class IndexPlannerTest { public void pureNodeTypeWithEvaluatePathRestrictionEnabled() throws Exception{ NodeBuilder index = builder.child(INDEX_DEFINITIONS_NAME); NodeBuilder defn = newLuceneIndexDefinition(index, "lucene", - of(TYPENAME_STRING)); - defn.setProperty(LuceneIndexConstants.EVALUATE_PATH_RESTRICTION, true); + of(TYPENAME_STRING)); + defn.setProperty(FulltextIndexConstants.EVALUATE_PATH_RESTRICTION, true); TestUtil.useV2(defn); FilterImpl filter = createFilter("nt:file"); filter.restrictPath("/", Filter.PathRestriction.ALL_CHILDREN); - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo")); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); // /jcr:root//element(*, nt:file) //For queries like above Fulltext index should not return a plan @@ -258,12 +262,12 @@ public class IndexPlannerTest { @Test public void purePropertyIndexAndNodeTypeRestriction() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); - defn.setProperty(LuceneIndexConstants.EVALUATE_PATH_RESTRICTION, true); + defn.setProperty(FulltextIndexConstants.EVALUATE_PATH_RESTRICTION, true); defn.setProperty(IndexConstants.DECLARING_NODE_TYPES, of("nt:file"), NAMES); - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo")); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo")); FilterImpl filter = createFilter("nt:file"); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); assertNull(planner.getPlan()); } @@ -271,15 +275,15 @@ public class IndexPlannerTest { @Test public void purePropertyIndexAndNodeTypeRestriction2() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); - defn.setProperty(LuceneIndexConstants.EVALUATE_PATH_RESTRICTION, true); + defn.setProperty(FulltextIndexConstants.EVALUATE_PATH_RESTRICTION, true); - defn = IndexDefinition.updateDefinition(defn.getNodeState().builder()); + defn = LuceneIndexDefinition.updateDefinition(defn.getNodeState().builder()); NodeBuilder foob = getNode(defn, "indexRules/nt:base/properties/foo"); - foob.setProperty(LuceneIndexConstants.PROP_NODE_SCOPE_INDEX, true); + foob.setProperty(FulltextIndexConstants.PROP_NODE_SCOPE_INDEX, true); - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo")); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo")); FilterImpl filter = createFilter("nt:file"); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); //No plan should be result for a index with just a rule for nt:base assertNull(planner.getPlan()); @@ -288,16 +292,16 @@ public class IndexPlannerTest { @Test public void purePropertyIndexAndNodeTypeRestriction3() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); - defn.setProperty(LuceneIndexConstants.EVALUATE_PATH_RESTRICTION, true); + defn.setProperty(FulltextIndexConstants.EVALUATE_PATH_RESTRICTION, true); defn.setProperty(IndexConstants.DECLARING_NODE_TYPES, of("nt:file"), NAMES); - defn = IndexDefinition.updateDefinition(defn.getNodeState().builder()); + defn = LuceneIndexDefinition.updateDefinition(defn.getNodeState().builder()); NodeBuilder foob = getNode(defn, "indexRules/nt:file/properties/foo"); - foob.setProperty(LuceneIndexConstants.PROP_NODE_SCOPE_INDEX, true); + foob.setProperty(FulltextIndexConstants.PROP_NODE_SCOPE_INDEX, true); - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo")); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo")); FilterImpl filter = createFilter("nt:file"); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); assertNotNull(plan); @@ -309,15 +313,15 @@ public class IndexPlannerTest { public void worksWithIndexFormatV2Onwards() throws Exception{ NodeBuilder index = builder.child(INDEX_DEFINITIONS_NAME); NodeBuilder nb = newLuceneIndexDefinition(index, "lucene", - of(TYPENAME_STRING)); - //Dummy data node to ensure that IndexDefinition does not consider it + of(TYPENAME_STRING)); + //Dummy data node to ensure that LuceneIndexDefinition does not consider it //as a fresh indexing case nb.child(INDEX_DATA_CHILD_NAME); - IndexNode node = createIndexNode(new IndexDefinition(root, nb.getNodeState(), "/foo")); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, nb.getNodeState(), "/foo")); FilterImpl filter = createFilter("nt:base"); filter.setFullTextConstraint(FullTextParser.parse(".", "mountain")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); assertNull(planner.getPlan()); } @@ -326,12 +330,12 @@ public class IndexPlannerTest { NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); long numofDocs = IndexDefinition.DEFAULT_ENTRY_COUNT + 1000; - IndexPlanner.setUseActualEntryCount(false); - IndexDefinition idxDefn = new IndexDefinition(root, defn.getNodeState(), "/foo"); - IndexNode node = createIndexNode(idxDefn, numofDocs); + FulltextIndexPlanner.setUseActualEntryCount(false); + LuceneIndexDefinition idxDefn = new LuceneIndexDefinition(root, defn.getNodeState(), "/foo"); + LuceneIndexNode node = createIndexNode(idxDefn, numofDocs); FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("bar")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); //For propertyIndex if entry count (default to IndexDefinition.DEFAULT_ENTRY_COUNT) is @@ -344,14 +348,14 @@ public class IndexPlannerTest { @Test public void propertyIndexCost2() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); - defn.setProperty(LuceneIndexConstants.COST_PER_ENTRY, 2.0); - defn.setProperty(LuceneIndexConstants.COST_PER_EXECUTION, 3.0); + defn.setProperty(FulltextIndexConstants.COST_PER_ENTRY, 2.0); + defn.setProperty(FulltextIndexConstants.COST_PER_EXECUTION, 3.0); long numofDocs = IndexDefinition.DEFAULT_ENTRY_COUNT - 100; - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo"), numofDocs); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo"), numofDocs); FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("bar")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); assertEquals(documentsPerValue(numofDocs), plan.getEstimatedEntryCount()); @@ -368,10 +372,10 @@ public class IndexPlannerTest { long numofDocs = IndexDefinition.DEFAULT_ENTRY_COUNT + 100; - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo"), numofDocs); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo"), numofDocs); FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("bar")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); assertEquals(entryCount, plan.getEstimatedEntryCount()); @@ -383,10 +387,10 @@ public class IndexPlannerTest { long numofDocs = IndexDefinition.DEFAULT_ENTRY_COUNT + 100; - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo"), numofDocs); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo"), numofDocs); FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("bar")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); assertEquals(documentsPerValue(numofDocs), plan.getEstimatedEntryCount()); @@ -396,14 +400,14 @@ public class IndexPlannerTest { public void fulltextIndexCost() throws Exception{ NodeBuilder index = builder.child(INDEX_DEFINITIONS_NAME); NodeBuilder defn = newLuceneIndexDefinition(index, "lucene", - of(TYPENAME_STRING)); + of(TYPENAME_STRING)); TestUtil.useV2(defn); long numofDocs = IndexDefinition.DEFAULT_ENTRY_COUNT + 1000; - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo"), numofDocs); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo"), numofDocs); FilterImpl filter = createFilter("nt:base"); filter.setFullTextConstraint(FullTextParser.parse(".", "mountain")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); assertNotNull(plan); @@ -414,10 +418,10 @@ public class IndexPlannerTest { public void nullPropertyCheck() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo")); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo")); FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.EQUAL, null); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); assertNull("For null checks no plan should be returned", plan); } @@ -428,21 +432,21 @@ public class IndexPlannerTest { NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); NodeBuilder rules = defn.child(INDEX_RULES); TestUtil.child(rules, "oak:TestNode/properties/prop2") - .setProperty(LuceneIndexConstants.PROP_NAME, "foo") - .setProperty(LuceneIndexConstants.PROP_NULL_CHECK_ENABLED, true) - .setProperty(LuceneIndexConstants.PROP_PROPERTY_INDEX, true); + .setProperty(FulltextIndexConstants.PROP_NAME, "foo") + .setProperty(FulltextIndexConstants.PROP_NULL_CHECK_ENABLED, true) + .setProperty(FulltextIndexConstants.PROP_PROPERTY_INDEX, true); - IndexDefinition idxDefn = new IndexDefinition(root, builder.getNodeState().getChildNode("test"), "/foo"); - IndexNode node = createIndexNode(idxDefn); + LuceneIndexDefinition idxDefn = new LuceneIndexDefinition(root, builder.getNodeState().getChildNode("test"), "/foo"); + LuceneIndexNode node = createIndexNode(idxDefn); FilterImpl filter = createFilter(NT_TEST); filter.restrictProperty("foo", Operator.EQUAL, null); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); assertNotNull("For null checks plan should be returned with nullCheckEnabled", plan); - IndexPlanner.PlanResult pr = - (IndexPlanner.PlanResult) plan.getAttribute(LucenePropertyIndex.ATTR_PLAN_RESULT); + FulltextIndexPlanner.PlanResult pr = + (FulltextIndexPlanner.PlanResult) plan.getAttribute(FulltextIndex.ATTR_PLAN_RESULT); assertNotNull(pr.getPropDefn(filter.getPropertyRestriction("foo"))); } @@ -450,12 +454,12 @@ public class IndexPlannerTest { public void noPathRestHasQueryPath() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); defn.setProperty(createProperty(IndexConstants.QUERY_PATHS, of("/test/a"), Type.STRINGS)); - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo")); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo")); FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("bar")); filter.restrictPath("/test2", Filter.PathRestriction.ALL_CHILDREN); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); assertNull(planner.getPlan()); } @@ -463,40 +467,40 @@ public class IndexPlannerTest { public void hasPathRestHasMatchingQueryPaths() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); defn.setProperty(createProperty(IndexConstants.QUERY_PATHS, of("/test/a", "/test/b"), Type.STRINGS)); - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo")); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo")); FilterImpl filter = createFilter("nt:base"); filter.restrictPath("/test/a", Filter.PathRestriction.ALL_CHILDREN); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("bar")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); assertNotNull(planner.getPlan()); } @Test public void hasPathRestHasNoExplicitQueryPaths() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo")); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo")); FilterImpl filter = createFilter("nt:base"); filter.restrictPath("/test2", Filter.PathRestriction.ALL_CHILDREN); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("bar")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); assertNotNull(planner.getPlan()); } @Test public void noPlanForFulltextQueryAndOnlyAnalyzedProperties() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); - defn.setProperty(LuceneIndexConstants.EVALUATE_PATH_RESTRICTION, true); + defn.setProperty(FulltextIndexConstants.EVALUATE_PATH_RESTRICTION, true); - defn = IndexDefinition.updateDefinition(defn.getNodeState().builder()); + defn = LuceneIndexDefinition.updateDefinition(defn.getNodeState().builder()); NodeBuilder foob = getNode(defn, "indexRules/nt:base/properties/foo"); - foob.setProperty(LuceneIndexConstants.PROP_ANALYZED, true); + foob.setProperty(FulltextIndexConstants.PROP_ANALYZED, true); - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo")); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo")); FilterImpl filter = createFilter("nt:base"); filter.setFullTextConstraint(FullTextParser.parse(".", "mountain")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); assertNull(plan); @@ -505,17 +509,17 @@ public class IndexPlannerTest { @Test public void noPlanForNodeTypeQueryAndOnlyAnalyzedProperties() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); - defn.setProperty(LuceneIndexConstants.EVALUATE_PATH_RESTRICTION, true); + defn.setProperty(FulltextIndexConstants.EVALUATE_PATH_RESTRICTION, true); defn.setProperty(IndexConstants.DECLARING_NODE_TYPES, of("nt:file"), NAMES); - defn = IndexDefinition.updateDefinition(defn.getNodeState().builder()); + defn = LuceneIndexDefinition.updateDefinition(defn.getNodeState().builder()); NodeBuilder foob = getNode(defn, "indexRules/nt:file/properties/foo"); - foob.setProperty(LuceneIndexConstants.PROP_ANALYZED, true); + foob.setProperty(FulltextIndexConstants.PROP_ANALYZED, true); - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo")); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo")); FilterImpl filter = createFilter("nt:file"); filter.restrictPath("/foo", Filter.PathRestriction.ALL_CHILDREN); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); assertNull(plan); @@ -527,25 +531,25 @@ public class IndexPlannerTest { defnb.indexRule("nt:base").property("foo").propertyIndex(); defnb.indexRule("nt:base").property("bar").propertyIndex().weight(0); - IndexDefinition defn = new IndexDefinition(root, defnb.build(), "/foo"); - IndexNode node = createIndexNode(defn); + LuceneIndexDefinition defn = new LuceneIndexDefinition(root, defnb.build(), "/foo"); + LuceneIndexNode node = createIndexNode(defn); FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("bar", Operator.EQUAL, PropertyValues.newString("a")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); //Even though foo is indexed it would not be considered for a query involving just foo assertNull(planner.getPlan()); filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("a")); - planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan1 = planner.getPlan(); assertNotNull(plan1); filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("a")); filter.restrictProperty("bar", Operator.EQUAL, PropertyValues.newString("a")); - planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan2 = planner.getPlan(); assertNotNull(plan2); @@ -569,7 +573,7 @@ public class IndexPlannerTest { boolean enableSpellcheckIndex = false; boolean queryForSugggestion = true; - IndexNode node = createSuggestionOrSpellcheckIndex(indexNodeType, enableSuggestionIndex, enableSpellcheckIndex); + LuceneIndexNode node = createSuggestionOrSpellcheckIndex(indexNodeType, enableSuggestionIndex, enableSpellcheckIndex); QueryIndex.IndexPlan plan = getSuggestOrSpellcheckIndexPlan(node, queryNodeType, queryForSugggestion); assertNull(plan); @@ -584,7 +588,7 @@ public class IndexPlannerTest { boolean enableSpellcheckIndex = false; boolean queryForSugggestion = false; - IndexNode node = createSuggestionOrSpellcheckIndex(indexNodeType, enableSuggestionIndex, enableSpellcheckIndex); + LuceneIndexNode node = createSuggestionOrSpellcheckIndex(indexNodeType, enableSuggestionIndex, enableSpellcheckIndex); QueryIndex.IndexPlan plan = getSuggestOrSpellcheckIndexPlan(node, queryNodeType, queryForSugggestion); assertNull(plan); @@ -599,7 +603,7 @@ public class IndexPlannerTest { boolean enableSpellcheckIndex = false; boolean queryForSugggestion = true; - IndexNode node = createSuggestionOrSpellcheckIndex(indexNodeType, enableSuggestionIndex, enableSpellcheckIndex); + LuceneIndexNode node = createSuggestionOrSpellcheckIndex(indexNodeType, enableSuggestionIndex, enableSpellcheckIndex); QueryIndex.IndexPlan plan = getSuggestOrSpellcheckIndexPlan(node, queryNodeType, queryForSugggestion); assertNotNull(plan); @@ -615,7 +619,7 @@ public class IndexPlannerTest { boolean enableSpellcheckIndex = true; boolean queryForSugggestion = false; - IndexNode node = createSuggestionOrSpellcheckIndex(indexNodeType, enableSuggestionIndex, enableSpellcheckIndex); + LuceneIndexNode node = createSuggestionOrSpellcheckIndex(indexNodeType, enableSuggestionIndex, enableSpellcheckIndex); QueryIndex.IndexPlan plan = getSuggestOrSpellcheckIndexPlan(node, queryNodeType, queryForSugggestion); assertNotNull(plan); @@ -631,7 +635,7 @@ public class IndexPlannerTest { boolean enableSpellcheckIndex = false; boolean queryForSugggestion = true; - IndexNode node = createSuggestionOrSpellcheckIndex(indexNodeType, enableSuggestionIndex, enableSpellcheckIndex); + LuceneIndexNode node = createSuggestionOrSpellcheckIndex(indexNodeType, enableSuggestionIndex, enableSpellcheckIndex); QueryIndex.IndexPlan plan = getSuggestOrSpellcheckIndexPlan(node, queryNodeType, queryForSugggestion); assertNull(plan); @@ -646,7 +650,7 @@ public class IndexPlannerTest { boolean enableSpellcheckIndex = true; boolean queryForSugggestion = false; - IndexNode node = createSuggestionOrSpellcheckIndex(indexNodeType, enableSuggestionIndex, enableSpellcheckIndex); + LuceneIndexNode node = createSuggestionOrSpellcheckIndex(indexNodeType, enableSuggestionIndex, enableSpellcheckIndex); QueryIndex.IndexPlan plan = getSuggestOrSpellcheckIndexPlan(node, queryNodeType, queryForSugggestion); assertNull(plan); @@ -656,11 +660,11 @@ public class IndexPlannerTest { public void fullTextQuery_RelativePath1() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); - defn = IndexDefinition.updateDefinition(defn.getNodeState().builder()); + defn = LuceneIndexDefinition.updateDefinition(defn.getNodeState().builder()); NodeBuilder foob = getNode(defn, "indexRules/nt:base/properties/foo"); - foob.setProperty(LuceneIndexConstants.PROP_ANALYZED, true); + foob.setProperty(FulltextIndexConstants.PROP_ANALYZED, true); - IndexPlanner planner = createPlannerForFulltext(defn.getNodeState(), FullTextParser.parse("bar", "mountain")); + FulltextIndexPlanner planner = createPlannerForFulltext(defn.getNodeState(), FullTextParser.parse("bar", "mountain")); //No plan for unindex property assertNull(planner.getPlan()); @@ -671,15 +675,15 @@ public class IndexPlannerTest { NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("allProps"), "async"); //Index all props and then perform fulltext - defn = IndexDefinition.updateDefinition(defn.getNodeState().builder()); + defn = LuceneIndexDefinition.updateDefinition(defn.getNodeState().builder()); NodeBuilder foob = getNode(defn, "indexRules/nt:base/properties/allProps"); - foob.setProperty(LuceneIndexConstants.PROP_NAME, LuceneIndexConstants.REGEX_ALL_PROPS); - foob.setProperty(LuceneIndexConstants.PROP_ANALYZED, true); - foob.setProperty(LuceneIndexConstants.PROP_IS_REGEX, true); + foob.setProperty(FulltextIndexConstants.PROP_NAME, FulltextIndexConstants.REGEX_ALL_PROPS); + foob.setProperty(FulltextIndexConstants.PROP_ANALYZED, true); + foob.setProperty(FulltextIndexConstants.PROP_IS_REGEX, true); FullTextExpression exp = FullTextParser.parse("bar", "mountain OR valley"); exp = new FullTextContains("bar", "mountain OR valley", exp); - IndexPlanner planner = createPlannerForFulltext(defn.getNodeState(), exp); + FulltextIndexPlanner planner = createPlannerForFulltext(defn.getNodeState(), exp); //No plan for unindex property assertNotNull(planner.getPlan()); @@ -690,17 +694,17 @@ public class IndexPlannerTest { NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("allProps"), "async"); //Index all props and then perform fulltext - defn = IndexDefinition.updateDefinition(defn.getNodeState().builder()); + defn = LuceneIndexDefinition.updateDefinition(defn.getNodeState().builder()); NodeBuilder foob = getNode(defn, "indexRules/nt:base/properties/allProps"); - foob.setProperty(LuceneIndexConstants.PROP_NAME, LuceneIndexConstants.REGEX_ALL_PROPS); - foob.setProperty(LuceneIndexConstants.PROP_ANALYZED, true); - foob.setProperty(LuceneIndexConstants.PROP_NODE_SCOPE_INDEX, true); - foob.setProperty(LuceneIndexConstants.PROP_IS_REGEX, true); + foob.setProperty(FulltextIndexConstants.PROP_NAME, FulltextIndexConstants.REGEX_ALL_PROPS); + foob.setProperty(FulltextIndexConstants.PROP_ANALYZED, true); + foob.setProperty(FulltextIndexConstants.PROP_NODE_SCOPE_INDEX, true); + foob.setProperty(FulltextIndexConstants.PROP_IS_REGEX, true); //where contains('jcr:content/*', 'mountain OR valley') can be evaluated by index //on nt:base by evaluating on '.' and then checking if node name is 'jcr:content' - IndexPlanner planner = createPlannerForFulltext(defn.getNodeState(), - FullTextParser.parse("jcr:content/*", "mountain OR valley")); + FulltextIndexPlanner planner = createPlannerForFulltext(defn.getNodeState(), + FullTextParser.parse("jcr:content/*", "mountain OR valley")); //No plan for unindex property assertNotNull(planner.getPlan()); @@ -711,15 +715,15 @@ public class IndexPlannerTest { NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("allProps"), "async"); //Index all props and then perform fulltext - defn = IndexDefinition.updateDefinition(defn.getNodeState().builder()); - NodeBuilder agg = defn.child(LuceneIndexConstants.AGGREGATES).child("nt:base").child("include0"); - agg.setProperty(LuceneIndexConstants.AGG_PATH, "jcr:content"); - agg.setProperty(LuceneIndexConstants.AGG_RELATIVE_NODE, true); + defn = LuceneIndexDefinition.updateDefinition(defn.getNodeState().builder()); + NodeBuilder agg = defn.child(FulltextIndexConstants.AGGREGATES).child("nt:base").child("include0"); + agg.setProperty(FulltextIndexConstants.AGG_PATH, "jcr:content"); + agg.setProperty(FulltextIndexConstants.AGG_RELATIVE_NODE, true); //where contains('jcr:content/*', 'mountain OR valley') can be evaluated by index //on nt:base by evaluating on '.' and then checking if node name is 'jcr:content' - IndexPlanner planner = createPlannerForFulltext(defn.getNodeState(), - FullTextParser.parse("jcr:content/*", "mountain OR valley")); + FulltextIndexPlanner planner = createPlannerForFulltext(defn.getNodeState(), + FullTextParser.parse("jcr:content/*", "mountain OR valley")); //No plan for unindex property assertNotNull(planner.getPlan()); @@ -730,15 +734,15 @@ public class IndexPlannerTest { NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); //Index all props and then perform fulltext - defn = IndexDefinition.updateDefinition(defn.getNodeState().builder()); + defn = LuceneIndexDefinition.updateDefinition(defn.getNodeState().builder()); NodeBuilder foob = getNode(defn, "indexRules/nt:base/properties/foo"); - foob.setProperty(LuceneIndexConstants.PROP_NAME, "foo"); - foob.setProperty(LuceneIndexConstants.PROP_ANALYZED, true); + foob.setProperty(FulltextIndexConstants.PROP_NAME, "foo"); + foob.setProperty(FulltextIndexConstants.PROP_ANALYZED, true); //where contains('jcr:content/*', 'mountain OR valley') can be evaluated by index //on nt:base by evaluating on '.' and then checking if node name is 'jcr:content' - IndexPlanner planner = createPlannerForFulltext(defn.getNodeState(), - FullTextParser.parse("jcr:content/*", "mountain OR valley")); + FulltextIndexPlanner planner = createPlannerForFulltext(defn.getNodeState(), + FullTextParser.parse("jcr:content/*", "mountain OR valley")); //No plan for unindex property assertNull(planner.getPlan()); @@ -749,18 +753,18 @@ public class IndexPlannerTest { NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo", "bar"), "async"); //Index all props and then perform fulltext - defn = IndexDefinition.updateDefinition(defn.getNodeState().builder()); + defn = LuceneIndexDefinition.updateDefinition(defn.getNodeState().builder()); NodeBuilder foob = getNode(defn, "indexRules/nt:base/properties/foo"); - foob.setProperty(LuceneIndexConstants.PROP_NAME, "foo"); + foob.setProperty(FulltextIndexConstants.PROP_NAME, "foo"); NodeBuilder barb = getNode(defn, "indexRules/nt:base/properties/bar"); - barb.setProperty(LuceneIndexConstants.PROP_NAME, "bar"); - barb.setProperty(LuceneIndexConstants.PROP_ANALYZED, true); + barb.setProperty(FulltextIndexConstants.PROP_NAME, "bar"); + barb.setProperty(FulltextIndexConstants.PROP_ANALYZED, true); //where contains('jcr:content/*', 'mountain OR valley') can be evaluated by index //on nt:base by evaluating on '.' and then checking if node name is 'jcr:content' - IndexPlanner planner = createPlannerForFulltext(defn.getNodeState(), - FullTextParser.parse("foo", "mountain OR valley")); + FulltextIndexPlanner planner = createPlannerForFulltext(defn.getNodeState(), + FullTextParser.parse("foo", "mountain OR valley")); //No plan for unindex property assertNull(planner.getPlan()); @@ -771,14 +775,14 @@ public class IndexPlannerTest { NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo", "bar"), "async"); //Index all props and then perform fulltext - defn = IndexDefinition.updateDefinition(defn.getNodeState().builder()); + defn = LuceneIndexDefinition.updateDefinition(defn.getNodeState().builder()); NodeBuilder foob = getNode(defn, "indexRules/nt:base/properties/foo"); - foob.setProperty(LuceneIndexConstants.PROP_NAME, "foo"); - foob.setProperty(LuceneIndexConstants.PROP_ANALYZED, true); + foob.setProperty(FulltextIndexConstants.PROP_NAME, "foo"); + foob.setProperty(FulltextIndexConstants.PROP_ANALYZED, true); NodeBuilder barb = getNode(defn, "indexRules/nt:base/properties/bar"); - barb.setProperty(LuceneIndexConstants.PROP_NAME, "bar"); - barb.setProperty(LuceneIndexConstants.PROP_ANALYZED, true); + barb.setProperty(FulltextIndexConstants.PROP_NAME, "bar"); + barb.setProperty(FulltextIndexConstants.PROP_ANALYZED, true); //where contains('jcr:content/bar', 'mountain OR valley') and contains('jcr:content/foo', 'mountain OR valley') @@ -788,7 +792,7 @@ public class IndexPlannerTest { FullTextExpression fooExp = FullTextParser.parse("jcr:content/bar", "mountain OR valley"); FullTextExpression barExp = FullTextParser.parse("jcr:content/foo", "mountain OR valley"); FullTextExpression exp = new FullTextAnd(Arrays.asList(fooExp, barExp)); - IndexPlanner planner = createPlannerForFulltext(defn.getNodeState(),exp); + FulltextIndexPlanner planner = createPlannerForFulltext(defn.getNodeState(),exp); //No plan for unindex property assertNotNull(planner.getPlan()); @@ -799,19 +803,19 @@ public class IndexPlannerTest { NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo", "bar"), "async"); //Index all props and then perform fulltext - defn = IndexDefinition.updateDefinition(defn.getNodeState().builder()); + defn = LuceneIndexDefinition.updateDefinition(defn.getNodeState().builder()); NodeBuilder foob = getNode(defn, "indexRules/nt:base/properties/foo"); - foob.setProperty(LuceneIndexConstants.PROP_NAME, "foo"); - foob.setProperty(LuceneIndexConstants.PROP_ANALYZED, true); + foob.setProperty(FulltextIndexConstants.PROP_NAME, "foo"); + foob.setProperty(FulltextIndexConstants.PROP_ANALYZED, true); NodeBuilder barb = getNode(defn, "indexRules/nt:base/properties/bar"); - barb.setProperty(LuceneIndexConstants.PROP_NAME, "bar"); - barb.setProperty(LuceneIndexConstants.PROP_ANALYZED, true); + barb.setProperty(FulltextIndexConstants.PROP_NAME, "bar"); + barb.setProperty(FulltextIndexConstants.PROP_ANALYZED, true); FullTextExpression fooExp = FullTextParser.parse("metadata/bar", "mountain OR valley"); FullTextExpression barExp = FullTextParser.parse("jcr:content/foo", "mountain OR valley"); FullTextExpression exp = new FullTextAnd(Arrays.asList(fooExp, barExp)); - IndexPlanner planner = createPlannerForFulltext(defn.getNodeState(),exp); + FulltextIndexPlanner planner = createPlannerForFulltext(defn.getNodeState(),exp); //No plan for unindex property assertNull(planner.getPlan()); @@ -821,22 +825,22 @@ public class IndexPlannerTest { public void valuePattern_Equals() throws Exception{ IndexDefinitionBuilder defnb = new IndexDefinitionBuilder(); defnb.indexRule("nt:base") - .property("foo") - .propertyIndex() - .valueExcludedPrefixes("/jobs"); + .property("foo") + .propertyIndex() + .valueExcludedPrefixes("/jobs"); - IndexDefinition defn = new IndexDefinition(root, defnb.build(), "/foo"); - IndexNode node = createIndexNode(defn); + LuceneIndexDefinition defn = new LuceneIndexDefinition(root, defnb.build(), "/foo"); + LuceneIndexNode node = createIndexNode(defn); FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("/bar")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); assertNotNull(planner.getPlan()); filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("/jobs/a")); - planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); assertNull(planner.getPlan()); } @@ -844,25 +848,25 @@ public class IndexPlannerTest { public void valuePattern_StartsWith() throws Exception{ IndexDefinitionBuilder defnb = new IndexDefinitionBuilder(); defnb.indexRule("nt:base") - .property("foo") - .propertyIndex() - .valueExcludedPrefixes("/jobs"); + .property("foo") + .propertyIndex() + .valueExcludedPrefixes("/jobs"); - IndexDefinition defn = new IndexDefinition(root, defnb.build(), "/foo"); - IndexNode node = createIndexNode(defn); + LuceneIndexDefinition defn = new LuceneIndexDefinition(root, defnb.build(), "/foo"); + LuceneIndexNode node = createIndexNode(defn); FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.GREATER_OR_EQUAL, PropertyValues.newString("/bar")); filter.restrictProperty("foo", Operator.LESS_OR_EQUAL, PropertyValues.newString("/bar0")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); assertNotNull(planner.getPlan()); filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.GREATER_OR_EQUAL, PropertyValues.newString("/jobs")); filter.restrictProperty("foo", Operator.LESS_OR_EQUAL, PropertyValues.newString("/jobs0")); - planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); assertNull(planner.getPlan()); } @@ -872,18 +876,18 @@ public class IndexPlannerTest { defnb.indexRule("nt:base").property("foo").propertyIndex(); defnb.indexRule("nt:base").property("jcr:content/bar").propertyIndex(); - IndexDefinition defn = new IndexDefinition(root, defnb.build(), "/foo"); - IndexNode node = createIndexNode(defn); + LuceneIndexDefinition defn = new LuceneIndexDefinition(root, defnb.build(), "/foo"); + LuceneIndexNode node = createIndexNode(defn); FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("jcr:content/foo", Operator.EQUAL, PropertyValues.newString("/bar")); filter.restrictProperty("bar", Operator.EQUAL, PropertyValues.newString("/bar")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); assertNotNull(plan); - IndexPlanner.PlanResult pr = pr(plan); + FulltextIndexPlanner.PlanResult pr = pr(plan); assertTrue(pr.isPathTransformed()); assertEquals("/a/b", pr.transformPath("/a/b/jcr:content")); assertNull(pr.transformPath("/a/b/c")); @@ -901,13 +905,13 @@ public class IndexPlannerTest { IndexDefinitionBuilder defnb = new IndexDefinitionBuilder(); defnb.indexRule("nt:unstructured").property("foo").propertyIndex(); - IndexDefinition defn = new IndexDefinition(root, defnb.build(), "/foo"); - IndexNode node = createIndexNode(defn); + LuceneIndexDefinition defn = new LuceneIndexDefinition(root, defnb.build(), "/foo"); + LuceneIndexNode node = createIndexNode(defn); FilterImpl filter = createFilter("nt:unstructured"); filter.restrictProperty("jcr:content/foo", Operator.EQUAL, PropertyValues.newString("/bar")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); //Should not return a plan for index rule other than nt:base @@ -920,17 +924,17 @@ public class IndexPlannerTest { defnb.indexRule("nt:base").property("foo").propertyIndex(); defnb.aggregateRule("nt:base").include("*"); - IndexDefinition defn = new IndexDefinition(root, defnb.build(), "/foo"); - IndexNode node = createIndexNode(defn); + LuceneIndexDefinition defn = new LuceneIndexDefinition(root, defnb.build(), "/foo"); + LuceneIndexNode node = createIndexNode(defn); FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("jcr:content/foo", Operator.EQUAL, PropertyValues.newString("/bar")); FullTextExpression ft = FullTextParser.parse("jcr:content/*", "mountain OR valley"); filter.setFullTextConstraint(ft); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); - IndexPlanner.PlanResult pr = pr(plan); + FulltextIndexPlanner.PlanResult pr = pr(plan); assertFalse(pr.hasProperty("jcr:content/foo")); } @@ -941,19 +945,19 @@ public class IndexPlannerTest { defnb.indexRule("nt:base").property("bar").propertyIndex(); defnb.indexRule("nt:base").property("baz").propertyIndex(); - IndexDefinition defn = new IndexDefinition(root, defnb.build(), "/foo"); - IndexNode node = createIndexNode(defn); + LuceneIndexDefinition defn = new LuceneIndexDefinition(root, defnb.build(), "/foo"); + LuceneIndexNode node = createIndexNode(defn); FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("jcr:content/foo", Operator.EQUAL, PropertyValues.newString("/bar")); filter.restrictProperty("jcr:content/bar", Operator.EQUAL, PropertyValues.newString("/bar")); filter.restrictProperty("metadata/baz", Operator.EQUAL, PropertyValues.newString("/bar")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); assertNotNull(plan); - IndexPlanner.PlanResult pr = pr(plan); + FulltextIndexPlanner.PlanResult pr = pr(plan); assertTrue(pr.hasProperty("jcr:content/foo")); assertTrue(pr.hasProperty("jcr:content/bar")); assertFalse(pr.hasProperty("metadata/baz")); @@ -966,17 +970,17 @@ public class IndexPlannerTest { // Evaluates path restriction NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async") - .setProperty(EVALUATE_PATH_RESTRICTION, true); - IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + .setProperty(EVALUATE_PATH_RESTRICTION, true); + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo")); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); assertTrue(plan.getSupportsPathRestriction()); // Doesn't evaluate path restriction defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async") - .setProperty(EVALUATE_PATH_RESTRICTION, false); - node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), "/foo1")); - planner = new IndexPlanner(node, "/foo1", filter, Collections.<OrderEntry>emptyList()); + .setProperty(EVALUATE_PATH_RESTRICTION, false); + node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo1")); + planner = new FulltextIndexPlanner(node, "/foo1", filter, Collections.<OrderEntry>emptyList()); plan = planner.getPlan(); assertFalse(plan.getSupportsPathRestriction()); } @@ -989,13 +993,13 @@ public class IndexPlannerTest { IndexDefinitionBuilder defnb = new IndexDefinitionBuilder(); defnb.indexRule("nt:base").property("foo").propertyIndex().unique(); - IndexDefinition defn = new IndexDefinition(root, defnb.build(), "/foo"); - IndexNode node = createIndexNode(defn, 100); + LuceneIndexDefinition defn = new LuceneIndexDefinition(root, defnb.build(), "/foo"); + LuceneIndexNode node = createIndexNode(defn, 100); FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("bar")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); assertNotNull(plan); @@ -1012,13 +1016,13 @@ public class IndexPlannerTest { IndexDefinitionBuilder defnb = new IndexDefinitionBuilder(); defnb.indexRule("nt:base").property("foo").propertyIndex().unique(); - IndexDefinition defn = new IndexDefinition(root, defnb.build(), "/foo"); - IndexNode node = createIndexNode(defn); + LuceneIndexDefinition defn = new LuceneIndexDefinition(root, defnb.build(), "/foo"); + LuceneIndexNode node = createIndexNode(defn); FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("jcr:content/foo", Operator.EQUAL, PropertyValues.newString("bar")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); assertNotNull(plan); @@ -1035,13 +1039,13 @@ public class IndexPlannerTest { IndexDefinitionBuilder defnb = new IndexDefinitionBuilder(); defnb.indexRule("nt:base").property("foo").propertyIndex().sync(); - IndexDefinition defn = new IndexDefinition(root, defnb.build(), "/foo"); - IndexNode node = createIndexNode(defn, 100); + LuceneIndexDefinition defn = new LuceneIndexDefinition(root, defnb.build(), "/foo"); + LuceneIndexNode node = createIndexNode(defn, 100); FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("bar")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); assertNotNull(plan); @@ -1062,14 +1066,14 @@ public class IndexPlannerTest { defnb.indexRule("nt:base").property("foo").propertyIndex().unique(); defnb.indexRule("nt:base").property("bar").propertyIndex().sync(); - IndexDefinition defn = new IndexDefinition(root, defnb.build(), "/foo"); - IndexNode node = createIndexNode(defn, 100); + LuceneIndexDefinition defn = new LuceneIndexDefinition(root, defnb.build(), "/foo"); + LuceneIndexNode node = createIndexNode(defn, 100); FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("bar")); filter.restrictProperty("bar", Operator.EQUAL, PropertyValues.newString("foo")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); assertNotNull(plan); @@ -1087,14 +1091,14 @@ public class IndexPlannerTest { defnb.indexRule("nt:base").property("foo").propertyIndex().sync(); defnb.indexRule("nt:base").property("bar").propertyIndex().ordered(); - IndexDefinition defn = new IndexDefinition(root, defnb.build(), "/foo"); - IndexNode node = createIndexNode(defn, 100); + LuceneIndexDefinition defn = new LuceneIndexDefinition(root, defnb.build(), "/foo"); + LuceneIndexNode node = createIndexNode(defn, 100); FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("bar")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, - ImmutableList.of(new OrderEntry("bar", Type.LONG, OrderEntry.Order.ASCENDING))); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, + ImmutableList.of(new OrderEntry("bar", Type.LONG, OrderEntry.Order.ASCENDING))); QueryIndex.IndexPlan plan = planner.getPlan(); assertNotNull(plan); @@ -1110,15 +1114,15 @@ public class IndexPlannerTest { defnb.indexRule("nt:base").property("foo").propertyIndex().sync(); defnb.indexRule("nt:base").property("bar").analyzed(); - IndexDefinition defn = new IndexDefinition(root, defnb.build(), "/foo"); - IndexNode node = createIndexNode(defn, 100); + LuceneIndexDefinition defn = new LuceneIndexDefinition(root, defnb.build(), "/foo"); + LuceneIndexNode node = createIndexNode(defn, 100); FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("bar")); filter.setFullTextConstraint(FullTextParser.parse("bar", "mountain")); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, - ImmutableList.of(new OrderEntry("bar", Type.LONG, OrderEntry.Order.ASCENDING))); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, + ImmutableList.of(new OrderEntry("bar", Type.LONG, OrderEntry.Order.ASCENDING))); QueryIndex.IndexPlan plan = planner.getPlan(); assertNotNull(plan); @@ -1131,16 +1135,16 @@ public class IndexPlannerTest { //~----------------------------------------< nodetype > String testNodeTypeDefn = "[oak:TestMixA]\n" + - " mixin\n" + - "\n" + - "[oak:TestSuperType]\n" + - "- * (UNDEFINED) multiple\n" + - "\n" + - "[oak:TestTypeA] > oak:TestSuperType\n" + - "- * (UNDEFINED) multiple\n" + - "\n" + - "[oak:TestTypeB] > oak:TestSuperType, oak:TestMixA\n" + - "- * (UNDEFINED) multiple"; + " mixin\n" + + "\n" + + "[oak:TestSuperType]\n" + + "- * (UNDEFINED) multiple\n" + + "\n" + + "[oak:TestTypeA] > oak:TestSuperType\n" + + "- * (UNDEFINED) multiple\n" + + "\n" + + "[oak:TestTypeB] > oak:TestSuperType, oak:TestMixA\n" + + "- * (UNDEFINED) multiple"; @Test public void nodetype_primaryType() throws Exception{ @@ -1151,22 +1155,22 @@ public class IndexPlannerTest { defnb.nodeTypeIndex(); defnb.indexRule("oak:TestSuperType"); - IndexDefinition defn = new IndexDefinition(root, defnb.build(), "/foo"); - IndexNode node = createIndexNode(defn); + LuceneIndexDefinition defn = new LuceneIndexDefinition(root, defnb.build(), "/foo"); + LuceneIndexNode node = createIndexNode(defn); FilterImpl filter = createFilter("oak:TestSuperType"); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); assertNotNull(plan); - IndexPlanner.PlanResult r = pr(plan); + FulltextIndexPlanner.PlanResult r = pr(plan); assertTrue(r.evaluateNodeTypeRestriction()); //As oak:TestSuperType is parent of oak:TestTypeA the child nodetypes should //also be indexed filter = createFilter("oak:TestTypeA"); - planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); plan = planner.getPlan(); assertNotNull(plan); @@ -1183,16 +1187,16 @@ public class IndexPlannerTest { defnb.nodeTypeIndex(); defnb.indexRule("oak:TestMixA"); - IndexDefinition defn = new IndexDefinition(root, defnb.build(), "/foo"); - IndexNode node = createIndexNode(defn); + LuceneIndexDefinition defn = new LuceneIndexDefinition(root, defnb.build(), "/foo"); + LuceneIndexNode node = createIndexNode(defn); FilterImpl filter = createFilter("oak:TestMixA"); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); assertNotNull(plan); - IndexPlanner.PlanResult r = pr(plan); + FulltextIndexPlanner.PlanResult r = pr(plan); assertTrue(r.evaluateNodeTypeRestriction()); } @@ -1205,52 +1209,52 @@ public class IndexPlannerTest { defnb.nodeTypeIndex(); defnb.indexRule("oak:TestSuperType").sync(); - IndexDefinition defn = new IndexDefinition(root, defnb.build(), "/foo"); - IndexNode node = createIndexNode(defn); + LuceneIndexDefinition defn = new LuceneIndexDefinition(root, defnb.build(), "/foo"); + LuceneIndexNode node = createIndexNode(defn); FilterImpl filter = createFilter("oak:TestSuperType"); - IndexPlanner planner = new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); assertNotNull(plan); - IndexPlanner.PlanResult r = pr(plan); + FulltextIndexPlanner.PlanResult r = pr(plan); assertTrue(r.evaluateNodeTypeRestriction()); assertTrue(r.evaluateSyncNodeTypeRestriction()); } - private IndexPlanner createPlannerForFulltext(NodeState defn, FullTextExpression exp) throws IOException { - IndexNode node = createIndexNode(new IndexDefinition(root, defn, "/foo")); + private FulltextIndexPlanner createPlannerForFulltext(NodeState defn, FullTextExpression exp) throws IOException { + LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn, "/foo")); FilterImpl filter = createFilter("nt:base"); filter.setFullTextConstraint(exp); - return new IndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); + return new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); } - private IndexNode createSuggestionOrSpellcheckIndex(String nodeType, - boolean enableSuggestion, - boolean enableSpellcheck) throws Exception { + private LuceneIndexNode createSuggestionOrSpellcheckIndex(String nodeType, + boolean enableSuggestion, + boolean enableSpellcheck) throws Exception { NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); defn.setProperty(DECLARING_NODE_TYPES, nodeType); - defn = IndexDefinition.updateDefinition(defn.getNodeState().builder()); + defn = LuceneIndexDefinition.updateDefinition(defn.getNodeState().builder()); NodeBuilder foob = getNode(defn, "indexRules/" + nodeType + "/properties/foo"); - foob.setProperty(LuceneIndexConstants.PROP_ANALYZED, true); + foob.setProperty(FulltextIndexConstants.PROP_ANALYZED, true); if (enableSuggestion) { - foob.setProperty(LuceneIndexConstants.PROP_USE_IN_SUGGEST, true); + foob.setProperty(FulltextIndexConstants.PROP_USE_IN_SUGGEST, true); } if (enableSpellcheck) { - foob.setProperty(LuceneIndexConstants.PROP_USE_IN_SPELLCHECK, true); + foob.setProperty(FulltextIndexConstants.PROP_USE_IN_SPELLCHECK, true); } - IndexDefinition indexDefinition = new IndexDefinition(root, defn.getNodeState(), "/foo"); + LuceneIndexDefinition indexDefinition = new LuceneIndexDefinition(root, defn.getNodeState(), "/foo"); return createIndexNode(indexDefinition); } - private QueryIndex.IndexPlan getSuggestOrSpellcheckIndexPlan(IndexNode indexNode, String nodeType, + private QueryIndex.IndexPlan getSuggestOrSpellcheckIndexPlan(LuceneIndexNode indexNode, String nodeType, boolean forSugggestion) throws Exception { FilterImpl filter = createFilter(nodeType); filter.restrictProperty(indexNode.getDefinition().getFunctionName(), Operator.EQUAL, - PropertyValues.newString((forSugggestion?"suggest":"spellcheck") + "?term=foo")); - IndexPlanner planner = new IndexPlanner(indexNode, "/foo", filter, Collections.<OrderEntry>emptyList()); + PropertyValues.newString((forSugggestion?"suggest":"spellcheck") + "?term=foo")); + FulltextIndexPlanner planner = new FulltextIndexPlanner(indexNode, "/foo", filter, Collections.<OrderEntry>emptyList()); return planner.getPlan(); } @@ -1261,11 +1265,11 @@ public class IndexPlannerTest { public void noRestrictionWithSingleSortableField() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); defn.setProperty(createProperty(ORDERED_PROP_NAMES, of("foo"), STRINGS)); - IndexDefinition definition = new IndexDefinition(root, defn.getNodeState(), "/test"); - IndexNode node = createIndexNode(definition); - IndexPlanner planner = new IndexPlanner(node, "/test", createFilter("nt:base"), - ImmutableList.of(new OrderEntry("foo", Type.LONG, OrderEntry.Order.ASCENDING), - new OrderEntry("bar", Type.LONG, OrderEntry.Order.ASCENDING))); + LuceneIndexDefinition definition = new LuceneIndexDefinition(root, defn.getNodeState(), "/test"); + LuceneIndexNode node = createIndexNode(definition); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/test", createFilter("nt:base"), + ImmutableList.of(new OrderEntry("foo", Type.LONG, OrderEntry.Order.ASCENDING), + new OrderEntry("bar", Type.LONG, OrderEntry.Order.ASCENDING))); assertNotNull(planner.getPlan()); assertEquals(1, planner.getPlan().getEstimatedEntryCount()); @@ -1276,11 +1280,11 @@ public class IndexPlannerTest { public void noRestrictionWithTwoSortableFields() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo", "bar"), "async"); defn.setProperty(createProperty(ORDERED_PROP_NAMES, of("foo", "bar"), STRINGS)); - IndexDefinition definition = new IndexDefinition(root, defn.getNodeState(), "/test"); - IndexNode node = createIndexNode(definition); - IndexPlanner planner = new IndexPlanner(node, "/test", createFilter("nt:base"), - ImmutableList.of(new OrderEntry("foo", Type.LONG, OrderEntry.Order.ASCENDING), - new OrderEntry("bar", Type.LONG, OrderEntry.Order.ASCENDING))); + LuceneIndexDefinition definition = new LuceneIndexDefinition(root, defn.getNodeState(), "/test"); + LuceneIndexNode node = createIndexNode(definition); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/test", createFilter("nt:base"), + ImmutableList.of(new OrderEntry("foo", Type.LONG, OrderEntry.Order.ASCENDING), + new OrderEntry("bar", Type.LONG, OrderEntry.Order.ASCENDING))); assertNotNull(planner.getPlan()); assertEquals(1, planner.getPlan().getEstimatedEntryCount()); @@ -1292,16 +1296,16 @@ public class IndexPlannerTest { NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo", "foo1", "foo2"), "async"); long numOfDocs = IndexDefinition.DEFAULT_ENTRY_COUNT + 1000; - IndexDefinition idxDefn = new IndexDefinition(root, defn.getNodeState(), "/test"); + LuceneIndexDefinition idxDefn = new LuceneIndexDefinition(root, defn.getNodeState(), "/test"); Document doc = new Document(); doc.add(new StringField("foo1", "bar1", Field.Store.NO)); Directory sampleDirectory = createSampleDirectory(numOfDocs, doc); - IndexNode node = createIndexNode(idxDefn, sampleDirectory); + LuceneIndexNode node = createIndexNode(idxDefn, sampleDirectory); // Query on "foo" FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("bar")); - IndexPlanner planner = new IndexPlanner(node, "/test", filter, Collections.emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/test", filter, Collections.emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); assertEquals(documentsPerValue(numOfDocs), plan.getEstimatedEntryCount()); @@ -1311,14 +1315,14 @@ public class IndexPlannerTest { // Query on "foo" is not null filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.NOT_EQUAL, null); - planner = new IndexPlanner(node, "/test", filter, Collections.emptyList()); + planner = new FulltextIndexPlanner(node, "/test", filter, Collections.emptyList()); plan = planner.getPlan(); assertEquals(numOfDocs, plan.getEstimatedEntryCount()); // Query on "foo" like x filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.LIKE, PropertyValues.newString("bar%")); - planner = new IndexPlanner(node, "/test", filter, Collections.emptyList()); + planner = new FulltextIndexPlanner(node, "/test", filter, Collections.emptyList()); plan = planner.getPlan(); // weight of 3 assertEquals(numOfDocs / 3 + 1, plan.getEstimatedEntryCount()); @@ -1326,7 +1330,7 @@ public class IndexPlannerTest { // Query on "foo" > x filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.GREATER_OR_EQUAL, PropertyValues.newString("bar")); - planner = new IndexPlanner(node, "/test", filter, Collections.emptyList()); + planner = new FulltextIndexPlanner(node, "/test", filter, Collections.emptyList()); plan = planner.getPlan(); // weight of 3 assertEquals(numOfDocs / 3 + 1, plan.getEstimatedEntryCount()); @@ -1334,7 +1338,7 @@ public class IndexPlannerTest { // Query on "foo1" filter = createFilter("nt:base"); filter.restrictProperty("foo1", Operator.EQUAL, PropertyValues.newString("bar1")); - planner = new IndexPlanner(node, "/test", filter, Collections.emptyList()); + planner = new FulltextIndexPlanner(node, "/test", filter, Collections.emptyList()); plan = planner.getPlan(); assertEquals(1, plan.getEstimatedEntryCount()); @@ -1345,7 +1349,7 @@ public class IndexPlannerTest { filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("bar")); filter.restrictProperty("foo1", Operator.EQUAL, PropertyValues.newString("bar1")); - planner = new IndexPlanner(node, "/test", filter, Collections.emptyList()); + planner = new FulltextIndexPlanner(node, "/test", filter, Collections.emptyList()); plan = planner.getPlan(); assertEquals(1, plan.getEstimatedEntryCount()); @@ -1355,7 +1359,7 @@ public class IndexPlannerTest { filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("bar")); filter.restrictProperty("foo1", Operator.EQUAL, PropertyValues.newString("bar1")); filter.restrictProperty("foo2", Operator.EQUAL, PropertyValues.newString("bar2")); - planner = new IndexPlanner(node, "/test", filter, Collections.emptyList()); + planner = new FulltextIndexPlanner(node, "/test", filter, Collections.emptyList()); plan = planner.getPlan(); assertEquals(0, plan.getEstimatedEntryCount()); @@ -1366,9 +1370,9 @@ public class IndexPlannerTest { String indexPath = "/test"; IndexDefinitionBuilder idxBuilder = new IndexDefinitionBuilder(child(builder, indexPath)); idxBuilder.indexRule("nt:base").property("foo").propertyIndex().weight(500) - .enclosingRule().property("foo1").propertyIndex().weight(20) - .enclosingRule().property("foo2").propertyIndex().weight(0) - .enclosingRule().property("foo3").propertyIndex() + .enclosingRule().property("foo1").propertyIndex().weight(20) + .enclosingRule().property("foo2").propertyIndex().weight(0) + .enclosingRule().property("foo3").propertyIndex() ; NodeState defn = idxBuilder.build(); @@ -1383,13 +1387,13 @@ public class IndexPlannerTest { doc.add(new StringField("foo2", "bar2", Field.Store.NO)); docs.add(doc); Directory sampleDirectory = createSampleDirectory(1000, docs); - IndexDefinition idxDefn = new IndexDefinition(root, defn, indexPath); - IndexNode node = createIndexNode(idxDefn, sampleDirectory); + LuceneIndexDefinition idxDefn = new LuceneIndexDefinition(root, defn, indexPath); + LuceneIndexNode node = createIndexNode(idxDefn, sampleDirectory); // Query on "foo" FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("bar")); - IndexPlanner planner = new IndexPlanner(node, indexPath, filter, Collections.emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, indexPath, filter, Collections.emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); //scale down 1000 by 500 = 2 @@ -1398,7 +1402,7 @@ public class IndexPlannerTest { // Query on "foo1" filter = createFilter("nt:base"); filter.restrictProperty("foo1", Operator.EQUAL, PropertyValues.newString("bar")); - planner = new IndexPlanner(node, indexPath, filter, Collections.emptyList()); + planner = new FulltextIndexPlanner(node, indexPath, filter, Collections.emptyList()); plan = planner.getPlan(); //scale down 60 by 20 = 2 @@ -1408,7 +1412,7 @@ public class IndexPlannerTest { filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("bar")); filter.restrictProperty("foo1", Operator.EQUAL, PropertyValues.newString("bar")); - planner = new IndexPlanner(node, indexPath, filter, Collections.emptyList()); + planner = new FulltextIndexPlanner(node, indexPath, filter, Collections.emptyList()); plan = planner.getPlan(); //min(2, 3) @@ -1418,7 +1422,7 @@ public class IndexPlannerTest { filter = createFilter("nt:base"); filter.restrictProperty("foo1", Operator.EQUAL, PropertyValues.newString("bar")); filter.restrictProperty("foo2", Operator.EQUAL, PropertyValues.newString("bar")); - planner = new IndexPlanner(node, indexPath, filter, Collections.emptyList()); + planner = new FulltextIndexPlanner(node, indexPath, filter, Collections.emptyList()); plan = planner.getPlan(); //don't scale down 1 by 0 (foo1 would estimate 3) @@ -1428,7 +1432,7 @@ public class IndexPlannerTest { filter = createFilter("nt:base"); filter.restrictProperty("foo1", Operator.EQUAL, PropertyValues.newString("bar")); filter.restrictProperty("foo3", Operator.EQUAL, PropertyValues.newString("bar")); - planner = new IndexPlanner(node, indexPath, filter, Collections.emptyList()); + planner = new FulltextIndexPlanner(node, indexPath, filter, Collections.emptyList()); plan = planner.getPlan(); //min(0, 3) @@ -1440,7 +1444,7 @@ public class IndexPlannerTest { String indexPath = "/test"; IndexDefinitionBuilder idxBuilder = new IndexDefinitionBuilder(child(builder, indexPath)); idxBuilder.indexRule("nt:base").property("foo").propertyIndex() - .enclosingRule().property("bar", "bar.*", true).propertyIndex().weight(20) + .enclosingRule().property("bar", "bar.*", true).propertyIndex().weight(20) ; NodeState defn = idxBuilder.build(); @@ -1457,13 +1461,13 @@ public class IndexPlannerTest { docs.add(doc); } Directory sampleDirectory = createSampleDirectory(1000, docs); - IndexDefinition idxDefn = new IndexDefinition(root, defn, indexPath); - IndexNode node = createIndexNode(idxDefn, sampleDirectory); + LuceneIndexDefinition idxDefn = new LuceneIndexDefinition(root, defn, indexPath); + LuceneIndexNode node = createIndexNode(idxDefn, sampleDirectory); // Query on and "bar1" FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("bar1", Operator.EQUAL, PropertyValues.newString("foo1")); - IndexPlanner planner = new IndexPlanner(node, indexPath, filter, Collections.emptyList()); + FulltextIndexPlanner planner = new FulltextIndexPlanner(node, indexPath, filter, Collections.emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); //scale down 60 by 20 = 3 @@ -1473,7 +1477,7 @@ public class IndexPlannerTest { filter = createFilter("nt:base"); filter.restrictProperty("bar1", Operator.EQUAL, PropertyValues.newString("foo1")); filter.restrictProperty("bar2", Operator.EQUAL, PropertyValues.newString("foo2")); - planner = new IndexPlanner(node, indexPath, filter, Collections.emptyList()); + planner = new FulltextIndexPlanner(node, indexPath, filter, Collections.emptyList()); plan = planner.getPlan(); //min(3, 2) @@ -1485,7 +1489,7 @@ public class IndexPlannerTest { String indexPath = "/test"; IndexDefinitionBuilder idxBuilder = new IndexDefinitionBuilder(child(builder, indexPath)); idxBuilder.indexRule("nt:base").property("foo").propertyIndex().weight(Integer.MAX_VALUE/2) - .enclosingRule().property("foo1").propertyIndex() + .enclosingRule().property("foo1").propertyIndex() ; NodeState defn = idxBuilder.build(); @@ -1497,13 +1501,13 @@ public class IndexPlannerTest { docs.add(doc); }
[... 324 lines stripped ...]