protected internal override object CreateValue(IndexReader reader, object entryKey)
            {
                FieldCacheImpl.Entry entry     = (FieldCacheImpl.Entry)entryKey;
                System.String        fieldname = entry.field;
                int type = entry.type;

                System.Globalization.CultureInfo locale  = entry.locale;
                SortComparatorSource             factory = (SortComparatorSource)entry.custom;
                ScoreDocComparator comparator;

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

                case SortField.INT:
                    comparator = Lucene.Net.Search.FieldSortedHitQueue.ComparatorInt(reader, fieldname);
                    break;

                case SortField.FLOAT:
                    comparator = Lucene.Net.Search.FieldSortedHitQueue.ComparatorFloat(reader, fieldname);
                    break;

                case SortField.LONG:
                    comparator = Lucene.Net.Search.FieldSortedHitQueue.ComparatorLong(reader, fieldname);
                    break;

                case SortField.DOUBLE:
                    comparator = Lucene.Net.Search.FieldSortedHitQueue.ComparatorDouble(reader, fieldname);
                    break;

                case SortField.SHORT:
                    comparator = Lucene.Net.Search.FieldSortedHitQueue.ComparatorShort(reader, fieldname);
                    break;

                case SortField.BYTE:
                    comparator = Lucene.Net.Search.FieldSortedHitQueue.ComparatorByte(reader, fieldname);
                    break;

                case SortField.STRING:
                    if (locale != null)
                    {
                        comparator = Lucene.Net.Search.FieldSortedHitQueue.ComparatorStringLocale(reader, fieldname, locale);
                    }
                    else
                    {
                        comparator = 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);
            }
Example #2
0
 public SortField(System.String field, SortComparatorSource comparator, bool reverse)
 {
     InitFieldType(field, CUSTOM);
     SetUseLegacySearch(true);
     this.reverse = reverse;
     this.factory = comparator;
 }
Example #3
0
 /// <summary>Creates a sort, possibly in reverse, with a custom comparison function.</summary>
 /// <param name="field">Name of field to sort by; cannot be <code>null</code>.
 /// </param>
 /// <param name="comparator">Returns a comparator for sorting hits.
 /// </param>
 /// <param name="reverse">True if natural order should be reversed.
 /// </param>
 public SortField(System.String field, SortComparatorSource comparator, bool reverse)
 {
     this.field   = (field != null)?String.Intern(field):field;
     this.type    = CUSTOM;
     this.reverse = reverse;
     this.factory = comparator;
 }
Example #4
0
        /// <summary>
        /// Lucene.Net specific. Needed for deserialization
        /// </summary>
        /// <param name="info"></param>
        /// <param name="context"></param>
        protected SortField(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
        {
            //Should we add other fields as in NumericRangeQuery? {{DIGY}}

            type             = (int)info.GetValue("type", typeof(int));
            useLegacy        = (bool)info.GetValue("useLegacy", typeof(bool));
            reverse          = (bool)info.GetValue("reverse", typeof(bool));
            locale           = (System.Globalization.CultureInfo)info.GetValue("locale", typeof(System.Globalization.CultureInfo));
            comparatorSource = (FieldComparatorSource)info.GetValue("comparatorSource", typeof(FieldComparatorSource));
            factory          = (SortComparatorSource)info.GetValue("factory", typeof(FieldComparatorSource));
            parser           = (Parser)info.GetValue("parser", typeof(Parser));

            field = StringHelper.Intern((string)info.GetValue("field", typeof(string)));
        }
 internal static ScoreDocComparator GetCachedComparator(IndexReader reader, System.String field, int type, System.Globalization.CultureInfo locale, SortComparatorSource factory)
 {
     if (type == SortField.DOC)
     {
         return(Lucene.Net.Search.ScoreDocComparator_Fields.INDEXORDER);
     }
     if (type == SortField.SCORE)
     {
         return(Lucene.Net.Search.ScoreDocComparator_Fields.RELEVANCE);
     }
     FieldCacheImpl.Entry entry = (factory != null) ? new FieldCacheImpl.Entry(field, factory) : new FieldCacheImpl.Entry(field, type, locale);
     return((ScoreDocComparator)Comparators.Get(reader, entry));
 }
        internal static ScoreDocComparator GetCachedComparator(IndexReader reader, System.String fieldname, int type, System.Globalization.CultureInfo locale, SortComparatorSource factory)
        {
            if (type == SortField.DOC)
            {
                return(Lucene.Net.Search.ScoreDocComparator_Fields.INDEXORDER);
            }
            if (type == SortField.SCORE)
            {
                return(Lucene.Net.Search.ScoreDocComparator_Fields.RELEVANCE);
            }
            ScoreDocComparator comparator = Lookup(reader, fieldname, type, locale, factory);

            if (comparator == null)
            {
                switch (type)
                {
                case SortField.AUTO:
                    comparator = ComparatorAuto(reader, fieldname);
                    break;

                case SortField.INT:
                    comparator = ComparatorInt(reader, fieldname);
                    break;

                case SortField.FLOAT:
                    comparator = ComparatorFloat(reader, fieldname);
                    break;

                case SortField.STRING:
                    if (locale != null)
                    {
                        comparator = ComparatorStringLocale(reader, fieldname, locale);
                    }
                    else
                    {
                        comparator = ComparatorString(reader, fieldname);
                    }
                    break;

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

                default:
                    throw new System.SystemException("unknown field type: " + type);
                }
                Store(reader, fieldname, type, locale, factory, comparator);
            }
            return(comparator);
        }
Example #7
0
        /// <summary>
        /// Lucene.Net specific. Needed for deserialization
        /// </summary>
        /// <param name="info"></param>
        /// <param name="context"></param>
        protected SortField(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
        {
            //Should we add other fields as in NumericRangeQuery? {{DIGY}}

            type        = (int)info.GetValue("type", typeof(int));
            useLegacy   = (bool)info.GetValue("useLegacy", typeof(bool));
            reverse     = (bool)info.GetValue("reverse", typeof(bool));
            locale      = (System.Globalization.CultureInfo)info.GetValue("locale", typeof(System.Globalization.CultureInfo));
            comparatorSource = (FieldComparatorSource)info.GetValue("comparatorSource", typeof(FieldComparatorSource));
            factory          = (SortComparatorSource)info.GetValue("factory", typeof(FieldComparatorSource));
            parser           = (Parser)info.GetValue("parser", typeof(Parser));
                        
            field       = StringHelper.Intern((string)info.GetValue("field", typeof(string)));
        }
Example #8
0
		public SortField(System.String field, SortComparatorSource comparator, bool reverse)
		{
			InitFieldType(field, CUSTOM);
			SetUseLegacySearch(true);
			this.reverse = reverse;
			this.factory = comparator;
		}
Example #9
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);
		}
        internal static ScoreDocComparator GetCachedComparator(IndexReader reader, System.String fieldname, int type, System.Globalization.CultureInfo locale, SortComparatorSource factory)
        {
            if (type == SortField.DOC)
                return Lucene.Net.Search.ScoreDocComparator_Fields.INDEXORDER;
            if (type == SortField.SCORE)
                return Lucene.Net.Search.ScoreDocComparator_Fields.RELEVANCE;
            ScoreDocComparator comparator = Lookup(reader, fieldname, type, locale, factory);
            if (comparator == null)
            {
                switch (type)
                {

                    case SortField.AUTO:
                        comparator = ComparatorAuto(reader, fieldname);
                        break;

                    case SortField.INT:
                        comparator = ComparatorInt(reader, fieldname);
                        break;

                    case SortField.FLOAT:
                        comparator = ComparatorFloat(reader, fieldname);
                        break;

                    case SortField.STRING:
                        if (locale != null)
                            comparator = ComparatorStringLocale(reader, fieldname, locale);
                        else
                            comparator = ComparatorString(reader, fieldname);
                        break;

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

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

                }
                Store(reader, fieldname, type, locale, factory, comparator);
            }
            return comparator;
        }
 /// <summary>Creates a sort, possibly in reverse, with a custom comparison function.</summary>
 /// <param name="field">Name of field to sort by; cannot be <code>null</code>.
 /// </param>
 /// <param name="comparator">Returns a comparator for sorting hits.
 /// </param>
 /// <param name="reverse">True if natural order should be reversed.
 /// </param>
 public SortField(System.String field, SortComparatorSource comparator, bool reverse)
 {
     this.field = (field != null)?String.Intern(field):field;
     this.type = CUSTOM;
     this.reverse = reverse;
     this.factory = comparator;
 }