On Jun 30, 2008, at 8:08 PM, Paul J. Lucas wrote:

On Jun 30, 2008, at 8:55 PM, Paul J. Lucas wrote:
If I have a SortField with a type of STRING, is there any way to sort in a case-insensitive manner?

Couldn't I also use a custom SortComparator?

OK, so I tried that by doing:

        SortField sortField = new SortField(
            sortFieldName,
            new CaseInsensitiveStringSortComparator(), descending
        );

where CaseInsensitiveStringSortComparator is:

        class CaseInsensitiveStringSortComparator extends SortComparator {
            public Comparable getComparable( String termText ) {
                return new CaseInsensitiveStringComparable( termText );
            }
        }

and CaseInsensitiveStringComparable is:

        public class CaseInsensitiveStringComparable implements Comparable {
        
            public CaseInsensitiveStringComparable( String s ) {
                m_string = s.toLowerCase();
            }
        
            public int compareTo( Object o ) {
                final String s;
                if ( o instanceof CaseInsensitiveStringComparable )
                    s = ((CaseInsensitiveStringComparable)o).m_string;
                else if ( o instanceof String )
                    s = ((String)o).toLowerCase();
                else
                    throw new ClassCastException();
                return m_string.compareTo( s );
            }
        
            public boolean equals( Object o ) {
                if ( !(o instanceof CaseInsensitiveStringComparable ) )
                    return false;
                final CaseInsensitiveStringComparable c =
                    (CaseInsensitiveStringComparable)o;
                return m_string.equals( c.m_string );
            }
        
            public int hashCode() {
                return m_string.hashCode();
            }
        
            private final String m_string;
        }

But when my code runs, I get a NullPointerException in Lucene's SortComparator,
line 54 which reads:

        return cachedValues[i.doc].compareTo (cachedValues[j.doc]);

because cachedCalues[i.doc] is null.  But why is it null?

- Paul

P.S.: Im using Lucene 2.3.2.

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

Reply via email to