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 "Chetan Mehrotra (JIRA)" <ji...@apache.org> on 2014/11/21 07:36:33 UTC

[jira] [Created] (OAK-2283) Fix inconsistent handling of includedPropertyTypes

Chetan Mehrotra created OAK-2283:
------------------------------------

             Summary: Fix inconsistent handling of includedPropertyTypes
                 Key: OAK-2283
                 URL: https://issues.apache.org/jira/browse/OAK-2283
             Project: Jackrabbit Oak
          Issue Type: Sub-task
          Components: oak-lucene
            Reporter: Chetan Mehrotra
            Assignee: Chetan Mehrotra
            Priority: Minor
             Fix For: 1.2


Oak Lucene supports {{includePropertyTypes}} property which determines which all property types should be indexed. Its an array property whose would would be the names as defined in {{javax.jcr.PropertyType}}

Current indexing logic has some inconsistent behaviour for default case when no explicit value is specified for this property. The propertyType restriction should support following cases

# If no explicit propertyType is defined then all types should be included
# It should be possible to define property type at property definition level also so as to distinguish properties based on type which share same name

*Details*
On indexing side [LuceneIndexEditor|https://svn.apache.org/repos/asf/jackrabbit/oak/tags/jackrabbit-oak-1.0.8/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java] has following logic to determine if a property is to be included or not

{code}
 if(context.isFullTextEnabled()
                        && (context.getPropertyTypes() & (1 << property.getType()
                        .tag())) == 0){
                    continue;
                }
{code}

The default value for {{propertyTypes}} is -1 as per [2]

{code}
 PropertyState pst = defn.getProperty(INCLUDE_PROPERTY_TYPES);
        if (pst != null) {
            int types = 0;
            for (String inc : pst.getValue(Type.STRINGS)) {
                try {
                    types |= 1 << PropertyType.valueFromName(inc);
                } catch (IllegalArgumentException e) {
                    log.warn("Unknown property type: " + inc);
                }
            }
            this.propertyTypes = types;
        } else {
            this.propertyTypes = -1;
        }
{code}

Due to this in default case all properties would be indexed if no explicit value is set

However on query side the inclusion rule uses following logic. Due to which per default config a value of -1 indicates that none of properties would be considered to be included

{code:java}
    boolean includePropertyType(int type){
        if(propertyTypes < 0){
            return false;
        }
        return (propertyTypes & (1 << type)) != 0;
    }
{code}

[2] https://svn.apache.org/repos/asf/jackrabbit/oak/tags/jackrabbit-oak-1.0.8/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java



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