Save This Page
Home » lucene-2.3.2-src » org.apache » lucene » misc » [javadoc | source]
org.apache.lucene.misc
public class: SweetSpotSimilarity [javadoc | source]
java.lang.Object
   org.apache.lucene.search.Similarity
      org.apache.lucene.search.DefaultSimilarity
         org.apache.lucene.misc.SweetSpotSimilarity

All Implemented Interfaces:
    Serializable

A similarity with a lengthNorm that provides for a "platuea" of equally good lengths, and tf helper functions.

For lengthNorm, A global min/max can be specified to define the platuea of lengths that should all have a norm of 1.0. Below the min, and above the max the lengthNorm drops off in a sqrt function.

A per field min/max can be specified if different fields have different sweet spots.

For tf, baselineTf and hyperbolicTf functions are provided, which subclasses can choose between.

Constructor:
 public SweetSpotSimilarity() 
Method from org.apache.lucene.misc.SweetSpotSimilarity Summary:
baselineTf,   hyperbolicTf,   lengthNorm,   setBaselineTfFactors,   setHyperbolicTfFactors,   setLengthNormFactors,   setLengthNormFactors,   tf
Methods from org.apache.lucene.search.DefaultSimilarity:
coord,   idf,   lengthNorm,   queryNorm,   sloppyFreq,   tf
Methods from org.apache.lucene.search.Similarity:
coord,   decodeNorm,   encodeNorm,   getDefault,   getNormDecoder,   idf,   idf,   idf,   lengthNorm,   queryNorm,   scorePayload,   setDefault,   sloppyFreq,   tf,   tf
Methods from java.lang.Object:
equals,   getClass,   hashCode,   notify,   notifyAll,   toString,   wait,   wait,   wait
Method from org.apache.lucene.misc.SweetSpotSimilarity Detail:
 public float baselineTf(float freq) 
    Implemented as: (x <= min) ? base : sqrt(x+(base**2)-min) ...but with a special case check for 0.

    This degrates to sqrt(x) when min and base are both 0

 public float hyperbolicTf(float freq) 
    Uses a hyperbolic tangent function that allows for a hard max... tf(x)=min+(max-min)/2*(((base**(x-xoffset)-base**-(x-xoffset))/(base**(x-xoffset)+base**-(x-xoffset)))+1)

    This code is provided as a convincience for subclasses that want to use a hyperbolic tf function.

 public float lengthNorm(String fieldName,
    int numTerms) 
    Implemented as: 1/sqrt( steepness * (abs(x-min) + abs(x-max) - (max-min)) + 1 ) .

    This degrades to 1/sqrt(x) when min and max are both 1 and steepness is 0.5

    :TODO: potential optimiation is to just flat out return 1.0f if numTerms is between min and max.

 public  void setBaselineTfFactors(float base,
    float min) 
    Sets the baseline and minimum function variables for baselineTf
 public  void setHyperbolicTfFactors(float min,
    float max,
    double base,
    float xoffset) 
    Sets the function variables for the hyperbolicTf functions
 public  void setLengthNormFactors(int min,
    int max,
    float steepness) 
    Sets the default function variables used by lengthNorm when no field specifc variables have been set.
 public  void setLengthNormFactors(String field,
    int min,
    int max,
    float steepness) 
    Sets the function variables used by lengthNorm for a specific named field
 public float tf(int freq) 
    Delegates to baselineTf