1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 using System; 19 using Attribute = Lucene.Net.Util.Attribute; 20 using TokenStream = Lucene.Net.Analysis.TokenStream; 21 22 namespace Lucene.Net.Analysis.Tokenattributes 23 { 24 25 /// <summary>The positionIncrement determines the position of this token 26 /// relative to the previous Token in a <see cref="TokenStream" />, used in phrase 27 /// searching. 28 /// 29 /// <p/>The default value is one. 30 /// 31 /// <p/>Some common uses for this are:<list> 32 /// 33 /// <item>Set it to zero to put multiple terms in the same position. This is 34 /// useful if, e.g., a word has multiple stems. Searches for phrases 35 /// including either stem will match. In this case, all but the first stem's 36 /// increment should be set to zero: the increment of the first instance 37 /// should be one. Repeating a token with an increment of zero can also be 38 /// used to boost the scores of matches on that token.</item> 39 /// 40 /// <item>Set it to values greater than one to inhibit exact phrase matches. 41 /// If, for example, one does not want phrases to match across removed stop 42 /// words, then one could build a stop word filter that removes stop words and 43 /// also sets the increment to the number of stop words removed before each 44 /// non-stop word. Then exact phrase queries will only match when the terms 45 /// occur with no intervening stop words.</item> 46 /// 47 /// </list> 48 /// </summary> 49 [Serializable] 50 public class PositionIncrementAttribute:Attribute, IPositionIncrementAttribute, System.ICloneable 51 { 52 private int positionIncrement = 1; 53 54 /// <summary>Set the position increment. The default value is one. 55 /// 56 /// </summary> 57 /// <value> the distance from the prior term </value> 58 public virtual int PositionIncrement 59 { 60 set 61 { 62 if (value < 0) 63 throw new System.ArgumentException("Increment must be zero or greater: " + value); 64 this.positionIncrement = value; 65 } 66 get { return positionIncrement; } 67 } 68 Clear()69 public override void Clear() 70 { 71 this.positionIncrement = 1; 72 } 73 Equals(System.Object other)74 public override bool Equals(System.Object other) 75 { 76 if (other == this) 77 { 78 return true; 79 } 80 81 if (other is PositionIncrementAttribute) 82 { 83 return positionIncrement == ((PositionIncrementAttribute) other).positionIncrement; 84 } 85 86 return false; 87 } 88 GetHashCode()89 public override int GetHashCode() 90 { 91 return positionIncrement; 92 } 93 CopyTo(Attribute target)94 public override void CopyTo(Attribute target) 95 { 96 IPositionIncrementAttribute t = (IPositionIncrementAttribute) target; 97 t.PositionIncrement = positionIncrement; 98 } 99 Clone()100 override public System.Object Clone() 101 { 102 PositionIncrementAttribute impl = new PositionIncrementAttribute(); 103 impl.positionIncrement = positionIncrement; 104 return impl; 105 } 106 } 107 }