示例#1
0
 internal static ScoreDocComparator GetCachedComparator(IndexReader reader, System.String field, int type, Mono.Lucene.Net.Search.Parser parser, System.Globalization.CultureInfo locale, SortComparatorSource factory)
 {
     if (type == SortField.DOC)
     {
         return(Mono.Lucene.Net.Search.ScoreDocComparator_Fields.INDEXORDER);
     }
     if (type == SortField.SCORE)
     {
         return(Mono.Lucene.Net.Search.ScoreDocComparator_Fields.RELEVANCE);
     }
     FieldCacheImpl.Entry entry = (factory != null)?new FieldCacheImpl.Entry(field, factory):((parser != null)?new FieldCacheImpl.Entry(field, type, parser):new FieldCacheImpl.Entry(field, type, locale));
     return((ScoreDocComparator)Comparators.Get(reader, entry));
 }
示例#2
0
            protected internal override System.Object CreateValue(IndexReader reader, FieldCacheImpl.Entry entryKey)
            {
                FieldCacheImpl.Entry entry     = (FieldCacheImpl.Entry)entryKey;
                System.String        fieldname = entry.field;
                int type = entry.type;

                System.Globalization.CultureInfo locale  = entry.locale;
                Mono.Lucene.Net.Search.Parser    parser  = null;
                SortComparatorSource             factory = null;

                if (entry.custom is SortComparatorSource)
                {
                    factory = (SortComparatorSource)entry.custom;
                }
                else
                {
                    parser = (Mono.Lucene.Net.Search.Parser)entry.custom;
                }
                ScoreDocComparator comparator;

                switch (type)
                {
                case SortField.AUTO:
                    comparator = Mono.Lucene.Net.Search.FieldSortedHitQueue.ComparatorAuto(reader, fieldname);
                    break;

                case SortField.INT:
                    comparator = Mono.Lucene.Net.Search.FieldSortedHitQueue.comparatorInt(reader, fieldname, (Mono.Lucene.Net.Search.IntParser)parser);
                    break;

                case SortField.FLOAT:
                    comparator = Mono.Lucene.Net.Search.FieldSortedHitQueue.comparatorFloat(reader, fieldname, (Mono.Lucene.Net.Search.FloatParser)parser);
                    break;

                case SortField.LONG:
                    comparator = Mono.Lucene.Net.Search.FieldSortedHitQueue.comparatorLong(reader, fieldname, (Mono.Lucene.Net.Search.LongParser)parser);
                    break;

                case SortField.DOUBLE:
                    comparator = Mono.Lucene.Net.Search.FieldSortedHitQueue.comparatorDouble(reader, fieldname, (Mono.Lucene.Net.Search.DoubleParser)parser);
                    break;

                case SortField.SHORT:
                    comparator = Mono.Lucene.Net.Search.FieldSortedHitQueue.comparatorShort(reader, fieldname, (Mono.Lucene.Net.Search.ShortParser)parser);
                    break;

                case SortField.BYTE:
                    comparator = Mono.Lucene.Net.Search.FieldSortedHitQueue.comparatorByte(reader, fieldname, (Mono.Lucene.Net.Search.ByteParser)parser);
                    break;

                case SortField.STRING:
                    if (locale != null)
                    {
                        comparator = Mono.Lucene.Net.Search.FieldSortedHitQueue.comparatorStringLocale(reader, fieldname, locale);
                    }
                    else
                    {
                        comparator = Mono.Lucene.Net.Search.FieldSortedHitQueue.comparatorString(reader, fieldname);
                    }
                    break;

                case SortField.CUSTOM:
                    comparator = factory.NewComparator(reader, fieldname);
                    break;

                default:
                    throw new System.SystemException("unknown field type: " + type);
                }
                return(comparator);
            }