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

搜索引擎

开发平台:

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.Index
  18. {
  19. sealed class SegmentMergeInfo
  20. {
  21. internal Term term;
  22. internal int base_Renamed;
  23. internal TermEnum termEnum;
  24. internal IndexReader reader;
  25. private TermPositions postings; // use getPositions()
  26. private int[] docMap; // use getDocMap()
  27. internal SegmentMergeInfo(int b, TermEnum te, IndexReader r)
  28. {
  29. base_Renamed = b;
  30. reader = r;
  31. termEnum = te;
  32. term = te.Term();
  33. }
  34. // maps around deleted docs
  35. internal int[] GetDocMap()
  36. {
  37. if (docMap == null)
  38. {
  39. // build array which maps document numbers around deletions 
  40. if (reader.HasDeletions())
  41. {
  42. int maxDoc = reader.MaxDoc();
  43. docMap = new int[maxDoc];
  44. int j = 0;
  45. for (int i = 0; i < maxDoc; i++)
  46. {
  47. if (reader.IsDeleted(i))
  48. docMap[i] = - 1;
  49. else
  50. docMap[i] = j++;
  51. }
  52. }
  53. }
  54. return docMap;
  55. }
  56. internal TermPositions GetPositions()
  57. {
  58. if (postings == null)
  59. {
  60. postings = reader.TermPositions();
  61. }
  62. return postings;
  63. }
  64. internal bool Next()
  65. {
  66. if (termEnum.Next())
  67. {
  68. term = termEnum.Term();
  69. return true;
  70. }
  71. else
  72. {
  73. term = null;
  74. return false;
  75. }
  76. }
  77. internal void  Close()
  78. {
  79. termEnum.Close();
  80. if (postings != null)
  81. {
  82. postings.Close();
  83. }
  84. }
  85. }
  86. }