This may be off base, but I've recently been in something similar.

The first part was just to iterate through the TopDocs that's available to
my and normalize the scores right in the ScoreDocs. Like this...

       for (ScoreDoc scd : this.topDocs.scoreDocs) {
           scd.score = this.getBucket(scd.score, maxScore);
       }

where getBucket is my score normalizer, and in your case it would round your
scores.


Then I constructed a Sort object with SortField.FIELD_SCORE as the first
sotrField, like this...

       Sort stuff = new Sort(
                   new SortField[] {
                       SortField.FIELD_SCORE,
                       new SortField("somefield"),
                       new SortField("someotherfield")
                   });

and passed that object to the FieldSortedHitQueue.

Erick

On 2/27/07, Peter Keegan <[EMAIL PROTECTED]> wrote:

I'm building up the Sort object for the search with 2 SortFields - first
is
for the custom rounded scoring, second is for date. This Sort object is
used
to construct a FieldSortedHitQueue which is used with a custom
HitCollector.
And yes, this comparator ignores the field name.

> hmmm, actually i see now that SortField(String,SortComparatorSource)
says
it cannot > be null ... not sure if that's actually enforced or not

The constructor doesn't complain, but FieldSortedHitQueue expects a field
name when it tries to locate the comparator from the cache:

    at org.apache.lucene.search.FieldCacheImpl$Entry.<init>(
FieldCacheImpl.java:60)
    at org.apache.lucene.search.FieldSortedHitQueue.lookup(
FieldSortedHitQueue.java:157)
    at org.apache.lucene.search.FieldSortedHitQueue.getCachedComparator(
FieldSortedHitQueue.java:185)
    at org.apache.lucene.search.FieldSortedHitQueue.<init>(
FieldSortedHitQueue.java:58)

Peter

On 2/27/07, Chris Hostetter <[EMAIL PROTECTED]> wrote:
>
>
> : Suppose one wanted to use this custom rounding score comparator on all
> : fields and all queries. How would you get it plugged in most
> efficiently,
> : given that SortField requires a non-null field name?
>
> i'm not sure i understand the first part of question .. this custom
> SortComparatorSource would deal only with the score, it wouldn't matter
> what other fields you'd want to make SortFields on to do secondary
> sorting. .. You as the client have to specify the Sort obejct when
> executing the search, and you can build that Sort object up anyway you
> want.
>
> Yes the SortField class has a constructor arg for field, but
> as you can see from the javadocs, it can be null in many circumstances
> (consider SortFiled#FIELD_SCORE and SortField#FIELD_DOC for instance)
...
> hmmm, actually i see now that SortField(String,SortComparatorSource)
says
> it cannot be null ... not sure if that's actually enforced or not, but
> it's no bother -- all that matters is that you don't make any attempt to
> use the field name in your SortComparatorSource.
>
>
> -Hoss
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to