Hello,

 

I'm trying to use the doc parameter to build a customScore, but the 'doc'
value seems to be different from the global 'docId' when the index is not
optimized.

 

 

Basically, I create a DateScoreQuery passing the IndexReader and the field
containing the timestamp (as long)

And I use the FieldCache to access the timestamp value.

 

 

public class DateScoreQuery extends CustomScoreQuery {

      private IndexReader ir;

      private String fld;

 

      public DateScoreQuery(Query subQuery,  IndexReader indexReader, String
fieldTimeStamp) {

            super(subQuery);

            ir = indexReader;

            fld=fieldTimeStamp;

      }

 

      public float customScore(int doc, float subQueryScore, float
valSrcScore) {

 

            long[] timeStamps;

            try {

timeStamps = FieldCache.DEFAULT.getLongs(ir, fld);

}catch(IOException e){.}

            long docTimeStamp = timeStamps[doc];

            return subQueryScore * timeRatio(docTimeStamp);

        }

.

}

 

When the index is not optimized, customScore(doc) is never called for high
values doc.

Instead, when I debug, I can see doc values looping  through cycles.

 

 

After index optimization, returned values seemed to be correct.

 

 

Paul Giraudon

 

Reply via email to