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); }
public SortField(System.String field, SortComparatorSource comparator, bool reverse) { InitFieldType(field, CUSTOM); SetUseLegacySearch(true); this.reverse = reverse; this.factory = 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; }
/// <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); }
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; }