jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alexander Klimetschek (JIRA)" <j...@apache.org>
Subject [jira] Updated: (JCR-2906) Multivalued property sorted by last/random value
Date Tue, 01 Mar 2011 17:58:36 GMT

     [ https://issues.apache.org/jira/browse/JCR-2906?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel

Alexander Klimetschek updated JCR-2906:

    Issue Type: Improvement  (was: Bug)
       Summary: Multivalued property sorted by last/random value  (was: Multivalued property
sorted incorrectly)

> which is not expected order (expected same order as they were entered ...)

But when you specify "order by @MyProperty ascending" you explicitly want to order by the
property, not the document order.

AFAICS the JCR 1.0 and 2.0 spec don't define any behavior for comparing single-value properties
to multi-value ones (or mv to mv), so I think the repository implementation is free to chose
the most efficient one. Hence this is not a bug.

Also, it is not clear how to define an ordering upon multi-value properties at all: Compare
against the concatenation of the string representations of all the values in the property?
Or compare against the first value?

> Multivalued property sorted by last/random value
> ------------------------------------------------
>                 Key: JCR-2906
>                 URL: https://issues.apache.org/jira/browse/JCR-2906
>             Project: Jackrabbit Content Repository
>          Issue Type: Improvement
>          Components: jackrabbit-core
>    Affects Versions: 2.2.0
>         Environment: Windows 7, Sun JDK 1.6.0_23
>            Reporter: Paul Lysak
>              Labels: multivalued, sort
> Sorting on multivalued property may produce incorrect result because sorting is performed
only by last value of multivalued property.
> Steps to reproduce:
> 1. Create multivalued field in repository. Example from nodetypes file:
> <propertyDefinition name="MyProperty" requiredType="String" autoCreated="false" mandatory="false"
>    onParentVersion="COPY" protected="false" multiple="false">
> 2. Create few records so that all records except one would contain single value for MyProperty
and one record would contain 
> first value which is greater then of any other record and the second value is somewhere
in the middle. Here is an example:
> 1st record: "aaaa"
> 2nd record: "cccc"
> 3rd record: "dddd", "bbbb"
> 3. Run some query which sorts Example of XPath query:
> //*[...here are some criteria...] order by @MyProperty ascending
> The query would return documents in such order:
> "aaaa"
> "dddd", "bbbb"
> "cccc"
> which is not expected order (expected same order as they were entered - as "aaaa" <
"cccc", "cccc" < "dddd")
> After some digging I found out that it happens because method 
> org.apache.jackrabbit.core.query.lucene.SharedFieldCache.getValueIndex
> (called from org.apache.jackrabbit.core.query.lucene.SharedFieldSortComparator.SimpleScoreDocComparator
> returns only last Comparable of the document. Here is overwrites previous value:
> retArray[termDocs.doc()] = getValue(value, type);
> I tried to concatenate comparables (just to check if it would work for my case):
> 	if(retArray[termDocs.doc()] == null) {
> 		retArray[termDocs.doc()] = getValue(value, type);
> 	} else {
> 		retArray[termDocs.doc()] =
> 				retArray[termDocs.doc()] + " " + getValue(value, type);
> 	}
> But it didn't worked well either - TermEnum returns terms not in the same order as JackRabbit
returns values of multivalued field
> (as an example ["qwer", "asdf"] may become ["asdf", "qwer"] ). So, simple concatenation
doesn't help.

This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira


View raw message