Search in sources :

Example 6 with PropertyIndexResult

use of org.apache.jackrabbit.oak.plugins.index.lucene.IndexPlanner.PropertyIndexResult in project jackrabbit-oak by apache.

the class IndexPlannerTest method syncIndex_uniqueAndRelative.

@Test
public void syncIndex_uniqueAndRelative() throws Exception {
    IndexDefinitionBuilder defnb = new IndexDefinitionBuilder();
    defnb.indexRule("nt:base").property("foo").propertyIndex().unique();
    IndexDefinition defn = new IndexDefinition(root, defnb.build(), "/foo");
    IndexNode 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());
    QueryIndex.IndexPlan plan = planner.getPlan();
    assertNotNull(plan);
    assertEquals(1, plan.getEstimatedEntryCount());
    PropertyIndexResult hr = pr(plan).getPropertyIndexResult();
    assertNotNull(hr);
    assertEquals("foo", hr.propertyName);
    assertEquals("jcr:content/foo", hr.pr.propertyName);
}
Also used : FilterImpl(org.apache.jackrabbit.oak.query.index.FilterImpl) LuceneIndexHelper.newLucenePropertyIndexDefinition(org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexHelper.newLucenePropertyIndexDefinition) LuceneIndexHelper.newLuceneIndexDefinition(org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexHelper.newLuceneIndexDefinition) PropertyIndexResult(org.apache.jackrabbit.oak.plugins.index.lucene.IndexPlanner.PropertyIndexResult) IndexDefinitionBuilder(org.apache.jackrabbit.oak.plugins.index.lucene.util.IndexDefinitionBuilder) QueryIndex(org.apache.jackrabbit.oak.spi.query.QueryIndex) Test(org.junit.Test)

Example 7 with PropertyIndexResult

use of org.apache.jackrabbit.oak.plugins.index.lucene.IndexPlanner.PropertyIndexResult in project jackrabbit-oak by apache.

the class LucenePropertyIndex method addSyncIndexPlan.

private static void addSyncIndexPlan(IndexPlan plan, StringBuilder sb) {
    PlanResult pr = getPlanResult(plan);
    if (pr.hasPropertyIndexResult()) {
        PropertyIndexResult pres = pr.getPropertyIndexResult();
        sb.append(" sync:(").append(pres.propertyName);
        if (!pres.propertyName.equals(pres.pr.propertyName)) {
            sb.append("[").append(pres.pr.propertyName).append("]");
        }
        sb.append(" ").append(pres.pr);
        sb.append(")");
    }
    if (pr.evaluateSyncNodeTypeRestriction()) {
        sb.append(" sync:(nodeType");
        sb.append(" primaryTypes : ").append(plan.getFilter().getPrimaryTypes());
        sb.append(" mixinTypes : ").append(plan.getFilter().getMixinTypes());
        sb.append(")");
    }
}
Also used : PlanResult(org.apache.jackrabbit.oak.plugins.index.lucene.IndexPlanner.PlanResult) PropertyIndexResult(org.apache.jackrabbit.oak.plugins.index.lucene.IndexPlanner.PropertyIndexResult)

Example 8 with PropertyIndexResult

use of org.apache.jackrabbit.oak.plugins.index.lucene.IndexPlanner.PropertyIndexResult in project jackrabbit-oak by apache.

the class LucenePropertyIndex method mergePropertyIndexResult.

@SuppressWarnings("Guava")
private static Iterator<LuceneResultRow> mergePropertyIndexResult(IndexPlan plan, NodeState rootState, Iterator<LuceneResultRow> itr) {
    PlanResult pr = getPlanResult(plan);
    HybridPropertyIndexLookup lookup = new HybridPropertyIndexLookup(pr.indexPath, NodeStateUtils.getNode(rootState, pr.indexPath), plan.getPathPrefix(), false);
    PropertyIndexResult pir = pr.getPropertyIndexResult();
    FluentIterable<String> paths = null;
    if (pir != null) {
        Iterable<String> queryResult = lookup.query(plan.getFilter(), pir.propertyName, pir.pr);
        paths = FluentIterable.from(queryResult).transform(path -> pr.isPathTransformed() ? pr.transformPath(path) : path).filter(notNull());
    } else {
        // Either of property or nodetype should not be null
        checkState(pr.evaluateSyncNodeTypeRestriction());
        Filter filter = plan.getFilter();
        paths = FluentIterable.from(Iterables.concat(lookup.query(filter, JCR_PRIMARYTYPE, newName(filter.getPrimaryTypes())), lookup.query(filter, JCR_MIXINTYPES, newName(filter.getMixinTypes()))));
    }
    // No need for path restriction evaluation as thats taken care by PropertyIndex impl itself
    // via content mirror strategy
    FluentIterable<LuceneResultRow> propIndex = paths.transform(path -> new LuceneResultRow(path, 0, null, null, null));
    // Property index itr should come first
    return Iterators.concat(propIndex.iterator(), itr);
}
Also used : PlanResult(org.apache.jackrabbit.oak.plugins.index.lucene.IndexPlanner.PlanResult) PropertyIndexResult(org.apache.jackrabbit.oak.plugins.index.lucene.IndexPlanner.PropertyIndexResult) Filter(org.apache.jackrabbit.oak.spi.query.Filter) HybridPropertyIndexLookup(org.apache.jackrabbit.oak.plugins.index.lucene.property.HybridPropertyIndexLookup)

Aggregations

PropertyIndexResult (org.apache.jackrabbit.oak.plugins.index.lucene.IndexPlanner.PropertyIndexResult)8 IndexDefinitionBuilder (org.apache.jackrabbit.oak.plugins.index.lucene.util.IndexDefinitionBuilder)6 LuceneIndexHelper.newLuceneIndexDefinition (org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexHelper.newLuceneIndexDefinition)6 LuceneIndexHelper.newLucenePropertyIndexDefinition (org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexHelper.newLucenePropertyIndexDefinition)6 FilterImpl (org.apache.jackrabbit.oak.query.index.FilterImpl)6 QueryIndex (org.apache.jackrabbit.oak.spi.query.QueryIndex)6 Test (org.junit.Test)6 PlanResult (org.apache.jackrabbit.oak.plugins.index.lucene.IndexPlanner.PlanResult)2 OrderEntry (org.apache.jackrabbit.oak.spi.query.QueryIndex.OrderEntry)2 HybridPropertyIndexLookup (org.apache.jackrabbit.oak.plugins.index.lucene.property.HybridPropertyIndexLookup)1 Filter (org.apache.jackrabbit.oak.spi.query.Filter)1