@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(); }
private static void addNonFullTextConstraints(List<Query> qs, IndexPlan plan, IndexReader reader) { Filter filter = plan.getFilter(); PlanResult planResult = getPlanResult(plan); IndexDefinition defn = planResult.indexDefinition;
@Override public Cursor query(final IndexPlan plan, final NodeState root) { Cursor cursor; try { Filter filter = plan.getFilter(); final Set<String> relPaths = filter.getFullTextConstraint() != null ? getRelativePaths(filter.getFullTextConstraint()) : Collections.<String>emptySet(); final String parent = relPaths.size() == 0 ? "" : relPaths.iterator().next(); final int parentDepth = getDepth(parent); String path = plan.getPlanName(); OakSolrConfiguration configuration = getConfiguration(path, root); SolrClient solrServer = getServer(path, root); LMSEstimator estimator = getEstimator(path); AbstractIterator<SolrResultRow> iterator = getIterator(filter, plan, parent, parentDepth, configuration, solrServer, estimator); cursor = new SolrRowCursor(iterator, plan, filter.getQueryLimits(), estimator, solrServer, configuration); } catch (Exception e) { throw new RuntimeException(e); } return cursor; }
@Override public Cursor query(final IndexPlan plan, NodeState rootState) { if (plan.isDeprecated()) { LOG.warn("This index is deprecated: {}; it is used for query {}. " + "Please change the query or the index definitions.", plan.getPlanName(), plan.getFilter()); final Filter filter = plan.getFilter(); final Sort sort = getSort(plan); final PlanResult pr = getPlanResult(plan);
@Override public Cursor query(final IndexPlan plan, NodeState rootState) { if (plan.isDeprecated()) { LOG.warn("This index is deprecated: {}; it is used for query {}. " + "Please change the query or the index definitions.", plan.getPlanName(), plan.getFilter()); final Filter filter = plan.getFilter(); final Sort sort = getSort(plan); final PlanResult pr = getPlanResult(plan);
if (plan != null && plan.getSortOrder() != null) { List<QueryIndex.OrderEntry> sortOrder = plan.getSortOrder(); for (QueryIndex.OrderEntry orderEntry : sortOrder) { SolrQuery.ORDER order; Filter.PathRestriction pathRestriction = filter.getPathRestriction(); if (pathRestriction != null) { String path = purgePath(filter, plan.getPathPrefix()); String fieldName = configuration.getFieldForPathRestriction(pathRestriction); if (fieldName != null) {
@Override public Cursor query(final IndexPlan plan, NodeState rootState) { if (plan.isDeprecated()) { LOG.warn("This index is deprecated: {}; it is used for query {}. " + "Please change the query or the index definitions.", plan.getPlanName(), plan.getFilter()); final Filter filter = plan.getFilter(); FullTextExpression ft = filter.getFullTextConstraint(); final Set<String> relPaths = getRelativePaths(ft);
@Override public Cursor query(final IndexPlan plan, NodeState rootState) { if (plan.isDeprecated()) { LOG.warn("This index is deprecated: {}; it is used for query {}. " + "Please change the query or the index definitions.", plan.getPlanName(), plan.getFilter()); final Filter filter = plan.getFilter(); FullTextExpression ft = filter.getFullTextConstraint(); final Set<String> relPaths = getRelativePaths(ft);
if (plan != null && plan.getSortOrder() != null) { List<QueryIndex.OrderEntry> sortOrder = plan.getSortOrder(); for (QueryIndex.OrderEntry orderEntry : sortOrder) { SolrQuery.ORDER order; Filter.PathRestriction pathRestriction = filter.getPathRestriction(); if (pathRestriction != null) { String path = purgePath(filter, plan.getPathPrefix()); String fieldName = configuration.getFieldForPathRestriction(pathRestriction); if (fieldName != null) {
LuceneIndexNode indexNode = tracker.acquireIndexNode((String) plan.getAttribute(ATTR_INDEX_PATH)); checkState(indexNode != null); try {
LuceneIndexNode indexNode = tracker.acquireIndexNode((String) plan.getAttribute(ATTR_INDEX_PATH)); checkState(indexNode != null); try {
for (IndexPlan p : ipList) { long entryCount = p.getEstimatedEntryCount(); if (p.getSupportsPathRestriction()) { entryCount = scaleEntryCount(rootState, filter, entryCount); if (sortOrder == null || p.getSortOrder() != null) { double c = p.getCostPerExecution() + entryCount * p.getCostPerEntry(); String msg = String.format("cost for [%s] of type (%s) with plan [%s] is %1.2f", p.getPlanName(), indexName, plan, c); logDebug(msg); if (indexPlan != null && indexPlan.getPlanName() != null) { indexName += "[" + indexPlan.getPlanName() + "]";
FulltextQueryTermsProvider augmentor = getIndexAgumentor(plan, augmentorFactory); List<Query> qs = new ArrayList<Query>(); Filter filter = plan.getFilter(); FullTextExpression ft = filter.getFullTextConstraint(); PlanResult planResult = getPlanResult(plan); && plan.getSortOrder() != null) { List<OrderEntry> orders = removeNativeSort(plan.getSortOrder()); for (int i = 0; i < orders.size(); i++) { OrderEntry oe = orders.get(i);
FulltextQueryTermsProvider augmentor = getIndexAgumentor(plan, augmentorFactory); List<Query> qs = new ArrayList<Query>(); Filter filter = plan.getFilter(); FullTextExpression ft = filter.getFullTextConstraint(); PlanResult planResult = getPlanResult(plan); && plan.getSortOrder() != null) { List<OrderEntry> orders = removeNativeSort(plan.getSortOrder()); for (int i = 0; i < orders.size(); i++) { OrderEntry oe = orders.get(i);
for (IndexPlan p : ipList) { long entryCount = p.getEstimatedEntryCount(); if (p.getSupportsPathRestriction()) { entryCount = scaleEntryCount(rootState, filter, entryCount); if (sortOrder == null || p.getSortOrder() != null) { double c = p.getCostPerExecution() + entryCount * p.getCostPerEntry(); String msg = String.format("cost for [%s] of type (%s) with plan [%s] is %1.2f", p.getPlanName(), indexName, plan, c); logDebug(msg); if (indexPlan != null && indexPlan.getPlanName() != null) { indexName += "[" + indexPlan.getPlanName() + "]";
for (IndexPlan p : ipList) { long entryCount = p.getEstimatedEntryCount(); if (p.getSupportsPathRestriction()) { entryCount = scaleEntryCount(rootState, filter, entryCount); if (sortOrder == null || p.getSortOrder() != null) { double c = p.getCostPerExecution() + entryCount * p.getCostPerEntry(); String msg = String.format("cost for [%s] of type (%s) with plan [%s] is %1.2f", p.getPlanName(), indexName, plan, c); logDebug(msg); if (indexPlan != null && indexPlan.getPlanName() != null) { indexName += "[" + indexPlan.getPlanName() + "]";
private static void addNonFullTextConstraints(List<Query> qs, IndexPlan plan, IndexReader reader) { Filter filter = plan.getFilter(); PlanResult planResult = getPlanResult(plan); IndexDefinition defn = planResult.indexDefinition;
assertEquals(2, plan.getEstimatedEntryCount()); assertEquals(3, plan.getEstimatedEntryCount()); assertEquals(2, plan.getEstimatedEntryCount()); assertEquals(1, plan.getEstimatedEntryCount()); assertEquals(0, plan.getEstimatedEntryCount());
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);
QueryIndex.IndexPlan plan = planner.getPlan(); assertEquals(documentsPerValue(numOfDocs), plan.getEstimatedEntryCount()); assertEquals(1.0, plan.getCostPerExecution(), 0); assertEquals(1.0, plan.getCostPerEntry(), 0); planner = new FulltextIndexPlanner(node, "/test", filter, Collections.emptyList()); plan = planner.getPlan(); assertEquals(numOfDocs, plan.getEstimatedEntryCount()); plan = planner.getPlan(); assertEquals(numOfDocs / 3 + 1, plan.getEstimatedEntryCount()); plan = planner.getPlan(); assertEquals(numOfDocs / 3 + 1, plan.getEstimatedEntryCount()); plan = planner.getPlan(); assertEquals(1, plan.getEstimatedEntryCount()); assertEquals(1.0, plan.getCostPerExecution(), 0); assertEquals(1.0, plan.getCostPerEntry(), 0); assertEquals(1, plan.getEstimatedEntryCount()); assertEquals(0, plan.getEstimatedEntryCount());