You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jackrabbit.apache.org by "Alex Parvulescu (Issue Comment Edited) (JIRA)" <ji...@apache.org> on 2011/11/24 16:46:40 UTC
[jira] [Issue Comment Edited] (JCR-2906) Multivalued property
sorted by last/random value
[ https://issues.apache.org/jira/browse/JCR-2906?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13156759#comment-13156759 ]
Alex Parvulescu edited comment on JCR-2906 at 11/24/11 3:46 PM:
----------------------------------------------------------------
ouch, good catch!
the position is from the current doc, but it takes into account other properties as well. I missed that completely.
So if a node has a property "p1" and a property "text", the "text"'s position can be 1 (0-based) as well. I was under the (poor) impression that running a term search on "text" would convey just term specific info (not document specific positioning info).
The fix would be to just add a 'shrink' method after building the array to remove the null values from the beginning of the array.
When dealing with MVP I'm pretty sure they are a contiguous interval within the index, even if with a tiny offset.
was (Author: alex.parvulescu):
ouch, good catch!
the position is from the current doc, but it takes into account other properties as well. I missed that completely.
So if a node has a property "p1" and a property "text", the "text"'s position can be 1 0 based) as well. I was under the (poor) impression that running a term search would convey just term specific info (not document specific positioning info).
The fix would be to just add a 'shrink' method after building the array to remove the null values from the beginning of the array.
When dealing with MVP I'm pretty sure they are contiguous, even if with a tiny offset.
> 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:
> <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 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