@Override public double getCostPerExecution() { double cost = 0; for (IndexPlan p : basePlans.values()) { if (p != null) { cost += p.getCostPerExecution(); } } return cost; }
@Override public String getIndexCostInfo(NodeState rootState) { StringBuilder buff = new StringBuilder(); buff.append(quoteJson(selectorName)).append(": "); QueryIndex index = getIndex(); if (index != null) { if (index instanceof AdvancedQueryIndex) { IndexPlan p = plan.getIndexPlan(); buff.append("{ perEntry: ").append(p.getCostPerEntry()); buff.append(", perExecution: ").append(p.getCostPerExecution()); buff.append(", count: ").append(p.getEstimatedEntryCount()); buff.append(" }"); } else { buff.append(index.getCost(createFilter(true), rootState)); } } return buff.toString(); }
@Override public double getCostPerExecution() { double cost = 0; for (IndexPlan p : basePlans.values()) { if (p != null) { cost += p.getCostPerExecution(); } } return cost; }
double c = p.getCostPerExecution() + entryCount * p.getCostPerEntry();
double c = p.getCostPerExecution() + entryCount * p.getCostPerEntry();
double c = p.getCostPerExecution() + entryCount * p.getCostPerEntry();
assertEquals(1.0, plan.getCostPerExecution(), 0); assertEquals(1.0, plan.getCostPerEntry(), 0); assertEquals(1.0, plan.getCostPerExecution(), 0); assertEquals(1.0, plan.getCostPerEntry(), 0);
LucenePropertyIndex luceneIndex = new LucenePropertyIndex(tracker); IndexPlan plan = luceneIndex.getPlans(f, null, root).iterator().next(); assertTrue(plan.getCostPerExecution() != Double.POSITIVE_INFINITY); ListAppender<ILoggingEvent> appender = createAndRegisterAppender(); luceneIndex.query(plan, root); luceneIndex = new LucenePropertyIndex(tracker); plan = luceneIndex.getPlans(f, null, root).iterator().next(); assertTrue(plan.getCostPerExecution() != Double.POSITIVE_INFINITY); luceneIndex.query(plan, root); luceneIndex = new LucenePropertyIndex(tracker); plan = luceneIndex.getPlans(f, null, root).iterator().next(); assertTrue(plan.getCostPerExecution() != Double.POSITIVE_INFINITY); luceneIndex.query(plan, root);
double costPerEntry = p.getCostPerEntry(); assertTrue(costPerEntry >= 0); double costPerExecution = p.getCostPerExecution(); assertTrue(costPerExecution >= 0); long estimatedEntryCount = p.getEstimatedEntryCount(); assertTrue(estimatedEntryCount >= 0); double c = p.getCostPerExecution() + estimatedEntryCount * p.getCostPerEntry(); assertTrue(c >= 0);
LucenePropertyIndex luceneIndex = new LucenePropertyIndex(tracker); IndexPlan plan = luceneIndex.getPlans(f, null, root).iterator().next(); assertTrue(plan.getCostPerExecution() != Double.POSITIVE_INFINITY); assertEquals("/oak:index/foo", plan.getPlanName()); luceneIndex = new LucenePropertyIndex(tracker); plan = luceneIndex.getPlans(f, null, root).iterator().next(); assertTrue(plan.getCostPerExecution() != Double.POSITIVE_INFINITY); assertEquals("/oak:index/foo", plan.getPlanName());
assertEquals(1.0, plan.getCostPerExecution(), 0); assertEquals(1.0, plan.getCostPerEntry(), 0); assertEquals(1.0, plan.getCostPerExecution(), 0); assertEquals(1.0, plan.getCostPerEntry(), 0);
@Override public String getIndexCostInfo(NodeState rootState) { StringBuilder buff = new StringBuilder(); buff.append(quoteJson(selectorName)).append(": "); QueryIndex index = getIndex(); if (index != null) { if (index instanceof AdvancedQueryIndex) { IndexPlan p = plan.getIndexPlan(); buff.append("{ perEntry: ").append(p.getCostPerEntry()); buff.append(", perExecution: ").append(p.getCostPerExecution()); buff.append(", count: ").append(p.getEstimatedEntryCount()); buff.append(" }"); } else { buff.append(index.getCost(createFilter(true), rootState)); } } return buff.toString(); }
@Override public String getIndexCostInfo(NodeState rootState) { StringBuilder buff = new StringBuilder(); buff.append(quoteJson(selectorName)).append(": "); QueryIndex index = getIndex(); if (index != null) { if (index instanceof AdvancedQueryIndex) { IndexPlan p = plan.getIndexPlan(); buff.append("{ perEntry: ").append(p.getCostPerEntry()); buff.append(", perExecution: ").append(p.getCostPerExecution()); buff.append(", count: ").append(p.getEstimatedEntryCount()); buff.append(" }"); } else { buff.append(index.getCost(createFilter(true), rootState)); } } return buff.toString(); }
@Test public void propertyIndexCost() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); long numofDocs = IndexDefinition.DEFAULT_ENTRY_COUNT + 1000; 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")); 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 //less than numOfDoc then that would be preferred assertEquals(idxDefn.getEntryCount(), plan.getEstimatedEntryCount()); assertEquals(1.0, plan.getCostPerExecution(), 0); assertEquals(1.0, plan.getCostPerEntry(), 0); }
@Test public void propertyIndexCost2() throws Exception{ NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async"); defn.setProperty(FulltextIndexConstants.COST_PER_ENTRY, 2.0); defn.setProperty(FulltextIndexConstants.COST_PER_EXECUTION, 3.0); long numofDocs = IndexDefinition.DEFAULT_ENTRY_COUNT - 100; LuceneIndexNode node = createIndexNode(new LuceneIndexDefinition(root, defn.getNodeState(), "/foo"), numofDocs); FilterImpl filter = createFilter("nt:base"); filter.restrictProperty("foo", Operator.EQUAL, PropertyValues.newString("bar")); FulltextIndexPlanner planner = new FulltextIndexPlanner(node, "/foo", filter, Collections.<OrderEntry>emptyList()); QueryIndex.IndexPlan plan = planner.getPlan(); assertEquals(documentsPerValue(numofDocs), plan.getEstimatedEntryCount()); assertEquals(3.0, plan.getCostPerExecution(), 0); assertEquals(2.0, plan.getCostPerEntry(), 0); assertNotNull(plan); }
@Override public double getCostPerExecution() { double cost = 0; for (IndexPlan p : basePlans.values()) { if (p != null) { cost += p.getCostPerExecution(); } } return cost; }