[ https://issues.apache.org/jira/browse/JCR-2906?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13156785#comment-13156785 ] Michael Dürig commented on JCR-2906: ------------------------------------ Ok works now: all core tests pass. Do we know about the impact on query performance? All this array creation and compacting. It seems to me this might happen quite a lot for nodes with a lot of indexed properties. > 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: indexing > Affects Versions: 2.2 > Environment: Windows 7, Sun JDK 1.6.0_23 > Reporter: Paul Lysak > Labels: multivalued, sort > Attachments: JCR-2906-SharedFieldCache.patch, JCR-2906-v2.patch, JCR-2906.patch > > > 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: > 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 constructor) > 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. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira