> > A workaround for what? It's not clear what you're trying to do. >
Here is what i am trying to do: A simple class to filter a field FieldFilter.java ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- ---------- import java.util.BitSet; import java.io.IOException; import org.apache.lucene.index.Term; import org.apache.lucene.index.TermDocs; import org.apache.lucene.index.IndexReader; public class FieldFilter extends org.apache.lucene.search.Filter { private String field; private String value; private Term searchTerm; public FieldFilter(String field, String value) { this.field = field; this.value = value; searchTerm = new Term(field, value); } public String getField() { return field; } public BitSet bits(IndexReader reader) throws IOException { BitSet bits = new BitSet(reader.maxDoc()); TermDocs matchingDocs = reader.termDocs(searchTerm); try { while(matchingDocs.next()) { bits.set(matchingDocs.doc()); } } catch (Exception e) { /* ignore */ } finally { if (matchingDocs != null) { matchingDocs.close(); } } return bits; } } ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- ---------- I then coded a class which handle multiple filters (FieldFilter, DateFilter,....) at once MultiFilter.java ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- ---------- import java.util.Hashtable; import java.util.BitSet; import java.util.ArrayList; import java.io.IOException; import org.apache.lucene.index.Term; import org.apache.lucene.index.TermDocs; import org.apache.lucene.index.IndexReader; import org.apache.lucene.search.Filter; public class MultiFilter extends org.apache.lucene.search.Filter { private ArrayList filterList; public MultiFilter() { filterList = new ArrayList(); } public MultiFilter(int initialCapacity) { filterList = new ArrayList(initialCapacity); } public String getField() { return null; } public void add(Filter filter) { filterList.add(filter); } public BitSet bits(IndexReader reader) throws IOException { int filterListSize = filterList.size(); if (filterListSize > 0) { Hashtable filters = new Hashtable(); int pos=0; for (int i=0; i<filterListSize; i++) { if(!filters.containsKey( ((Filter)filterList.get(i)).getField())) { filters.put(((Filter)filterList.get(i)).getField(),""+pos); pos++; } } BitSet [] tab_bits = new BitSet[filters.size()]; for (int i=0; i<filterListSize; i++) { if(tab_bits[Integer.parseInt((String)filters.get(((Filter)filterList.get(i)) .getField()))]==null) tab_bits[Integer.parseInt((String)filters.get(((Filter)filterList.get(i)).ge tField()))] = ((Filter)filterList.get(i)).bits(reader); else tab_bits[Integer.parseInt((String)filters.get(((Filter)filterList.get(i)).ge tField()))].or(((Filter)filterList.get(i)).bits(reader)); } for(int i=1;i<tab_bits.length;i++) tab_bits[0].and(tab_bits[i]); return tab_bits[0]; } else { return new BitSet(reader.maxDoc()); } } } ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- ---------- As you can see, it's mandatory that the Filter class specify a getFilter method so such MultiFilter can work. > Doug > Best regards Christian -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>