You cannot override static methods - this is how Java works. You can override any of the non-static (and non-final) methods.

        Erik


On Dec 17, 2004, at 1:02 PM, Dan Climan wrote:

Thanks for pointing out the error in my originally proposed solution to the
question of overriding encodeNorm and decodeNorm, but am I correct that
there's an issue?


Is it possible to override the encodeNorm and decode Norm using the public
API?


My strategy has been as follows:
a) define a custom encodeNorm and decodeNorm (see below)
b) Every time I get a new IndexWriter or IndexSearcher, I immediately call
setSimilarity. For Example:


IndexWriter iw = new IndexWriter(dir, aAnalyzer, overwriteIndex);
iw.setSimilarity(new MySimilarity());

OR

searcher = new IndexSearcher(reader);
searcher.setSimilarity(new MySimilarity());


I define MySimilarity as follows:

public class MySimilarity extends DefaultSimilarity {
    public  MySimilarity() {
        super();
    }

    public static byte encodeNorm(float f) {
        int insertion = Math.abs(Arrays.binarySearch(kmNorms, f));
        if (insertion >= 256)
            insertion = 255;
        byte b = (byte) (insertion - 128);

        return b;
    }

    public static float decodeNorm(byte b) {
        return MYNORMS[(int)b + 128];
    }

    public float lengthNorm(String fieldName, int numTerms) {
        return 1.0f;
    }


//Note this is an array of 256 values in sorted order public static final float[] MYNORMS = { 0.0000E+00f, 1.0000E-10f, 1.0000E-09f, . . . 1.0000E+04f, 1.0000E+05f }; }


I would have expected that once setSimilarity is called for an IndexWriter
or IndexSearcher that all use of a Similarity method would come from the
Similarity that was set. Since the classes I mentioned previously all have
constructions such as "Similarity.decodeNorm(f)". They do not appear to
behave this way.


Do you agree that IndexWriter and IndexSearcher should behave as I suggest
with regard to setSimilarity?


Is there another way to accomplish a change in the encodeNorm/decodeNorm
using the existing API? If not, should I try to generate a patch to the
classes that use this construction to force them to use the simliarity set
by setSimilarity?


Dan



-----Original Message-----
From: Doug Cutting [mailto:[EMAIL PROTECTED]
Sent: Thursday, December 16, 2004 9:28 PM
To: Lucene Developers List
Subject: Re: Explanations and overridden similarity


Dan Climan wrote:
Shouldn't the call to Similarity.decodeNorm be replaced with a call to
Similarity.getDefault().decodeNorm

decodeNorm is a static method.

Doug


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


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



Reply via email to