Hi,

I am going mad trying to find out what I am doing wrong with my custom filter 
implementation (almost an exact copy of SpecialsFilter from LIA). I have put 
together a quick sample to illustrate my problem, if some kind soul has 2 
minutes to take a quick look and tell me where I am being so stupid, I would 
really appreciate it:

PROBLEM: Filtered query returns 1 result when it should return 10

TEST RIG: 

Add the documents to the index, every 10 documents having the same 
"advertiserId":
  int idToAdd = 100000;
  for(int i=0;i<100;i++)
  {
   if(i>0 && i%10==0) idToAdd++;
   Document doc = new Document();
   doc.add(new Field("advertiserId", Integer.toString(idToAdd), 
Field.Store.YES, Field.Index.UN_TOKENIZED));
   doc.add(new Field("contents", "document number " + Integer.toString(i) + " 
random string", Field.Store.YES, Field.Index.TOKENIZED));
   writer.addDocument(doc);
  }

I have verified that the docs were created probably by browsing the index with 
Luke.

   String[] advertiserIds = {"100003"};
   IFeaturedAdvertisersAccessor accessor = new 
FeaturedAdvertisersAccessor(advertiserIds);
   Filter filter = new FeaturedAdvertisersFilter(accessor);
   
   TermQuery tq = new TermQuery(new Term("contents", "document"));
   BooleanQuery bq = new BooleanQuery();
   bq.add(tq, Occur.MUST);
   
   Hits hits = searcher.search(tq, filter);
   System.out.println("hits.length: " + hits.length());

result "hits.length: 1"

Source for FeaturedAdvertisersFilter:

public class FeaturedAdvertisersFilter extends Filter
{
 private IFeaturedAdvertisersAccessor accessor;
 
 public FeaturedAdvertisersFilter(IFeaturedAdvertisersAccessor accessor)
 {
  this.accessor = accessor;
 }
 
 public BitSet bits(IndexReader reader) throws IOException
 {
  BitSet bits = new BitSet(reader.maxDoc());   
  String[] advertiserIds = accessor.advertiserIds();
  
  int[] docs = new int[1];
  int[] freqs = new int[1];
  
  for (int i=0; i<advertiserIds.length; i++)
  {
   String advertiserId = advertiserIds[i];
   if (advertiserId!=null)
   {
    TermDocs termDocs = reader.termDocs(new Term("advertiserId", advertiserId));
    int count = termDocs.read(docs, freqs);
    if (count == 1)
    {
     bits.set(docs[0]);
    }
   }
  }
  
  return bits;
 }
}

Any help would be appreciated, Regards,
Paul

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to