You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-issues@jackrabbit.apache.org by "Volker Schmidt (JIRA)" <ji...@apache.org> on 2017/01/13 12:12:26 UTC

[jira] [Created] (OAK-5449) Cost calculation for one matching property restriction/sorting results in selection of wrong index

Volker Schmidt created OAK-5449:
-----------------------------------

             Summary: Cost calculation for one matching property restriction/sorting results in selection of wrong index
                 Key: OAK-5449
                 URL: https://issues.apache.org/jira/browse/OAK-5449
             Project: Jackrabbit Oak
          Issue Type: Bug
          Components: lucene
    Affects Versions: 1.4.10
            Reporter: Volker Schmidt


The method IndexPlanner.getPlanBuilder() for Lucene indexes contains at the end an algorithm that calculates a costPerEntryFactory. If there is no restriction property or sort property the factory will be the same like for one restriction property or sort property. 

If there are two indexes for which the cost is calculated, the cost must not be the same. E.g. if there is a large result set that can be sorted with one index but not with the other index, the index that supports sorting should be used.

The following code snippet:

if (costPerEntryFactor == 0) {
  costPerEntryFactor = 1;
}

should be changed to something like this (assuming costPerEntryFactor will be changed to double value and will be rounded after division at the end of the method):

if (costPerEntryFactor == 1.0) {
  // one matching restriction or sort property
  costPerEntryFactor = 1.5;
}
else if (costPerEntryFactor == 0.0) {
  // no matching restriction or sort property
  costPerEntryFactor = 1.0;
}

Furthermore, since the found indexes are stored in a hashed collection, the order of the index evaluation and the resulting index (when cost is the same for more than one lucene based index) is non deterministic. This increases the issue with the code above.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)