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

搜索引擎

开发平台:

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 BooleanClause = Lucene.Net.Search.BooleanClause;
  20. using BooleanQuery = Lucene.Net.Search.BooleanQuery;
  21. using Query = Lucene.Net.Search.Query;
  22. using TermQuery = Lucene.Net.Search.TermQuery;
  23. using SpanOrQuery = Lucene.Net.Search.Spans.SpanOrQuery;
  24. using SpanQuery = Lucene.Net.Search.Spans.SpanQuery;
  25. using SpanTermQuery = Lucene.Net.Search.Spans.SpanTermQuery;
  26. using ToStringUtils = Lucene.Net.Util.ToStringUtils;
  27. namespace Lucene.Net.Search.Regex
  28. {
  29. [Serializable]
  30. public class SpanRegexQuery:SpanQuery
  31. {
  32. virtual public Term Term
  33. {
  34. get
  35. {
  36. return term;
  37. }
  38. }
  39. private Term term;
  40. public SpanRegexQuery(Term term)
  41. {
  42. this.term = term;
  43. }
  44. public override Query Rewrite(IndexReader reader)
  45. {
  46. Query orig = new RegexQuery(term).Rewrite(reader);
  47. // RegexQuery (via MultiTermQuery).rewrite always returns a BooleanQuery
  48. BooleanQuery bq = (BooleanQuery) orig;
  49. BooleanClause[] clauses = bq.GetClauses();
  50. SpanQuery[] sqs = new SpanQuery[clauses.Length];
  51. for (int i = 0; i < clauses.Length; i++)
  52. {
  53. BooleanClause clause = clauses[i];
  54. // Clauses from RegexQuery.rewrite are always TermQuery's
  55. TermQuery tq = (TermQuery) clause.GetQuery();
  56. sqs[i] = new SpanTermQuery(tq.GetTerm());
  57. sqs[i].SetBoost(tq.GetBoost());
  58. }
  59. SpanOrQuery query = new SpanOrQuery(sqs);
  60. query.SetBoost(orig.GetBoost());
  61. return query;
  62. }
  63. public override Lucene.Net.Search.Spans.Spans GetSpans(IndexReader reader)
  64. {
  65. throw new System.NotSupportedException("Query should have been rewritten");
  66. }
  67. public override System.String GetField()
  68. {
  69. return term.Field();
  70. }
  71. public override System.Collections.ICollection GetTerms()
  72. {
  73. System.Collections.ArrayList terms = new System.Collections.ArrayList();
  74.             terms.Add(term);
  75. return terms;
  76. }
  77. public  override bool Equals(System.Object o)
  78. {
  79. if (this == o)
  80. return true;
  81. if (o == null || GetType() != o.GetType())
  82. return false;
  83. SpanRegexQuery that = (SpanRegexQuery) o;
  84. return term.Equals(that.term) && GetBoost() == that.GetBoost();
  85. }
  86. public override int GetHashCode()
  87. {
  88. return term.GetHashCode();
  89. }
  90. public override System.String ToString(System.String field)
  91. {
  92. System.Text.StringBuilder buffer = new System.Text.StringBuilder();
  93. buffer.Append("spanRegexQuery(");
  94. buffer.Append(term);
  95. buffer.Append(")");
  96. buffer.Append(ToStringUtils.Boost(GetBoost()));
  97. return buffer.ToString();
  98. }
  99. }
  100. }