I have had to do similar things to other methods of Similarity. In my example, 
I wanted to have different behavior for the tf() method for each field. The tf 
method does not include a field parameter as an input to it. The only solution 
I could come up with was to add a thread local to set the field and then check 
the thread local within the tf function. Here's the tf function...

        public float tf(float freq) {

                // Get the value of the thread local...
                String field = FieldThreadLocal.getField();

                if ("fieldA".equals(field)) {
                        // always return 1 for field A
                        return 1;
                } else {
                        // otherwise, use the normal tf function
                        return super.tf(freq);
                }
        }

tf() is used during scoring so I had to override the TermQuery (and TermWeight 
and TermScorer) to be able to set and clear the thread local at the appropriate 
times. This is a pretty ugly hack, but I couldn't find another way to make this 
work.

computeNorm() is calculated at index creation time but you try to do something 
similar.

Would be curious if other people had a better suggestion as to how to do this.

-----Original Message-----
From: Tsvika Rabkin [mailto:tsvika.rab...@gmail.com] 
Sent: Tuesday, February 01, 2011 5:27 AM
To: java-user@lucene.apache.org
Subject: Using different field when overriding computeNorm

Hi,

I would like to override default similarity's computeNorm to work with
a different field, other than the query field.

Here is the DefaultSimilarity implementation:

@Override
  public float computeNorm(String field, FieldInvertState state) {
    final int numTerms;
    if (discountOverlaps)
      numTerms = state.getLength() - state.getNumOverlap();
    else
      numTerms = state.getLength();
    return state.getBoost() * ((float) (1.0 / Math.sqrt(numTerms)));
  }

any ideas how to do that?

Thanks,

Tsvika

---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-user-h...@lucene.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-user-h...@lucene.apache.org

Reply via email to