Package org.apache.lucene.misc

# Class SweetSpotSimilarity

java.lang.Object
org.apache.lucene.search.similarities.Similarity
org.apache.lucene.search.similarities.TFIDFSimilarity
org.apache.lucene.search.similarities.ClassicSimilarity
org.apache.lucene.misc.SweetSpotSimilarity

public class SweetSpotSimilarity extends ClassicSimilarity
A similarity with a lengthNorm that provides for a "plateau" of equally good lengths, and tf helper functions.

For lengthNorm, A min/max can be specified to define the plateau 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.

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

See Also:
  - A Gnuplot file used to generate some of the visualizations referenced from each function.

- ## Nested Class Summary

  ## Nested classes/interfaces inherited from class org.apache.lucene.search.similarities.Similarity

  `Similarity.BulkSimScorer, Similarity.SimScorer`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `SweetSpotSimilarity()`
  Default constructor: parameter-free
  `SweetSpotSimilarity(boolean discountOverlaps)`
  Primary constructor.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `float`
  `baselineTf(float freq)`
  Implemented as: `(x <= min) ? base : sqrt(x+(base**2)-min)` ...but with a special case check for 0.
  `float`
  `hyperbolicTf(float freq)`
  Uses a hyperbolic tangent function that allows for a hard max...
  `float`
  `lengthNorm(int numTerms)`
  Implemented as: `1/sqrt( steepness * (abs(x-min) + abs(x-max) - (max-min)) + 1 )` .
  `void`
  `setBaselineTfFactors(float base, float min)`
  Sets the baseline and minimum function variables for baselineTf
  `void`
  `setHyperbolicTfFactors(float min, float max, double base, float xoffset)`
  Sets the function variables for the hyperbolicTf functions
  `void`
  `setLengthNormFactors(int min, int max, float steepness)`
  Sets the default function variables used by lengthNorm when no field specific variables have been set.
  `float`
  `tf(float freq)`
  Delegates to baselineTf
  `String`
  `toString()`

  ### Methods inherited from class org.apache.lucene.search.similarities.ClassicSimilarity

  `idf, idfExplain`

  ### Methods inherited from class org.apache.lucene.search.similarities.TFIDFSimilarity

  `idfExplain, scorer`

  ### Methods inherited from class org.apache.lucene.search.similarities.Similarity

  `computeNorm, getDiscountOverlaps`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- ## Constructor Details

  - ### SweetSpotSimilarity

    public SweetSpotSimilarity()
    Default constructor: parameter-free

  - ### SweetSpotSimilarity

    public SweetSpotSimilarity(boolean discountOverlaps)
    Primary constructor.

- ## Method Details

  - ### setBaselineTfFactors

    public void setBaselineTfFactors(float base, float min)
    Sets the baseline and minimum function variables for baselineTf
    See Also:
      - `baselineTf(float)`

  - ### setHyperbolicTfFactors

    public void setHyperbolicTfFactors(float min, float max, double base, float xoffset)
    Sets the function variables for the hyperbolicTf functions
    Parameters:
      `min` - the minimum tf value to ever be returned (default: 0.0)
      `max` - the maximum tf value to ever be returned (default: 2.0)
      `base` - the base value to be used in the exponential for the hyperbolic function (default: 1.3)
      `xoffset` - the midpoint of the hyperbolic function (default: 10.0)
    See Also:
      - `hyperbolicTf(float)`

  - ### setLengthNormFactors

    public void setLengthNormFactors(int min, int max, float steepness)
    Sets the default function variables used by lengthNorm when no field specific variables have been set.
    See Also:
      - `lengthNorm(int)`

  - ### lengthNorm

    public float lengthNorm(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 optimization is to just flat out return 1.0f if numTerms is between min and max.

    Overrides:
      `lengthNorm` in class `ClassicSimilarity`
    See Also:
      - `setLengthNormFactors(int, int, float)`
      - An SVG visualization of this function

  - ### tf

    public float tf(float freq)
    Delegates to baselineTf
    Overrides:
      `tf` in class `ClassicSimilarity`
    See Also:
      - `baselineTf(float)`

  - ### baselineTf

    public float baselineTf(float freq)
    Implemented as: `(x <= min) ? base : sqrt(x+(base**2)-min)` ...but with a special case check for 0.

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

    See Also:
      - `setBaselineTfFactors(float, float)`
      - An SVG visualization of this function

  - ### hyperbolicTf

    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 convenience for subclasses that want to use a hyperbolic tf function.

    See Also:
      - `setHyperbolicTfFactors(float, float, double, float)`
      - An SVG visualization of this function

  - ### toString

    public String toString()
    Overrides:
      `toString` in class `ClassicSimilarity`