Scorer.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. namespace Lucene.Net.Search
  18. {
  19. /// <summary>Expert: Common scoring functionality for different types of queries.
  20. /// <br>A <code>Scorer</code> either iterates over documents matching a query,
  21. /// or provides an explanation of the score for a query for a given document.
  22. /// <br>Document scores are computed using a given <code>Similarity</code> implementation.
  23. /// </summary>
  24. public abstract class Scorer
  25. {
  26. private Similarity similarity;
  27. /// <summary>Constructs a Scorer.</summary>
  28. /// <param name="similarity">The <code>Similarity</code> implementation used by this scorer.
  29. /// </param>
  30. protected internal Scorer(Similarity similarity)
  31. {
  32. this.similarity = similarity;
  33. }
  34. /// <summary>Returns the Similarity implementation used by this scorer. </summary>
  35. public virtual Similarity GetSimilarity()
  36. {
  37. return this.similarity;
  38. }
  39. /// <summary>Scores and collects all matching documents.</summary>
  40. /// <param name="hc">The collector to which all matching documents are passed through
  41. /// {@link HitCollector#Collect(int, float)}.
  42. /// <br>When this method is used the {@link #Explain(int)} method should not be used.
  43. /// </param>
  44. public virtual void  Score(HitCollector hc)
  45. {
  46. while (Next())
  47. {
  48. hc.Collect(Doc(), Score());
  49. }
  50. }
  51. /// <summary>Expert: Collects matching documents in a range.  Hook for optimization.
  52. /// Note that {@link #Next()} must be called once before this method is called
  53. /// for the first time.
  54. /// </summary>
  55. /// <param name="hc">The collector to which all matching documents are passed through
  56. /// {@link HitCollector#Collect(int, float)}.
  57. /// </param>
  58. /// <param name="max">Do not score documents past this.
  59. /// </param>
  60. /// <returns> true if more matching documents may remain.
  61. /// </returns>
  62. protected internal virtual bool Score(HitCollector hc, int max)
  63. {
  64. while (Doc() < max)
  65. {
  66. hc.Collect(Doc(), Score());
  67. if (!Next())
  68. return false;
  69. }
  70. return true;
  71. }
  72. /// <summary>Advances to the next document matching the query.</summary>
  73. /// <returns> true iff there is another document matching the query.
  74. /// <br>When this method is used the {@link #Explain(int)} method should not be used.
  75. /// </returns>
  76. public abstract bool Next();
  77. /// <summary>Returns the current document number matching the query.
  78. /// Initially invalid, until {@link #Next()} is called the first time.
  79. /// </summary>
  80. public abstract int Doc();
  81. /// <summary>Returns the score of the current document matching the query.
  82. /// Initially invalid, until {@link #Next()} or {@link #SkipTo(int)}
  83. /// is called the first time.
  84. /// </summary>
  85. public abstract float Score();
  86. /// <summary>Skips to the first match beyond the current whose document number is
  87. /// greater than or equal to a given target.
  88. /// <br>When this method is used the {@link #Explain(int)} method should not be used.
  89. /// </summary>
  90. /// <param name="target">The target document number.
  91. /// </param>
  92. /// <returns> true iff there is such a match.
  93. /// <p>Behaves as if written: <pre>
  94. /// boolean skipTo(int target) {
  95. /// do {
  96. /// if (!next())
  97. /// return false;
  98. /// } while (target > doc());
  99. /// return true;
  100. /// }
  101. /// </pre>Most implementations are considerably more efficient than that.
  102. /// </returns>
  103. public abstract bool SkipTo(int target);
  104. /// <summary>Returns an explanation of the score for a document.
  105. /// <br>When this method is used, the {@link #Next()}, {@link #SkipTo(int)} and
  106. /// {@link #Score(HitCollector)} methods should not be used.
  107. /// </summary>
  108. /// <param name="doc">The document number for the explanation.
  109. /// </param>
  110. public abstract Explanation Explain(int doc);
  111. }
  112. }