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

搜索引擎

开发平台:

C#

  1. /*
  2.  * Copyright 2005 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. using ToStringUtils = Lucene.Net.Util.ToStringUtils;
  19. namespace Lucene.Net.Search
  20. {
  21. /// <summary> A query that matches all documents.
  22. /// 
  23. /// </summary>
  24. /// <author>  John Wang
  25. /// </author>
  26. [Serializable]
  27. public class MatchAllDocsQuery : Query
  28. {
  29. public MatchAllDocsQuery()
  30. {
  31. }
  32. private class MatchAllScorer:Scorer
  33. {
  34. private void  InitBlock(MatchAllDocsQuery enclosingInstance)
  35. {
  36. this.enclosingInstance = enclosingInstance;
  37. }
  38. private MatchAllDocsQuery enclosingInstance;
  39. public MatchAllDocsQuery Enclosing_Instance
  40. {
  41. get
  42. {
  43. return enclosingInstance;
  44. }
  45. }
  46. internal IndexReader reader;
  47. internal int count;
  48. internal int maxDoc;
  49. internal MatchAllScorer(MatchAllDocsQuery enclosingInstance, IndexReader reader, Similarity similarity) : base(similarity)
  50. {
  51. InitBlock(enclosingInstance);
  52. this.reader = reader;
  53. count = - 1;
  54. maxDoc = reader.MaxDoc();
  55. }
  56. public override int Doc()
  57. {
  58. return count;
  59. }
  60. public override Explanation Explain(int doc)
  61. {
  62. Explanation explanation = new Explanation();
  63. explanation.SetValue(1.0f);
  64. explanation.SetDescription("MatchAllDocsQuery");
  65. return explanation;
  66. }
  67. public override bool Next()
  68. {
  69. while (count < (maxDoc - 1))
  70. {
  71. count++;
  72. if (!reader.IsDeleted(count))
  73. {
  74. return true;
  75. }
  76. }
  77. return false;
  78. }
  79. public override float Score()
  80. {
  81. return 1.0f;
  82. }
  83. public override bool SkipTo(int target)
  84. {
  85. count = target - 1;
  86. return Next();
  87. }
  88. }
  89. [Serializable]
  90. private class MatchAllDocsWeight : Weight
  91. {
  92. private void  InitBlock(MatchAllDocsQuery enclosingInstance)
  93. {
  94. this.enclosingInstance = enclosingInstance;
  95. }
  96. private MatchAllDocsQuery enclosingInstance;
  97. public MatchAllDocsQuery Enclosing_Instance
  98. {
  99. get
  100. {
  101. return enclosingInstance;
  102. }
  103. }
  104. private Searcher searcher;
  105. public MatchAllDocsWeight(MatchAllDocsQuery enclosingInstance, Searcher searcher)
  106. {
  107. InitBlock(enclosingInstance);
  108. this.searcher = searcher;
  109. }
  110. public override System.String ToString()
  111. {
  112. return "weight(" + Enclosing_Instance + ")";
  113. }
  114. public virtual Query GetQuery()
  115. {
  116. return Enclosing_Instance;
  117. }
  118. public virtual float GetValue()
  119. {
  120. return 1.0f;
  121. }
  122. public virtual float SumOfSquaredWeights()
  123. {
  124. return 1.0f;
  125. }
  126. public virtual void  Normalize(float queryNorm)
  127. {
  128. }
  129. public virtual Scorer Scorer(IndexReader reader)
  130. {
  131. return new MatchAllScorer(enclosingInstance, reader, Enclosing_Instance.GetSimilarity(searcher));
  132. }
  133. public virtual Explanation Explain(IndexReader reader, int doc)
  134. {
  135. // explain query weight
  136. Explanation queryExpl = new Explanation();
  137. queryExpl.SetDescription("MatchAllDocsQuery:");
  138. Explanation boostExpl = new Explanation(Enclosing_Instance.GetBoost(), "boost");
  139. if (Enclosing_Instance.GetBoost() != 1.0f)
  140. queryExpl.AddDetail(boostExpl);
  141. queryExpl.SetValue(boostExpl.GetValue());
  142. return queryExpl;
  143. }
  144. }
  145. protected internal override Weight CreateWeight(Searcher searcher)
  146. {
  147. return new MatchAllDocsWeight(this, searcher);
  148. }
  149. public override System.String ToString(System.String field)
  150. {
  151. System.Text.StringBuilder buffer = new System.Text.StringBuilder();
  152. buffer.Append("MatchAllDocsQuery");
  153. buffer.Append(ToStringUtils.Boost(GetBoost()));
  154. return buffer.ToString();
  155. }
  156. public  override bool Equals(System.Object o)
  157. {
  158. if (!(o is MatchAllDocsQuery))
  159. return false;
  160. MatchAllDocsQuery other = (MatchAllDocsQuery) o;
  161. return this.GetBoost() == other.GetBoost();
  162. }
  163. public override int GetHashCode()
  164. {
  165. return BitConverter.ToInt32(BitConverter.GetBytes(GetBoost()), 0);
  166. }
  167.         // {{Aroush-1.9}} Do we need this?!
  168.         override public System.Object Clone()
  169. {
  170. return null;
  171. }
  172. }
  173. }