SortComparator.cs
上传用户:zhangkuixh
上传日期:2013-09-30
资源大小:5473k
文件大小:4k
源码类别:

搜索引擎

开发平台:

C#

  1. /*
  2.  * Copyright 2004 The Apache Software Foundation
  3.  * 
  4.  * Licensed under the Apache License, Version 2.0 (the "License");
  5.  * you may not use this file except in compliance with the License.
  6.  * You may obtain a copy of the License at
  7.  * 
  8.  * http://www.apache.org/licenses/LICENSE-2.0
  9.  * 
  10.  * Unless required by applicable law or agreed to in writing, software
  11.  * distributed under the License is distributed on an "AS IS" BASIS,
  12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13.  * See the License for the specific language governing permissions and
  14.  * limitations under the License.
  15.  */
  16. using System;
  17. using IndexReader = Lucene.Net.Index.IndexReader;
  18. namespace Lucene.Net.Search
  19. {
  20. /// <summary> Abstract base class for sorting hits returned by a Query.
  21. /// 
  22. /// <p>This class should only be used if the other SortField
  23. /// types (SCORE, DOC, STRING, INT, FLOAT) do not provide an
  24. /// adequate sorting.  It maintains an internal cache of values which
  25. /// could be quite large.  The cache is an array of Comparable,
  26. /// one for each document in the index.  There is a distinct
  27. /// Comparable for each unique term in the field - if
  28. /// some documents have the same term in the field, the cache
  29. /// array will have entries which reference the same Comparable.
  30. /// 
  31. /// <p>Created: Apr 21, 2004 5:08:38 PM
  32. /// 
  33. /// </summary>
  34. /// <author>   Tim Jones
  35. /// </author>
  36. /// <version>  $Id: SortComparator.java 150541 2004-09-29 15:09:02Z goller $
  37. /// </version>
  38. /// <since>   1.4
  39. /// </since>
  40. [Serializable]
  41. public abstract class SortComparator : SortComparatorSource
  42. {
  43. private class AnonymousClassScoreDocComparator : ScoreDocComparator
  44. {
  45. public AnonymousClassScoreDocComparator(System.IComparable[] cachedValues, SortComparator enclosingInstance)
  46. {
  47. InitBlock(cachedValues, enclosingInstance);
  48. }
  49. private void  InitBlock(System.IComparable[] cachedValues, SortComparator enclosingInstance)
  50. {
  51. this.cachedValues = cachedValues;
  52. this.enclosingInstance = enclosingInstance;
  53. }
  54. private System.IComparable[] cachedValues;
  55. private SortComparator enclosingInstance;
  56. public SortComparator Enclosing_Instance
  57. {
  58. get
  59. {
  60. return enclosingInstance;
  61. }
  62. }
  63. public virtual int Compare(ScoreDoc i, ScoreDoc j)
  64. {
  65. return cachedValues[i.doc].CompareTo(cachedValues[j.doc]);
  66. }
  67. public virtual System.IComparable SortValue(ScoreDoc i)
  68. {
  69. return cachedValues[i.doc];
  70. }
  71. public virtual int SortType()
  72. {
  73. return SortField.CUSTOM;
  74. }
  75. }
  76. // inherit javadocs
  77. public virtual ScoreDocComparator NewComparator(IndexReader reader, System.String fieldname)
  78. {
  79. System.String field = String.Intern(fieldname);
  80. System.IComparable[] cachedValues = Lucene.Net.Search.FieldCache_Fields.DEFAULT.GetCustom(reader, field, this);
  81. return new AnonymousClassScoreDocComparator(cachedValues, this);
  82. }
  83. /// <summary> Returns an object which, when sorted according to natural order,
  84. /// will order the Term values in the correct order.
  85. /// <p>For example, if the Terms contained integer values, this method
  86. /// would return <code>new Integer(termtext)</code>.  Note that this
  87. /// might not always be the most efficient implementation - for this
  88. /// particular example, a better implementation might be to make a
  89. /// ScoreDocLookupComparator that uses an internal lookup table of int.
  90. /// </summary>
  91. /// <param name="termtext">The textual value of the term.
  92. /// </param>
  93. /// <returns> An object representing <code>termtext</code> that sorts according to the natural order of <code>termtext</code>.
  94. /// </returns>
  95. /// <seealso cref="Comparable">
  96. /// </seealso>
  97. /// <seealso cref="ScoreDocComparator">
  98. /// </seealso>
  99. public /*protected internal*/ abstract System.IComparable GetComparable(System.String termtext);
  100. }
  101. }