1 40 package com.mvnforum.search; 41 42 import java.io.IOException ; 43 import java.util.BitSet ; 44 45 import org.apache.lucene.index.IndexReader; 46 import org.apache.lucene.index.Term; 47 import org.apache.lucene.index.TermDocs; 48 import org.apache.lucene.index.TermEnum; 49 import org.apache.lucene.search.Filter; 50 51 57 public class IntegerFilter extends Filter { 58 String field; 59 String start = intToString(0); 60 String end = intToString(Integer.MAX_VALUE); 61 62 private IntegerFilter(String f) { 63 field = f; 64 } 65 66 70 public IntegerFilter(String field, int from, int to) { 71 this.field = field; 72 start = intToString(from); 73 end = intToString(to); 74 } 75 76 80 public IntegerFilter(String field, Integer from, Integer to) { 81 this.field = field; 82 start = intToString(from.intValue()); 83 end = intToString(to.intValue()); 84 } 85 86 90 public static IntegerFilter greaterThan(String field, Integer i) { 91 IntegerFilter result = new IntegerFilter(field); 92 result.start = intToString(i.intValue()); 93 return result; 94 } 95 96 100 public static IntegerFilter greaterThan(String field, int i) { 101 IntegerFilter result = new IntegerFilter(field); 102 result.start = intToString(i); 103 return result; 104 } 105 106 110 public static IntegerFilter lessThan(String field, Integer i) { 111 IntegerFilter result = new IntegerFilter(field); 112 result.end = intToString(i.intValue()); 113 return result; 114 } 115 116 120 public static IntegerFilter lessThan(String field, int i) { 121 IntegerFilter result = new IntegerFilter(field); 122 result.end = intToString(i); 123 return result; 124 } 125 126 public static String intToString(int i) { 127 return Integer.toString(i, Character.MAX_RADIX); 128 } 129 130 public static int stringToInt(String i) { 131 return Integer.parseInt(i, Character.MAX_RADIX); 132 } 133 134 138 public BitSet bits(IndexReader reader) throws IOException { 139 BitSet bits = new BitSet (reader.maxDoc()); 140 TermEnum enumerator = reader.terms(new Term(field, start)); 141 TermDocs termDocs = reader.termDocs(); 142 if (enumerator.term() == null) { 143 return bits; 144 } 145 try { 146 Term stop = new Term(field, end); 147 while (enumerator.term().compareTo(stop) <= 0) { 148 termDocs.seek(enumerator.term()); 149 while (termDocs.next()) { 150 bits.set(termDocs.doc()); 151 } 152 if (!enumerator.next()) { 153 break; 154 } 155 } 156 } finally { 157 enumerator.close(); 158 termDocs.close(); 159 } 160 return bits; 161 } 162 163 public String toString() { 164 StringBuffer buffer = new StringBuffer (); 165 buffer.append(field); 166 buffer.append(":"); 167 buffer.append(start); 168 buffer.append("-"); 169 buffer.append(end); 170 return buffer.toString(); 171 } 172 } 173 | Popular Tags |