[ 
http://issues.apache.org/jira/browse/LUCENE-526?page=comments#action_12371341 ] 

Yonik Seeley commented on LUCENE-526:
-------------------------------------

Thanks for looking into this Paul!
A quick pointer... a Multisearcher uses different sorting code than an 
IndexSearcher.  IIRC, MultiSearcher uses FieldDocSortedHitQueue and an 
IndexSearcher uses FieldSortedHitQueue.

It wouldn't be the first time that a bug was fixed in one but forgotten about 
in the other.

> FieldSortedHitQueue - subsequent String sorts with different locales sort 
> identically
> -------------------------------------------------------------------------------------
>
>          Key: LUCENE-526
>          URL: http://issues.apache.org/jira/browse/LUCENE-526
>      Project: Lucene - Java
>         Type: Bug
>   Components: Search
>     Versions: 1.9
>     Reporter: Paul Cowan
>  Attachments: LUCENE-526-b.txt, LUCENE-526-c.txt, LUCENE-526.txt
>
> From my own post to the java-user list. I have looked into this further and 
> am sure it's a bug.
> ---
> It seems to me that there's a possible bug in FieldSortedHitQueue, 
> specifically in getCachedComparator(). This is showing up on our 1.4.3 
> install, but it seems from source code inspection that if it's a bug, it's in 
> 1.9.1 also.
> The issue shows up when you need to sort results from a given IndexReader 
> multiple times, using different locales. On line 180 (all line numbers from 
> the 1.9.1 code), we have this:
> ScoreDocComparator comparator = lookup (reader, fieldname, type, factory);
> Then, if no comparator is found in the cache, a new one is created (line 193) 
> and then stored in the cache (line 202). HOWEVER, both the cache lookup() and 
> store() do NOT take into account locale; if we, on the same index reader, try 
> to do one search sorted by Locale.FRENCH and one by Locale.ITALIAN, the first 
> one will result in a cache miss, a new French comparator will be created, and 
> stored in the cache. Second time through, lookup() finds the cached French 
> comparator -- even though this time, the locale parameter to 
> getCachedComparator() is an Italian locale. Therefore, we don't create a new 
> comparator and we use the wrong one to sort the results.
> It looks to me (unless I'm mistaken) that the FieldCacheImpl.Entry class 
> should have an additional property, .locale, to ensure that different locales 
> get different comparators.
> ---
> Patch (well, most of one) to follow immediately.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to