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

搜索引擎

开发平台:

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. using Term = Lucene.Net.Index.Term;
  19. using TermPositions = Lucene.Net.Index.TermPositions;
  20. using ToStringUtils = Lucene.Net.Util.ToStringUtils;
  21. namespace Lucene.Net.Search.Spans
  22. {
  23. /// <summary>Matches spans containing a term. </summary>
  24. [Serializable]
  25. public class SpanTermQuery:SpanQuery
  26. {
  27. private class AnonymousClassSpans : Spans
  28. {
  29. public AnonymousClassSpans(Lucene.Net.Index.IndexReader reader, SpanTermQuery enclosingInstance)
  30. {
  31. InitBlock(reader, enclosingInstance);
  32. }
  33. private void  InitBlock(Lucene.Net.Index.IndexReader reader, SpanTermQuery enclosingInstance)
  34. {
  35. this.reader = reader;
  36. this.enclosingInstance = enclosingInstance;
  37. positions = reader.TermPositions(Enclosing_Instance.term);
  38. }
  39. private Lucene.Net.Index.IndexReader reader;
  40. private SpanTermQuery enclosingInstance;
  41. public SpanTermQuery Enclosing_Instance
  42. {
  43. get
  44. {
  45. return enclosingInstance;
  46. }
  47. }
  48. private TermPositions positions;
  49. private int doc = - 1;
  50. private int freq;
  51. private int count;
  52. private int position;
  53. public virtual bool Next()
  54. {
  55. if (count == freq)
  56. {
  57. if (!positions.Next())
  58. {
  59. doc = System.Int32.MaxValue;
  60. return false;
  61. }
  62. doc = positions.Doc();
  63. freq = positions.Freq();
  64. count = 0;
  65. }
  66. position = positions.NextPosition();
  67. count++;
  68. return true;
  69. }
  70. public virtual bool SkipTo(int target)
  71. {
  72. // are we already at the correct position?
  73. if (doc >= target)
  74. {
  75. return true;
  76. }
  77. if (!positions.SkipTo(target))
  78. {
  79. doc = System.Int32.MaxValue;
  80. return false;
  81. }
  82. doc = positions.Doc();
  83. freq = positions.Freq();
  84. count = 0;
  85. position = positions.NextPosition();
  86. count++;
  87. return true;
  88. }
  89. public virtual int Doc()
  90. {
  91. return doc;
  92. }
  93. public virtual int Start()
  94. {
  95. return position;
  96. }
  97. public virtual int End()
  98. {
  99. return position + 1;
  100. }
  101. public override System.String ToString()
  102. {
  103. return "spans(" + Enclosing_Instance.ToString() + ")@" + (doc == - 1?"START":((doc == System.Int32.MaxValue)?"END":doc + "-" + position));
  104. }
  105. }
  106. private Term term;
  107. /// <summary>Construct a SpanTermQuery matching the named term's spans. </summary>
  108. public SpanTermQuery(Term term)
  109. {
  110. this.term = term;
  111. }
  112. /// <summary>Return the term whose spans are matched. </summary>
  113. public virtual Term GetTerm()
  114. {
  115. return term;
  116. }
  117. public override System.String GetField()
  118. {
  119. return term.Field();
  120. }
  121. public override System.Collections.ICollection GetTerms()
  122. {
  123. System.Collections.ArrayList terms = new System.Collections.ArrayList();
  124. terms.Add(term);
  125. return terms;
  126. }
  127. public override System.String ToString(System.String field)
  128. {
  129. System.Text.StringBuilder buffer = new System.Text.StringBuilder();
  130. if (term.Field().Equals(field))
  131. buffer.Append(term.Text());
  132. else
  133. {
  134. buffer.Append(term.ToString());
  135. }
  136. buffer.Append(ToStringUtils.Boost(GetBoost()));
  137. return buffer.ToString();
  138. }
  139. /// <summary>Returns true iff <code>o</code> is equal to this. </summary>
  140. public  override bool Equals(System.Object o)
  141. {
  142. if (!(o is SpanTermQuery))
  143. return false;
  144. SpanTermQuery other = (SpanTermQuery) o;
  145. return (this.GetBoost() == other.GetBoost()) && this.term.Equals(other.term);
  146. }
  147. /// <summary>Returns a hash code value for this object.</summary>
  148. public override int GetHashCode()
  149. {
  150.             return GetBoost().ToString().GetHashCode() ^ term.GetHashCode();    // {{Aroush-1.9}} Is this OK?
  151. }
  152. public override Spans GetSpans(IndexReader reader)
  153. {
  154. return new AnonymousClassSpans(reader, this);
  155. }
  156. }
  157. }